Добрый день, уважаемые форумчане! Столкнулся с проблемой при построении макроса, который копирует строки на другой уже существующий лист, если те удовлетворяют двум условиям: первое - значение в столбце С не повторяется в других строках этого столбца; второе - код доставки (столбец Е) принимает одно из значений ("OIU", "IUH", "TOW", "DLV"), иначе говоря, состоит из букв, а не цифр. В приложенном файле-примере таблицы для макроса, по этим условиям должны скопироваться на лист "Вставка" строки 14 и 16. Особо богатого опыта в работе с макросами не имею, поэтому надеюсь на вашу помощь. Спасибо!
Добрый день, уважаемые форумчане! Столкнулся с проблемой при построении макроса, который копирует строки на другой уже существующий лист, если те удовлетворяют двум условиям: первое - значение в столбце С не повторяется в других строках этого столбца; второе - код доставки (столбец Е) принимает одно из значений ("OIU", "IUH", "TOW", "DLV"), иначе говоря, состоит из букв, а не цифр. В приложенном файле-примере таблицы для макроса, по этим условиям должны скопироваться на лист "Вставка" строки 14 и 16. Особо богатого опыта в работе с макросами не имею, поэтому надеюсь на вашу помощь. Спасибо!NAME
Sub uuu() Dim a() Dim i&, rw& Dim sd As Object Dim k '--------------------- a = Sheets("Таблица").UsedRange.Value Set sd = CreateObject("Scripting.Dictionary") For i = 2 To UBound(a) k = a(i, 3) If k <> "" Then sd.Item(k) = sd.Item(k) + 1 Next rw = 2 For Each k In sd.Keys If sd.Item(k) = 1 Then For i = 2 To UBound(a) If a(i, 3) = k Then If InStr("OIU,IUH,TOW,DLV", a(i, 5)) > 0 Then Sheets("Вставка").Cells(rw, 1).Resize(1, UBound(a, 2)) = WorksheetFunction.Index(a, i) rw = rw + 1 End If End If Next End If Next Beep MsgBox "Готово!" End Sub
[/vba]
Помогаю [vba]
Код
Sub uuu() Dim a() Dim i&, rw& Dim sd As Object Dim k '--------------------- a = Sheets("Таблица").UsedRange.Value Set sd = CreateObject("Scripting.Dictionary") For i = 2 To UBound(a) k = a(i, 3) If k <> "" Then sd.Item(k) = sd.Item(k) + 1 Next rw = 2 For Each k In sd.Keys If sd.Item(k) = 1 Then For i = 2 To UBound(a) If a(i, 3) = k Then If InStr("OIU,IUH,TOW,DLV", a(i, 5)) > 0 Then Sheets("Вставка").Cells(rw, 1).Resize(1, UBound(a, 2)) = WorksheetFunction.Index(a, i) rw = rw + 1 End If End If Next End If Next Beep MsgBox "Готово!" End Sub