Цитата |
---|
Ts.Soft написал: Проблема в организации данных - в двух таблицах нет единого ключевого поля |
В таблице уникальное поле это ФИО, абсолютно точно нет совпадений.
Цитата |
---|
в реальность Вы столкнётесь когда в них будет даже разное количество строк. |
Количество строк действительно разное.
Цитата |
---|
Фамилия в качестве ключевого поля не подходит |
Фамилию можно взять как ключевое слово однофамильцев точно нет.
Цитата |
---|
Так же одну фамилию можно написать по разному, например Семёнов и Семенов |
Вот это может быть я не представляю как это можно исправить. Если только сравнить столбцы фамилии сначала и вывести не совпадении одной либо двух букв как вариант.
Цитата |
---|
так же что делать если в первой таблице есть сотрудники, которых вообще нет во второй и наоборот. |
Как вариант после сравнения каждой строки помечать ее цветом.
Jack Famous, спасибо это я уже видел я нашел похожий на то что мне надо не большой макрос но он не информативный в плане ошибок в строке.
Макрос привожу.
Код |
---|
Sub Макрос1()
'' Макрос1 сравнение двух таблиц с использованием макроса VBA
' ссылка на первый лист книги
Dim sheet1 As Worksheet
Set sheet1 = ActiveWorkbook.Sheets(1)
' ссылка на второй лист книги
Dim sheet2 As Worksheet
Set sheet2 = ActiveWorkbook.Sheets(2)
' строка для хранения идентификатора строки первой таблицы
Dim str1 As String
' строка для хранения идентификатора строки второй таблицы
Dim str2 As String
' позиция курсора (номер строки) в первой таблице
Dim i As Integer
i = 3
Dim last_i As Integer
last_i = 3
' позиция курсора (номер строки) во второй таблице
Dim j As Integer
j = 3
Dim last_j As Integer
last_j = 3
' определяем последнюю значимую строку первой таблицы (последняя строка, в первой колонке которой есть значение)
For Each Cell In sheet1.Range("A:A")
If Cell.Row > 2 Then
If Cell.Value > "" Then
last_i = Cell.Row
Else
Exit For
End If
End If
Next Cell
' определяем последнюю значимую строку второй таблицы (последняя строка, в первой колонке которой есть значение)
For Each Cell In sheet2.Range("A:A")
If Cell.Row > 2 Then
If Cell.Value > "" Then
last_j = Cell.Row
Else
Exit For
End If
End If
Next Cell
' пробегаем по строкам второй таблицы (внешний цикл)
For j = 3 To last_j
' определяем идентификатор текущей строки
str2 = sheet2.Cells(j, 5).Value & "-" & sheet2.Cells(j, 2).Value & "-" & sheet2.Cells(j, 4).Value & "-" & sheet2.Cells(j, 6).Value
' пробегаем по строкам первой таблицы (внутренний цикл)
For i = 3 To last_i
' определяем идентификатор текущей строки
str1 = sheet1.Cells(i, 2).Value & "-" & sheet1.Cells(i, 4).Value & "-" & sheet1.Cells(i, 8).Value & "-" & sheet1.Cells(i, 9).Value
' сравниваем идентификаторы строк первой и второй таблицы
If str2 = str1 Then
' если совпадение найдено, то записываем покупателя из второй таблицы в первую в строку с соответствующей ему квартирой
sheet1.Cells(i, 10).Value = sheet2.Cells(j, 1).Value
' прекращаем внутренний цикл, переходим к следующей итерации внешнего цикла
' (к следующей записи второй таблицы)
Exit For
End If
Next i
Next j
End Sub |