Вопрос соответствия строк VBA-Excel с листа1 на лист2 - PullRequest
0 голосов
/ 26 апреля 2020

Следующий код сравнивает столбец 2 листа 2 и, если он найден в столбце 2 листа 1, он копирует всю строку на лист 2. Каждая строка копируется под найденной строкой. Мой вопрос: как мне скопировать только те столбцы, которые я хочу, из найденной строки и поместить их в столбец, который я хочу, в соответствующую строку?

Before I run the code

Sheet1:
Col1   Col2   Col3    Col4    Col5    Col6    Col7    Col8
55555   123     a       6       r       7       h       f
55555   124     b       7       e       0       o       s
55555   333     c       8       f       3       l       j
55555   656     d       9       k       1       e       l
55555   219     e       10      i       m       l       p

Sheet2:
Col1    Col2   Col3    Col4    Col5    Col6    Col7    Col8
55555   123                     
55555   124                     
55555   333                     
55555   656                     
55555   219                     

Results After I run the code 

Sheet2:
Col1   Col2   Col3   Col4   Col5   Col6   Col7   Col8
Col1   Col2   Col3   Col4   Col5   Col6   Col7   Col8

55555   123                     
55555   123     a       6    r      7      h      f

55555   124                     
55555   124     b       7     e     0      o      s

55555   333                     
55555   333     c       8     f     3      l      j

55555   656                     
55555   656     d       9     k      1     e      l

55555   219                     
55555   219     e       10    i      3     l      p

Desired results Sheet2: Not the whole row is copied from Sheet1 just the desired columns are copied to the desired columns. Starting on row 2, so the headers on Sheet 2 are not effected.

Sheet2:
Col1   Col2   Col3   Col4   Col5   Col6   Col7   Col8
55555   123                          r      
55555   124                          e          
55555   333                          f      
55555   656                          k      
55555   219                          i      

Ниже приведен блок кода.

Function Twins(RowIndex As Integer) As Boolean
    Dim Key
    Dim Target
    Dim Success
    Success = False
    If Not IsEmpty(Cells(RowIndex, 1).Value) Then
        Key = Cells(RowIndex, 2).Value

     Sheets("Sheet1").Select

        Set Target = Columns(2).Find(Key, LookIn:=xlValues)

        If Not Target Is Nothing Then
            Rows(Target.Row).Select
            Selection.Copy
            Sheets("Sheet2").Select
            Rows(RowIndex + 1).Select
            Selection.Insert Shift:=xlRight
            Rows(RowIndex + 2).Select
            Application.CutCopyMode = False
            Selection.Insert Shift:=xlRight, CopyOrigin:=xlFormatFromLeftOrAbove
            Cells(RowIndex + 3, 1).Select
            Success = True
        End If

    End If
    Twins = Success
End Function

Sub Match()
    Dim RowIndex As Integer
    Sheets("Sheet2").Select
    RowIndex = Cells.Row
    While Twins(RowIndex)
        RowIndex = RowIndex + 3
    Wend
End Sub

1 Ответ

0 голосов
/ 26 апреля 2020

Это можно сделать, используя простую формулу, как вы можете видеть здесь:

Лист1 выглядит следующим образом:

Col1.1   Col1.2
     a     1000
     b     2000
     c     3000

Лист2 выглядит следующим образом:

Col2.1   Col2.2
   aaa
     b
   ccc

В Col2.2 я поместил следующую формулу (начиная с ячейки B2):

=If(A2=Sheet1!A2;Sheet1!B2;"")

Затем я перетащил ее в другие строки и получил следующие результаты:

Col2.1    Col2.2
   aaa   <BLANK>
     b      2000
   ccc   <BLANK>

Если значения не просто совпадают (Sheet2! A1 может быть где угодно в Sheet1! A: A), то простая формула Vlookup() может помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...