Excel VBA-поиск нескольких значений на двух листах Excel

У меня есть два листа Excel, а мне нужно скопировать значения из одного в другой.

лист 1: содержит идентификаторы в одном столбце и данные в другом, которые я хочу иметь в листе 2 позже.

лист 2: содержит те же идентификаторы и должен быть расширен соответствующими значениями данных из листа 1.

Как найти совпадающие идентификаторы, а затем скопировать связанное значение данных с одного листа excel на другой?

3
задан Bandersnatch
23.11.2022 3:13 Количество просмотров материала 2367
Распечатать страницу

3 ответа

можно использовать =exact() или

Сравнить Два Листа В Одной Книге:

  1. включить книгу, в которой нужно сравнить два листа, а затем нажмите

" Вид " > Новое Окно

. 2. Затем перейдите на панель задач, чтобы отобразить новое окно текущего рабочая тетрадь

  1. перейти к двум листам, которые вы хотите сравнить из каждого окна и расположите их рядом сторона

  2. Теперь сравните два листа, как вам нужно.

чтобы узнать разницу

  1. откройте книгу, содержащую листы, которые вы хотите сравнить и создайте новый лист.

  2. на новом листе выберите пустую ячейку, например A1, и введите это формула

=IF(Sheet1!A1<> Sheet7!A1, "Sheet1:"&Sheet1!A1&" vs
    Sheet7:"&Sheet7!A1, "")

, Sheet1 и Sheet7 листы вы хотите к сравнить с, и A1 является первой ячейкой, которую вы хотите сравнить.

  1. затем перетащите маркер автозаполнения в диапазон, который необходимо сравнить между двумя листами.

Сравнить Два Листа В Двух Разных Книгах

Если два листа, которые вы хотите сравнить в двух разных книгах, вы можете применить вид бок о бок утилиту для обработки.

  1. откройте два листа, между которыми вы хотите сравнить, и
activate one
    sheet and click View > View Side by Side.
  1. затем отображаются два листа в двух книгах горизонтально.И после этого вы можете сравнить 2 листа по мере того как вам.
0
отвечен v8-E 2022-11-24 11:01

@Bandersnatch-самое простое решение

для этих данных на листе 1:

Initial data

.

формула для Листа2, столбец B будет =VLOOKUP(A2, Sheet1!A:B, 2)

VLookUp result


в VBA:


Option Explicit

Public Sub FindValsInWS1Vlookup()

    With Sheet2.Range("B2")

        .FormulaR1C1 = "=VLOOKUP(RC[-1], Sheet1!R1C[-1]:R6C, 2)"

        .AutoFill Destination:=Range("B2:B6")

    End With

End Sub

другой вариант (только VBA, с объектом dictionary) - на листе 3:


Option Explicit

'Add ref in VBA window: Tools -> References... -> Microsoft Scripting Runtime

Public Sub FindValsInWS1Arrays()

    Dim arr1 As Variant, arr21 As Variant, arr22 As Variant
    Dim i As Long, j As Long, d As Dictionary

    arr1 = Sheet1.UsedRange
    arr21 = Sheet3.UsedRange.Columns(1)
    arr22 = Sheet3.UsedRange.Columns(2)
    Set d = New Dictionary

    For i = LBound(arr1) To UBound(arr1)
        d(arr1(i, 1)) = arr1(i, 2)      'read the 2 columns from ws1 into a dictionary
    Next

    For i = LBound(arr21) To UBound(arr21)
        If d.Exists(arr21(i, 1)) Then arr22(i, 1) = d(arr21(i, 1))
    Next

    Sheet3.UsedRange.Columns(2) = arr22

End Sub

результат:

VBA only

Примечание: идентификаторы не могут быть дублированы для этих решений

0
отвечен paul bica 2022-11-24 13:18

Я хотел бы предложить вам два метода. Первый не в VBA решение и другой в VBA.

enter image description here

Способ 1:

используйте эту формулу массива в ячейке A2 листа 2.

{=IFERROR(INDEX(Sheet1!$A:$E, SMALL(IF(COUNTIF($G, Sheet1!$A:$A), ROW(Sheet1!$A:$E)-MIN(ROW(Sheet1!$A:$E))+1), ROW(A1)), COLUMN(A1)),"")}

NB: перетащите эту формулу вправо в столбец E, затем вниз. Ячейка G1 на листе 2 имеет код соответствия Q1.

способ 2:

Sub ExtractDuplicateID()


Dim sht As Worksheet 
Dim newsht As Worksheet 


Set sht = ThisWorkbook.Worksheets("Sheet1")
Set newsht = ThisWorkbook.Worksheets("Sheet2")


Set dat = sht.Range("A1")
Set newdat = newsht.Range("A1")


Dim i, j
i = 1
j = 1


'Copy Header Values from Sheet1

newdat.Offset(0, 0).Value = dat.Offset(0, 0).Value 
newdat.Offset(0, 1).Value = dat.Offset(0, 2).Value 
newdat.Offset(0, 2).Value = dat.Offset(0, 3).Value 
newdat.Offset(0, 3).Value = dat.Offset(0, 4).Value 
newdat.Offset(0, 4).Value = dat.Offset(0, 5).Value 

Do While newdat.Offset(i, 0).Value <> "" Or newdat.Offset(i, 1).Value <> ""

  j = 1     

  Do While dat.Offset(j, 0).Value <> ""

    If (newdat.Offset(i, 0).Value = dat.Offset(j, 4).Value _
    Or newdat.Offset(i, 1).Value = dat.Offset(j, 5).Value) _
    And dat.Offset(j, 6).Value = "Q1" Then

      'Copy Header Values in Sheet2

      newdat.Offset(iRow, 0).Value = dat.Offset(j, 0).Value 
      newdat.Offset(iRow, 1).Value = dat.Offset(j, 2).Value 
      newdat.Offset(iRow, 2).Value = dat.Offset(j, 3).Value 
      newdat.Offset(iRow, 3).Value = dat.Offset(j, 4).Value 
      newdat.Offset(iRow, 4).Value = dat.Offset(j, 5).Value 

      iRow = iRow + 1
    End If
    j = j + 1     
  Loop

  i = i + 1     
Loop
End Sub

надеюсь, это поможет вам.

-1
отвечен Rajesh S 2022-11-24 15:35

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх