【问题标题】:How to code VBA Vlookup that includes cell formatting from the source cell?如何编写包含来自源单元格的单元格格式的 VBA Vlookup?
【发布时间】:2021-01-09 23:51:22
【问题描述】:

我正在寻找一种方法来保留我使用以下函数执行 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 之外,还有其他公式更适合这个特定问题吗?

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

希望有人能帮助我!

最好的问候, 马格努斯

【问题讨论】:

    标签: excel vba formatting vlookup


    【解决方案1】:

    这使用 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
    

    【讨论】:

    • 嗨,斯科特,感谢您的回答。不幸的是, MATCH 函数并不能解决问题,因为第一列中的行顺序不一定与查找表中的行数和顺序相对应。还有其他方法吗?
    • 谢谢你,斯科特!现在工作完美:) 非常感谢。
    • @MagnusCarstens 请考虑通过单击答案旁边的复选标记将其标记为正确。
    猜你喜欢
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多