Excel 为循环中的每个单元格更改公式中的引用

Excel 为循环中的每个单元格更改公式中的引用,excel,vba,foreach,indexing,match,Excel,Vba,Foreach,Indexing,Match,我有一个子例程,可以将索引/匹配应用于7个单元格的范围,查找命名范围,每个单元格中的公式都应用了不同的索引值 我有一个可行的版本,但我正试图精简我的代码,这样我就不会有一个又长又笨重的sub。我相信有一种方法可以让它在For-Each-Cell循环中工作,但对于我来说,我不知道该怎么做。我可能可以使用vlookup解决这个问题,但我相信索引/匹配是查找大范围数据时更好的解决方案(我命名的表超过10k行) 以下是我所拥有的,实际上有效,但有点长: Range("C38:F38").Sele

我有一个子例程,可以将索引/匹配应用于7个单元格的范围,查找命名范围,每个单元格中的公式都应用了不同的索引值

我有一个可行的版本,但我正试图精简我的代码,这样我就不会有一个又长又笨重的sub。我相信有一种方法可以让它在For-Each-Cell循环中工作,但对于我来说,我不知道该怎么做。我可能可以使用vlookup解决这个问题,但我相信索引/匹配是查找大范围数据时更好的解决方案(我命名的表超过10k行)

以下是我所拥有的,实际上有效,但有点长:

    Range("C38:F38").Select
    Selection.MergeCells = True
    Selection.Formula = ("=IFERROR(INDEX(MAIN_DATA[NAME],MATCH($D$10,MAIN_DATA[PURCHASE_ORDER_ID],FALSE),0),"""")")
Range("C39:F39").Select
    Selection.MergeCells = True
    Selection.Formula = ("=IFERROR(INDEX(MAIN_DATA[infodyn_DELIVERY_ADDRESS.ADDRESS_1],MATCH($D$10,MAIN_DATA[PURCHASE_ORDER_ID],FALSE),0),"""")")
Range("C40:F40").Select
    Selection.MergeCells = True
    Selection.Formula = ("=IFERROR(INDEX(MAIN_DATA[infodyn_DELIVERY_ADDRESS.ADDRESS_2],MATCH($D$10,MAIN_DATA[PURCHASE_ORDER_ID],FALSE),0),"""")")
Range("C41:F41").Select
    Selection.MergeCells = True
    Selection.Formula = ("=IFERROR(INDEX(MAIN_DATA[infodyn_DELIVERY_ADDRESS.ADDRESS_3],MATCH($D$10,MAIN_DATA[PURCHASE_ORDER_ID],FALSE),0),"""")")
Range("C42:F42").Select
    Selection.MergeCells = True
    Selection.Formula = ("=IFERROR(INDEX(MAIN_DATA[infodyn_DELIVERY_ADDRESS.TOWN],MATCH($D$10,MAIN_DATA[PURCHASE_ORDER_ID],FALSE),0),"""")")
Range("C43:F43").Select
    Selection.MergeCells = True
    Selection.Formula = ("=IFERROR(INDEX(MAIN_DATA[infodyn_DELIVERY_ADDRESS.COUNTY],MATCH($D$10,MAIN_DATA[PURCHASE_ORDER_ID],FALSE),0),"""")")
Range("C44:F44").Select
    Selection.MergeCells = True
    Selection.Formula = ("=IFERROR(INDEX(MAIN_DATA[infodyn_DELIVERY_ADDRESS.POST_CODE],MATCH($D$10,MAIN_DATA[PURCHASE_ORDER_ID],FALSE),0),"""")")
在这里,我已经知道了如何应用循环来处理合并部分,但是我被困在如何进行索引/匹配上,在每个实例中仅更改索引上的列标题:

For Each Cell In Range("C38:C44").Cells
    Cell.Resize(, 4).Select
    Selection.Merge
    'Something in here with the Index/Match Formula changing the Column Header on each turn through the loop
Next Cell

非常感谢您的任何想法或建议。

您可以为列名设置一个数组,并将它们连接到循环中。你只需要跟踪专栏

Dim columnNames(6) As String
Dim i as Integer
i=0


columnNames(0) = "NAME"
'Rest of columns.
columnNames(6) = "infodyn_DELIVERY_ADDRESS.POST_CODE"

'Inside loop
 Selection.Formula = ("=IFERROR(INDEX(MAIN_DATA["&  columnNames(i) &"],MATCH($D$10,MAIN_DATA[PURCHASE_ORDER_ID],FALSE),0),"""")")
i = i +1

PS-我知道列标题的名称很长,但这样就无法访问了。我将在以后的某个日期研究如何更改Access查询中的这些内容…Stellar!这就解决了这个问题,并为我介绍了一段非常有用的代码。