Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 查找一列中的文本,如果为true,则将其旁边的列中的文本与单独工作表中的列匹配,并插入公式_Excel_Vba - Fatal编程技术网

Excel 查找一列中的文本,如果为true,则将其旁边的列中的文本与单独工作表中的列匹配,并插入公式

Excel 查找一列中的文本,如果为true,则将其旁边的列中的文本与单独工作表中的列匹配,并插入公式,excel,vba,Excel,Vba,以下是我所拥有的: 我有一张叫做响应流的表格,上面有响应,是/否和总数。如果响应旁边有一个Y,我希望将响应名称与第2页上的响应名称(“活动”)匹配,并使用VBA代码在第2页上响应名称旁边的列中插入公式。以下是我到目前为止的情况 Sub Volume_Calc() Dim LastRowR As Long Dim LastRowC As Long Dim LastRowI As Long Dim LastRowA As Long Dim rngFoundCell As Range Dim ce

以下是我所拥有的:

我有一张叫做响应流的表格,上面有响应,是/否和总数。如果响应旁边有一个Y,我希望将响应名称与第2页上的响应名称(“活动”)匹配,并使用VBA代码在第2页上响应名称旁边的列中插入公式。以下是我到目前为止的情况

Sub Volume_Calc()

Dim LastRowR As Long
Dim LastRowC As Long
Dim LastRowI As Long
Dim LastRowA As Long
Dim rngFoundCell As Range
Dim cell As Range
Dim text As String
Dim FindRow As Range

LastRowR = Range("C65536").End(xlUp).Row
LastRowC = Range("K65536").End(xlUp).Row
LastRowI = Range("I65536").End(xlUp).Row
LastRowA = Range("A65536").End(xlUp).Row

Set FindRow = Worksheets("ResponseFlow").Range("C:C").Find(What:="Y", 
LookIn:=xlValues)

Do While FindRow = True
If Application.Match(Worksheets("Campaigns").Range("K6"), 
Worksheets("ResponseFlow").Range("A4:A" & LastRowA), 0) Then
Worksheets("Campaigns").Range("I6:I" & LastRowI).Formula = "=INDEX(ResponseFlow!$B$3:$B$145,MATCH(Campaigns!$K6,ResponseFlow!$A$3:$A$145,0))" 
End If
Loop

End Sub

您打算在Excel中执行的操作似乎没有VBA更容易,但如果您坚持使用一些宏插入公式,这可能是一种简单的方法。首先将要粘贴的动态公式放在工作表中带有Y/N的列的右侧。在下面的示例中,我使用了单元格(“Z1”)。确保它是动态的,这样,如果要将公式复制/粘贴到另一个单元格中,它将正确调整

再次确保您希望在值右侧的任何动态匹配公式都在某个位置,并且配置为动态。在我的示例中,它位于单元格Z1中的响应ws上

Sub Volume_Calc()

Dim Resp_WS As Worksheet: Set Resp_WS = Worksheets("ResponseFlow")
Dim CAMP_WS As Worksheet: Set CAMP_WS = Worksheets("Campaigns")

Dim rCell As Range
Dim cCell As Range

'Loops through Response Sheeet column "C" looking for values of "Y"
For Each rCell In Intersect(Resp_WS.Range("C:C"), WResp_WS.UsedRange).Cells
    If UCase(rCell.Value) = "Y" Then

        'When finds a cell with Y, it then loops through Campaigns Sheet column "I"
        'looking for a value that matches one column to the left where the "Y" was found
        For Each cCell In Intersect(CAMP_WS.UsedRange, CAMP_WS.Range("I:I")).Cells

            'When match is found, the macro will insert the formula to the right
            'of the cell in Campaigns, with the dynamically updated formula in cell Z1
            If cCell.Value = rCell.offset(0,-1).Value Then
                cCell.Offset(0, 1).FormulaR1C1 = Resp_WS.Range("Z1").FormulaR1C1
            End If
        Next cCell
    End If
Next rCell

End Sub

您打算在Excel中执行的操作似乎没有VBA更容易,但如果您坚持使用一些宏插入公式,这可能是一种简单的方法。首先将要粘贴的动态公式放在工作表中带有Y/N的列的右侧。在下面的示例中,我使用了单元格(“Z1”)。确保它是动态的,这样,如果要将公式复制/粘贴到另一个单元格中,它将正确调整

再次确保您希望在值右侧的任何动态匹配公式都在某个位置,并且配置为动态。在我的示例中,它位于单元格Z1中的响应ws上

Sub Volume_Calc()

Dim Resp_WS As Worksheet: Set Resp_WS = Worksheets("ResponseFlow")
Dim CAMP_WS As Worksheet: Set CAMP_WS = Worksheets("Campaigns")

