Здравствуйте, прошу подсказать, как можно изменить макрос, чтобы он вставлял информацию в последнюю ячейку в столбце "Итого" после того как собрал информацию по критериям. Например по критерию столбца "Артикул" - 123011 + столбец "Город" - Москва, сохранял не в D8, а в D26, т.е. к последней строке с идентичными критериями. Спасибо большое за помощь!
[vba]
Код
Option Explicit
Sub abc() Dim r, lr, m, z1, z2, z3, t Dim sl: Set sl = CreateObject("Scripting.Dictionary") With ActiveSheet lr = .Cells(.Rows.Count, 1).End(xlUp).Row m = .Cells(1, 1).Resize(lr, 4).Value For r = 3 To UBound(m) z3 = m(r, 3) If Len(z3) > 0 Then z1 = m(r, 1) z2 = m(r, 2) t = z1 & "|" & z2 If sl.exists(t) Then sl(t) = sl(t) & Chr(10) & z3 Else sl(t) = z3 End If End If Next r
For r = 3 To UBound(m) z1 = m(r, 1) z2 = m(r, 2) t = z1 & "|" & z2 If sl.exists(t) Then .Cells(r, 4) = sl(t) sl.Remove (t) End If Next r End With End Sub
[/vba]
Здравствуйте, прошу подсказать, как можно изменить макрос, чтобы он вставлял информацию в последнюю ячейку в столбце "Итого" после того как собрал информацию по критериям. Например по критерию столбца "Артикул" - 123011 + столбец "Город" - Москва, сохранял не в D8, а в D26, т.е. к последней строке с идентичными критериями. Спасибо большое за помощь!
[vba]
Код
Option Explicit
Sub abc() Dim r, lr, m, z1, z2, z3, t Dim sl: Set sl = CreateObject("Scripting.Dictionary") With ActiveSheet lr = .Cells(.Rows.Count, 1).End(xlUp).Row m = .Cells(1, 1).Resize(lr, 4).Value For r = 3 To UBound(m) z3 = m(r, 3) If Len(z3) > 0 Then z1 = m(r, 1) z2 = m(r, 2) t = z1 & "|" & z2 If sl.exists(t) Then sl(t) = sl(t) & Chr(10) & z3 Else sl(t) = z3 End If End If Next r
For r = 3 To UBound(m) z1 = m(r, 1) z2 = m(r, 2) t = z1 & "|" & z2 If sl.exists(t) Then .Cells(r, 4) = sl(t) sl.Remove (t) End If Next r End With End Sub
Sub abc() Dim r, lr, m, z3, t Dim sl Set sl = CreateObject("Scripting.Dictionary") With ActiveSheet lr = .Cells(.Rows.Count, 1).End(xlUp).Row m = .Cells(1, 1).Resize(lr, 4).Value For r = 3 To UBound(m) z3 = m(r, 3) If Len(z3) > 0 Then t = m(r, 1) & "|" & m(r, 2) If sl.exists(t) Then sl(t) = sl(t) & Chr(10) & z3 Else sl(t) = z3 End If End If Next r For r = UBound(m) To 3 Step -1 t = m(r, 1) & "|" & m(r, 2) If sl.exists(t) Then .Cells(r, 4) = sl(t) sl.Remove (t) End If Next r End With End Sub
[/vba]
Попробуйте так: [vba]
Код
Sub abc() Dim r, lr, m, z3, t Dim sl Set sl = CreateObject("Scripting.Dictionary") With ActiveSheet lr = .Cells(.Rows.Count, 1).End(xlUp).Row m = .Cells(1, 1).Resize(lr, 4).Value For r = 3 To UBound(m) z3 = m(r, 3) If Len(z3) > 0 Then t = m(r, 1) & "|" & m(r, 2) If sl.exists(t) Then sl(t) = sl(t) & Chr(10) & z3 Else sl(t) = z3 End If End If Next r For r = UBound(m) To 3 Step -1 t = m(r, 1) & "|" & m(r, 2) If sl.exists(t) Then .Cells(r, 4) = sl(t) sl.Remove (t) End If Next r End With End Sub
со второй строки пропускает и не вставляет, оставляет пустой
не совсем Вас понимаю В ячейку D26 вставляются значения "Микроволновка, утюг", потому что сочетание 123011-Москва встречается дважды, в одном - микроволновка, в другом - утюг. Согласно первому сообщению:
со второй строки пропускает и не вставляет, оставляет пустой
не совсем Вас понимаю В ячейку D26 вставляются значения "Микроволновка, утюг", потому что сочетание 123011-Москва встречается дважды, в одном - микроволновка, в другом - утюг. Согласно первому сообщению:
msi2102, все прекрасно работает, только пропускает строку 2,в ячейке C3 когда присутствует комментарий, он его не забирает и не вставляет в ячейку D2. Всё остальное работает отлично как и нужно.
msi2102, все прекрасно работает, только пропускает строку 2,в ячейке C3 когда присутствует комментарий, он его не забирает и не вставляет в ячейку D2. Всё остальное работает отлично как и нужно.Grimmm
Ну всё верно, так и должно быть. Видите у Вас в самом первом коде два цикла, они начинаются с 3, нужно заменить на 2, скорее всего у Вас данные в оригинале начинаются с третьей строки, а в примере со второй, замените: [vba]
Код
For r = 3 To UBound(m)
[/vba] на [vba]
Код
For r = 2 To UBound(m)
[/vba] и [vba]
Код
For r = UBound(m) To 3 Step -1
[/vba] на [vba]
Код
For r = UBound(m) To 2 Step -1
[/vba]
Ну всё верно, так и должно быть. Видите у Вас в самом первом коде два цикла, они начинаются с 3, нужно заменить на 2, скорее всего у Вас данные в оригинале начинаются с третьей строки, а в примере со второй, замените: [vba]