首页 > 解决方案 > 如何编写包含来自源单元格的单元格格式的 VBA Vlookup?

问题描述

我正在寻找一种方法来保留我使用以下函数执行 vlookup 的单元格的源格式:

On Error Resume Next
With aSheet
    For i = FindEmptyRow To FindRow2
        .Range("N" & i) = Application.WorksheetFunction.VLookup(.Range("A" & i), Sheets("data_temp").Range("A:W"), 14, False)
        .Range("O" & i) = Application.WorksheetFunction.VLookup(.Range("A" & i), Sheets("data_temp").Range("A:W"), 15, False)
        .Range("P" & i) = Application.WorksheetFunction.VLookup(.Range("A" & i), Sheets("data_temp").Range("A:W"), 16, False)
        .Range("Q" & i) = Application.WorksheetFunction.VLookup(.Range("A" & i), Sheets("data_temp").Range("A:W"), 17, False)
        .Range("R" & i) = Application.WorksheetFunction.VLookup(.Range("A" & i), Sheets("data_temp").Range("A:W"), 18, False)
        .Range("S" & i) = Application.WorksheetFunction.VLookup(.Range("A" & i), Sheets("data_temp").Range("A:W"), 19, False)
        .Range("T" & i) = Application.WorksheetFunction.VLookup(.Range("A" & i), Sheets("data_temp").Range("A:W"), 20, False)
        .Range("U" & i) = Application.WorksheetFunction.VLookup(.Range("A" & i), Sheets("data_temp").Range("A:W"), 21, False)
        .Range("V" & i) = Application.WorksheetFunction.VLookup(.Range("A" & i), Sheets("data_temp").Range("A:W"), 22, False)
        .Range("W" & i) = Application.WorksheetFunction.VLookup(.Range("A" & i), Sheets("data_temp").Range("A:W"), 23, False)
    Next i
End With

我看到其他人也在努力解决这个特定问题,但我无法找到解决我问题的答案。

有什么方法可以使用 PasteSpecial Paste:=xlPasteFormats- 来保留单元格格式?

我尝试将 vlookup 公式存储为字符串并将其直接粘贴到每个单元格中,但无法完全理解它在循环中的工作方式。

除了 VLOOKUP 之外,还有没有更适合这个特定问题的公式?

如果您需要有关问题的更多背景故事或更多代码,请告诉我。

希望有人能帮助我!

最好的问候,马格努斯

标签: excelvbaformattingvlookup

解决方案


这使用 MATCH 找到正确的行,然后复制并粘贴单元格。

With aSheet
    Dim mtchrw As Long
    
    For i = FindEmptyRow To FindRow2
        mtchrw = 0
        On Error Resume Next
            mtchrw = Application.WorksheetFunction.Match(.Range("A" & i), Sheets("data_temp").Range("A:A"), 0)
        On Error GoTo 0
        If mtchrw > 0 then
            Sheets("data_temp").Range("N" & mtchrw & ":W" & mtchrw).Copy .Range("N" & I & ":W" & i)
        End If
    Next i
End With

推荐阅读