Мне нужно сравнить два диапазона данных по трем критериям (EID, Код, Опция) на одном листе Excel, а затем на том же листе, мне нужно получить результаты, но с выровненными данными в каждом из двух диапазонов на основев соответствии с тремя критериями.
Электронная таблица содержит 29 столбцов, а макет выглядит следующим образом:
Каждый диапазон данных имеет четырнадцать заголовков (EID, Имя, Код, Опция,Число, PDate, Продукт, Стоимость, Стоимость2, Стоимость3, Тип, Льгота, ДДат, ЭДАТ).
В столбцах с «A» по «N», столбце «O» имеются данныеесть пробелы, затем больше данных в столбцах от «P» до «AC».
First range columns A-N...
EID Name Code Option Number PDate Product Cost Cost2 Cost3 Type Benefit DDate EDate
437A WAN 2120 LTD-150 458969601 03/17/2017 DI 42.56 0.00 0.00 EO 2800 05/26/2017 05/01/2017
437A WAN 2120 LTD-180 1 03/09/2018 DI 32.66 0.00 0.00 EO 2300 05/01/2018 05/01/2018
230B LTER 2120 LTD-180 757672001 09/13/2016 DI 15.62 0.00 0.00 EO 1100 10/29/2016 10/01/2016
434C GTON 2120 LTD-150 812918702 10/01/2014 DI 38.00 0.00 0.00 EO 2500 10/01/2014 10/01/2014
438G LERS 2120 LTD-180 112886201 10/01/2014 DI 38.34 0.00 0.00 EO 2700 10/01/2014 10/01/2014
Second range columns P-AC...
EID Name Code Option Number PDate Product Cost Cost2 Cost3 Type Benefit DDate EDate
437A WAN 2120 LTD-180 458969601 03/09/2018 DI 32.66 0.00 0.00 EO 2300 05/01/2018 05/01/2018
437A WAN 2132 STD-14-180 1 03/26/2019 DI 28.80 0.00 0.00 EO 1000 05/01/2019 05/01/2019
230B LTER 2120 LTD-180 757672001 09/13/2016 DI 15.62 0.00 0.00 EO 1100 10/29/2016 10/01/2016
230B LTER 2132 STD-14-180 1 03/14/2019 DI 37.44 0.00 0.00 EO 1300 05/01/2019 05/01/2019
434C GTON 2132 STD-14-180 812918702 03/25/2019 DI 72.00 0.00 0.00 EO 2500 05/01/2019 05/01/2019
438G LERS 2120 LTD-180 112886201 10/01/2014 DI 38.34 0.00 0.00 EO 2700 10/01/2014 10/01/2014
438G LERS 2132 STD-30-180 1 03/11/2019 DI 46.98 0.00 0.00 EO 2700 05/01/2019 05/01/2019
434D TOIN 2132 STD-14-180 1 03/11/2019 DI 23.04 0.00 0.00 EO 800 05/01/2019 05/01/2019
439F YBIE 2132 STD-14-180 1 03/15/2019 DI 23.04 0.00 0.00 EO 800 05/01/2019 05/01/2019
Я нашел несколько превосходных VBA, написанных Джиндоном здесь: https://www.ozgrid.com/forum/forum/help-forums/excel-general/135799-align-rows-of-2-data-sets-with-multiple-columns/page2
и я изменил его, как показано ниже, чтобы выполнить большую часть того, что я указал.Тем не менее, мой модифицированный VBA генерирует результаты на основе только одного критерия (EID).Я не смог выяснить, как изменить код VBA для трех критериев (EID, код, опция).
Option Explicit
'04/09/2019 - Align_Data_w_1Criteria module is modified from original VBA found here...
'https://www.ozgrid.com/forum/forum/help-forums/excel-general/135799-align-rows-of-2-data-sets-with-multiple-columns/page2
Sub Align_Data_w_1Criteria()
Dim a, i As Long, ii As Long, iii As Long, w, myIndex As Long, x, y, flg As Boolean, temp
With Sheets("Results With 1 Criteria")
With .Range("a1", .Cells.SpecialCells(11)).Resize(, 29)
a = .Value: .ClearContents
ReDim x(1 To 1), y(1 To 1)
x(1) = a(1, 1): y(1) = Application.Index(a, 1, 0)
For ii = 1 To UBound(a, 2) Step 15
For i = 2 To UBound(a, 1)
If a(i, ii) <> "" Then
For iii = 1 To UBound(x)
If UCase$(a(i, ii)) = UCase$(x(iii)) Then
myIndex = iii: flg = True: Exit For
End If
Next
If flg Then
w = y(myIndex)
Else
myIndex = Application.Max(iii, myIndex)
ReDim Preserve x(1 To myIndex), y(1 To myIndex)
x(myIndex) = a(i, ii)
ReDim w(1 To UBound(a, 2))
y(myIndex) = w
End If
For iii = ii To ii + 13
w(iii) = a(i, iii)
Next
y(myIndex) = w: flg = False
End If
Next
Next
For i = 2 To UBound(x) - 1
For ii = i + 1 To UBound(x)
If x(i) > x(ii) Then
temp = x(ii): x(ii) = x(i): x(i) = temp
temp = y(ii): y(ii) = y(i): y(i) = temp
End If
Next
Next
.Resize(UBound(y)).Value = Application.Index(y, 0, 0)
End With
End With
End Sub
Если кто-то может помочь мне с тем, как применить эти три критерия, он будет очень признателен!