簡體   English   中英

在Excel中使用VBA,如何遍歷行並設置單元格值?

[英]Using VBA in Excel, how do I loop through rows and set cell values?

我正在嘗試自學一些VBA。 我有一本包含2個工作表Sheet1和Sheet2的工作簿。 我在下面找到了此代碼,並對其進行了修改以使其適合我。 獲取Sheet1!B1的值,在Sheet2!K:K中查找,並將Sheet1!D1設置為Sheet2的E列(K-6)中的單元格值。

我該如何循環,使其查看B1:B100並設置D1:D100?

Sub Looping()
    Dim rng1 As Range
    Dim strSearch As String
    strSearch = Range("B1").Value
    Set rng1 = Worksheets("Sheet2").Range("K:K").Find(strSearch, , xlValues, xlWhole)
    If Not rng1 Is Nothing Then
        Range("D1").Value = rng1.Offset(0, -6)
    Else
        MsgBox strSearch & " not found"
    End If
End Sub

謝謝!

首先,對於該問題,您不需要VBA解決方案。 只需將此公式放在Sheet1!D1:D100中:

=IFERROR(INDEX(Sheet2!$E:E$,MATCH(B1,Sheet2!$K:$K,0))),"Not found")

如果要使用VBA進行此操作,請在循環中找到以下代碼:

Sub Looping()
    Dim rngTarget As Range
    Dim rngSearched as Range

    For Each rngTarget in Sheets("Sheet1").Range("D1:D100")
        Set rngSearched = Sheets("Sheet2").Range("K:K").Find( _
            rngTarget.Offset(, -2).Value, , xlValues, xlWhole)    
        If rngSearch Is Nothing Then
            rngTarget.Value = "not found"
        Else
            rngTarget.Value = rngSearch.Offset(, -6)
        End If
    Next rngTarget
End Sub

或者,將兩種方法結合起來:

Sub FillDirectly
    With Sheets("Sheet1").Range("D1:D100")
        .Formula="=IFERROR(INDEX(Sheet2!$E:E$,MATCH(B1,Sheet2!$K:$K,0))),""Not found"")"
        .Calculate
        .Value = .Value 'Creates a value copy
    End With
End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM