簡體   English   中英

使用for循環和數組比較來自不同工作表的兩個單元格

[英]Compare two cells from different worksheets using for loop and array

我在單元格A1上有一個列表要在工作表“這里輸入”上找到,並且在單元格A1到A692的“字符串列表”工作表上有完整的字符串值列表,我已經存儲在數組svr 我要發生的是宏,以檢查工作表“此處輸入”上A列上的所有值,並將其與數組svr內的值進行比較,直到找到匹配的值,然后逐個復制范圍從工作表“字符串列表”到工作表“此處輸入”的單元格。 我已經嘗試了下面的代碼,但我認為它需要做更多的工作。

Sub Main_SvrLst()

Dim inp As Worksheet
Dim lst As Worksheet
Dim svr(691) As String

Set inp = ThisWorkbook.Sheets("Input Here")
Set lst = ThisWorkbook.Sheets("String List")

lr = inp.Cells(Rows.Count, 1).End(xlUp).Row

For svrctr = 0 To 691
    svr(svrctr) = lst.Range("A2").Offset(svrctr, 0).Value
Next svrctr

For a = 2 To lr
If inp.Cells(a, 1) = svr(a) Then

    Worksheets("String List").Activate
    lst.Range(Cells(a, 2), Cells(a, 8)).Copy
    inp.Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).PasteSpecial
    Worksheets("Input Here").Activate

End If
Next a



End Sub

您可以使用“此處輸入”表中的公式來代替VBA代碼:

B2

=""&IFERROR(INDEX('String List'!$A:$H, MATCH($A2, 'String List'!$A:$A, 0), COLUMN()), "")

將此公式復制到右邊直到H2 ,然后向下復制所有內容,直到輸入為止。

我已更改了您的一些命名,以便更清楚地識別。

也關閉Array以獲得正確引用的數字

 Sub Main_SvrLst()

      Dim inp As Worksheet
      Dim lst As Worksheet
      Dim svr(691) As String

      Set inp = ThisWorkbook.Sheets("Input Here")
      Set lst = ThisWorkbook.Sheets("String List")

      Dim LastRowOfInputHere As Long
      LastRowOfInputHere = inp.Cells(Rows.Count, 1).End(xlUp).Row

      Dim svrctr As Long
      'Made it 2 to 691 to off set your Header Row
      'This way the Array position and the row number are the same
      For svrctr = 2 To 691
           svr(svrctr) = lst.Cells(svrctr, "A").Value
      Next svrctr

      Dim InputHereRowReference As Long
      Dim StringListArrayReference As Long

      'With your original text it was comparing a two row offset between the "Input" and "String" Sheets
      For InputHereRowReference = 2 To LastRowOfInputHere

           For StringListArrayReference = 2 To 691

                If inp.Cells(InputHereRowReference, 1) = svr(StringListArrayReference) Then

                     lst.Activate
                     lst.Range(Cells(StringListArrayReference, 2), Cells(StringListArrayReference, 8)).Copy
                     inp.Activate
                     inp.Cells(InputHereRowReference, 2).PasteSpecial

                End If

           Next StringListArrayReference

      Next InputHereRowReference

 End Sub

暫無
暫無

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

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