所以我有两个+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。
希望你们能帮助我,并提前感谢你。
答案 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!FE1: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!A1:FE100,MATCH(AO2,Sheet2!A:(a),0),MATCH("Cust.Order ID", Sheet2!1:1,0)))
假设数据范围在A1:FE100
之内