Dim rCell As Range
Dim cCell As Range

'Loops through Response Sheeet column "C" looking for values of "Y"
For Each rCell In Intersect(Resp_WS.Range("C:C"), WResp_WS.UsedRange).Cells
    If UCase(rCell.Value) = "Y" Then

        'When finds a cell with Y, it then loops through Campaigns Sheet column "I"
        'looking for a value that matches one column to the left where the "Y" was found
        For Each cCell In Intersect(CAMP_WS.UsedRange, CAMP_WS.Range("I:I")).Cells

            'When match is found, the macro will insert the formula to the right
            'of the cell in Campaigns, with the dynamically updated formula in cell Z1
            If cCell.Value = rCell.offset(0,-1).Value Then
                cCell.Offset(0, 1).FormulaR1C1 = Resp_WS.Range("Z1").FormulaR1C1
            End If
        Next cCell
    End If
Next rCell

End Sub


为什么这必须是VBA?这可以通过countifs和vlookup(或仅仅是vlookup)来完成。它必须在VBA中的原因是因为它将附加到电子表格中的按钮上。好的。。。。为什么它需要连接到按钮上?这是公式。将其放入表格“活动”单元格i6中并向下复制:
=IF(COUNTIFS(ResponseFlow!$A:$A,$K6,ResponseFlow!$B:$B,$B,Y”)=0,“,VLOOKUP($K6,ResponseFlow!$A:$B,2,FALSE))
或者更好,因为COUNTIFS已经验证了名称和相应的Y响应,不需要VLOOKUP,所以公式可以简化为:
=IF(COUNTIFS)(ResponseFlow!$A:$A,$K7,ResponseFlow!$B:$B,“Y”)=0,“,”Y“)
或创建一个下拉单元格“按钮”(这实际上是数据验证),对于所有COUNTIF VLOOKUP单元格的if语句,它基本上只执行“开”或“关”操作。为什么必须是VBA?这可以通过countifs和VLOOKUP(或仅一个VLOOKUP)来完成它必须出现在VBA中的原因是因为它将被附加到电子表格中的按钮上。好吧……为什么它需要附加到按钮上?公式如下。将它放在表格“活动”单元格i6中,并向下复制:
=IF(COUNTIFS(ResponseFlow!$a:$a,$K6,ResponseFlow!$B:$B,“Y”)=0,“,VLOOKUP($K6,ResponseFlow!$a:$B,2,FALSE))
甚至更好,因为COUNTIFS已经验证了名称和相应的Y响应,不需要VLOOKUP,所以公式可以简化为:
=IF(COUNTIFS(ResponseFlow!$a:$a,$K7,ResponseFlow!$B:$B,“Y”)=0,“,”Y”)
或者创建一个下拉单元格“按钮”(这实际上是数据验证),基本上就是“开”或“关”对于所有COUNTIF VLOOKUP cellsThanks的in-if语句,但这与活动表上的响应名称不匹配。我需要将公式插入活动表上的Totals列中。@JonezyMeszaros现在看一看。如果有效,请接受答案。谢谢。实际上我认为我需要另一个偏移量其中的值。它被设置为等于Y。使用屏幕图像中的示例,我们是否应该循环通过B列,然后检查下一页A列中的内容?Hi-PGCodeRider不起作用。它将公式复制到每个响应名称,而不仅仅是有Y的响应名称。最终,我需要它查找Y,然后查看响应名称f在“活动”选项卡上找到它,并将“响应”选项卡上带有Y的响应名称的总数更改为“响应”选项卡上的总数。@JonezyMeszaros现在看一下。我在其中添加了一些注释,以仔细解释它的作用。同样,请标记为完成,因为我现在花了大约15分钟的时间。如果有什么您不理解或不起作用的内容,请e清楚表达。我希望这能帮助你理解!我知道VBA一开始可能很难。谢谢,但这与活动表上的响应名称不匹配。我需要将公式插入活动表上的“总计”列。@JonezyMeszaros现在看一看。如果可行,请接受答案。谢谢。请认真思考这里的值需要另一个偏移量。它被设置为等于Y。使用屏幕图像中的示例,我们是否应该循环通过B列,然后检查下一页A列中的内容?Hi-PGCodeRider不起作用。它将公式复制到每个响应名称,而不仅仅是有Y的名称。最终,我需要它来查找Yen查看响应名称在“活动”选项卡上找到它,并将该响应名称的“总计”更改为“响应”选项卡上的“总计”。@JonezyMeszaros现在看一下。我包含了一些注释,以仔细解释它在做什么。再次,请标记为完整,因为我现在花了大约15分钟的时间。如果有什么您不知道的,请了解或不工作,请清楚表达。我真的希望这能帮助你理解!我知道VBA一开始可能很难。