查找具有特定文本的列并使用整列作为索引匹配范围

时间:2017-10-20 13:14:56

标签: excel vba excel-vba

所以我有两个+5000行的工作表,我需要将Sheet1的预贴文件复制到Sheet2,索引匹配。

我希望使用特定文本激活某个列,并将该列用作索引匹配公式中的范围。

目前我的代码要求每个用户的列排列与我的相同。你可以想象,这是一个非常危险的解决方案,并增加了错误发布的风险。

接下来我的当前代码:

Sub search()

Sheets("Sheet1").Select

Dim col As Integer

col = 1

Do Until Cells(1, col) = "Cust.Order ID"
col = col + 1
Loop
Columns(col).Select



Range("AY2").FormulaR1C1 = _
    "=IF(INDEX(Sheet2!C[110],MATCH(" & col & ",Sheet2!C[-50],0))="""","""",INDEX(Sheet2!C[110],MATCH( " & col & ",Sheet2!C[-50],0)))"
    Range("AY3").Select
End Sub

这个空白返回空白是必要的。 但现在这段代码显示" &安培; col& "当它应该使用此列值时,是41(作为列是AO)。这些值是采购订单编号,例如65875。

希望你们能帮助我,并提前感谢你。

2 个答案:

答案 0 :(得分:0)

使用

Sub search()
Dim col As Long
Dim lr As Long
col = 0
'Avoid .Select
With Sheets("Sheet1")
    'Find Column
    On Error Resume Next
    col = Application.WorksheetFunction.Match("Cust.Order ID", .Range("1:1"), 0)
    On Error GoTo 0
    'If column not found return message and get out
    If col = 0 Then
        MsgBox "Column not Found"
        Exit Sub
    End If
    'Find Last row
    lr = .Cells(.Rows.Count, col).End(xlUp).Row

    'Fill full range with formula at once
    .Range(.Cells(2, "AY"), .Cells(lr, "Ay")).FormulaR1C1 = _
        "=IF(INDEX(Sheet2!C[110],MATCH(RC" & col & ",Sheet2!C[-50],0))="""","""",INDEX(Sheet2!C[110],MATCH(RC" & col & ",Sheet2!C[-50],0)))"
End With



End Sub

答案 1 :(得分:0)

我认为单一的公式应该起作用,vba没有必要。

=IF(INDEX(Sheet2!FE1:FE100,MATCH(AO2,Sheet2!A:A,0), MATCH("Cust.Order ID", Sheet2!1:1,0))="‌​","",INDEX(Sheet2!FE‌​1:FE100,MATCH(AO2,Sheet2!A‌​:(a),0),MATCH("Cust.Order ID", Sheet2!1:1,0)))

用逗号替换逗号;如果你的excel需要它。检查,如果MATCH的查找值在右列,我不确定我是否猜对了。

编辑:

=IF(INDEX(Sheet2!A1:FE100,MATCH(AO2,Sheet2!A:A,0), MATCH("Cust.Order ID", Sheet2!1:1,0))="‌​","",INDEX(Sheet2!A​1:FE100,MATCH(AO2,Sheet2!A‌​:(a),0),MATCH("Cust.Order ID", Sheet2!1:1,0)))

假设数据范围在A1:FE100

之内