VBA — новый элемент при изменении значения в двух столбцах

#sql #excel #vba

#sql #excel #vba

Вопрос:

У меня восемь столбцов данных. Имеется 500 строк. Они сортируются по столбцам a, а затем b.

Итак, это выглядит так:

 1111|1536|Data...
1111|1536|Data...
1111|1537|Data...
1112|1536|Data...
1112|1536|Data...
1112|1536|Data...
1112|1536|Data...
1112|1536|Data...
1112|1537|Data...
 

У меня возникли проблемы с написанием кода, который в девятом столбце начинает перенумеровывать строки после того, как комбинация столбцов a и b изменяется на что-то другое. Поэтому я бы хотел, чтобы это выглядело так:

 Item 1|1111|1536|Data...
Item 2|1111|1536|Data...
Item 1|1111|1537|Data...
Item 1|1112|1536|Data...
Item 2|1112|1536|Data...
Item 3|1112|1536|Data...
Item 4|1112|1536|Data...
Item 1|1112|1537|Data...
Item 2|1112|1537|Data...
 

Я не могу агрегировать только на основе этих двух столбцов, потому что все восемь создают уникальную комбинацию данных, и мне нужно сохранить эту комбинацию.

Ответ №1:

Вот что я использовал:

 Sub Item()
Dim ItemVar As String
Dim ColAVar As String
Dim ColBVar As String
Dim n As Integer
Dim i As Integer

ItemVar = "Item "
n = 1

ThisWorkbook.Sheets(1).Range("A1").Select
ActiveCell.EntireColumn.Insert
ActiveCell.Value = ItemVar amp; CStr(n)

For i = 1 To 499
    ColAVar = ActiveCell.Offset(0,1).Value
    ColBVar = ActiveCell.Offset(0,2).Value
    ActiveCell.Offset(1, 0).Select

    IF ActiveCell.Offset(0,1).Value = ColAVar And ActiveCell.Offset(0,2).Value = ColBVar Then
        n = n   1
    ELSE
        n = 1
    End If

    ActiveCell.Value = ItemVar amp; CStr(n)
Next i
End Sub