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

时间:2017-07-27 15:12:49

标签: excel vba

以下是我所拥有的:

Response Flow

我有一张名为Response Flow的工作表,它有Response,Y / N和Total。如果响应旁边有一个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

1 个答案:

答案 0 :(得分:0)

您打算做的事情似乎在没有VBA的Excel中更容易做,但如果您坚持使用一些宏插入公式,这可能是一种简单的方法。首先将要粘贴的动态公式放在列的右侧,并在表单中添加Y / N,SOMEWHERE。在下面的例子中,我使用了Cell(" 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