У меня есть два листа в Excel. Для этого примера Лист 1 и Лист 2.

Лист 1:100 записей с именем, местонахождением, полом

Лист 2:100 записей с именем, местоположением, возрастом

Источники данных не синхронизированы, поэтому у меня есть данные, которые существуют на листе 1, которых нет на листе 2, у меня также есть данные на листе 2, которых нет на листе 1, и у меня есть данные, которые существуют в оба листа. Таким образом, на листе 1 могут быть имена, которых нет на листе 2, и наоборот.

Я ищу автоматический способ объединения обоих листов в третий лист и заполнения имени и местоположения, а также, где это возможно, возраста и пола. Я знаю, что это было бы легко сделать в MS Access, но из-за моей аудитории мне нужно сохранить это в Excel, и я полный нуб к VBA:S

Что я сделал: на листе 3 я создал формулы для извлечения данных из листа 1, а на листе 2 я добавил поле ("X"), которое будет помечено для поля как "1", если поле отсутствует на листе 1 и помечается как "0", если поле присутствует на листе 1. По-моему, я ищу способ, который бы гласил: «Если поле" X "на листе 2 =" 1 ", то извлеките эти данные и добавьте их на лист 3, но я не уверен, как это сделать :(

2 ответа2

0

это потребует не очень сложного сценария VBA.

Вот псевдокод

Create Array that contains All Names from Sheet B
For i = 0 to CellFromACount
 IF A.Name is not in ArrayB
   SheetB.AddLine (Item)
Next

Чтобы написать код, следуйте инструкциям, выполнив поиск по учебнику Excel vba tutorial . Пример здесь:VBA Tutorial

Вот что вам нужно сделать :

  1. Массив строк
  2. Получить значение из ячейки
  3. Для петли
  4. Если условие
  5. Добавить новую строку внизу листа
0

Это должно работать. Вставьте в модуль:

Public Sub sheetmerge()
Dim wkb As Workbook
Dim wks, wks1, wks2 As Worksheet
Set wkb = ThisWorkbook
Set wks = wkb.Sheets(1)
Set wks1 = wkb.Sheets(2)
Set wks2 = wkb.Sheets(3)
emptyRow1 = False
i = 1
k = 1
' Loops while there is data on sheet 1 column 1
While emptyRow1 = False
    found = False
    ' extracts the name from column 1, row i
    name1 = wks.Cells(i, 1)
    If name1 <> "" Then
        'As it is not empty then loop through Sheet2 names
        emptyRow2 = False
        j = 1
        While emptyRow2 = False
            name2 = wks1.Cells(j, 1)
            If name2 <> "" Then
                'As name2 is not empty then compare name and name 2
                If name1 = name2 Then
                    'If name1 is the same as name2 then put the data on Sheet3
                    wks2.Cells(k, 1) = name1
                    wks2.Cells(k, 2) = wks.Cells(i, 2)
                    wks2.Cells(k, 3) = wks.Cells(i, 3)
                    wks2.Cells(k, 4) = wks1.Cells(j, 3)
                    found = True
                    k = k + 1
                    'stop looping sheet2 by setting emptyrow2 to True
                    emptyRow2 = True
                End If
            Else
                'name2 is empty, then stop looping sheet2
                emptyRow2 = True
            End If
            j = j + 1
        Wend
    Else
        'name1 is empty then stop looping Sheet1
        emptyRow1 = True
    End If
    'if after looping there was no coincidence of names then put the data from Sheet1
    If found = False Then
        If name1 <> "" Then
            wks2.Cells(k, 1) = name1
            wks2.Cells(k, 2) = wks.Cells(i, 2)
            wks2.Cells(k, 3) = wks.Cells(i, 3)
            k = k + 1
        End If
    End If
    i = i + 1
Wend
'This area loops through Sheet2 seeking for coincidences
emptyRow2 = False
j = 1
While emptyRow2 = False
    found = False
    name2 = wks1.Cells(j, 1)
    If name2 <> "" Then
        emptyRow1 = False
        i = 1
        While emptyRow1 = False
            name1 = wks.Cells(i, 1)
            If name1 <> "" Then
                If name2 = name1 Then
                    found = True
                    emptyRow1 = True
                End If
            Else
                emptyRow1 = True
            End If
            i = i + 1
        Wend
    Else
        emptyRow2 = True
    End If
    ' If there wasn't a coincidence it means this name is in sheet2 but is not on Sheet1 so, put it in Sheet3.
    If found = False Then
        wks2.Cells(k, 1) = name2
        wks2.Cells(k, 2) = wks1.Cells(j, 2)
        wks2.Cells(k, 4) = wks1.Cells(j, 3)
        k = k + 1
    End If
    j = j + 1
Wend
End Sub

Он перебирает строки на листе 1, помещая их на лист 3, помещая четвертый столбец, если есть совпадение с листом 2.

После этого он проходит по листу 2, помещая строки листа 3, не найденные на листе 1.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .