Доброго дня. Нужна помощь в небольшом макросе. В таблице встречаются строки выделенные зеленым цветом:
Код
ColorIndex = 4
Нужно проверить по первой фразе. до пробела в первой ячейке совпадение со строкой выше первой ячейки - и если они идентичны, тогда во всю длину до 52 столбца включительно в верхнюю строку которая НЕ зеленого цвета, только в свободные ячейки скопировать данные с зеленой строки.
Нашел пример тут: ссылка, но в моем случае все пробы ни к чему не привели.
покажите в файле (замените выше на новый) желаемый результат
а почему Daiko ASP-H12CNX-21 - стало заполнятся есил в исходном файле зеленым не выделено? сделал как понял
Код
Sub mrshkei()
Dim col As New Collection, i As Long, lr As Long, n As Long, j As Long, tt As String, arr, arr2
Dim dd As String
dd = " // "
Application.ScreenUpdating = False
lr = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To lr
If Cells(i, 1).Interior.ColorIndex = 4 Then
On Error Resume Next
For n = 1 To 52
If tt = Empty Then
tt = Cells(i, n)
Else
tt = tt & dd & Cells(i, n)
End If
Next n
col.Add tt, tt
tt = ""
End If
Next i
For n = 1 To col.Count
arr = Split(col(n), dd)
For i = 2 To lr
arr2 = Split(Cells(i, 1), " ")
If arr2(0) = Split(arr(0), " ")(0) Then
For j = 3 To 51
If Cells(i, j) = Empty And arr(j - 1) <> Empty Then
Cells(i, j) = arr(j - 1)
End If
Next j
Cells(i, j).Interior.ColorIndex = 4
End If
Next i
Next n
Application.ScreenUpdating = True
End Sub
Все так. все верно - только я так понял он не сравнивает артикул, со строкой выше по первой ячейке. Бо мне надо копирование только если они совпали. Первая фраза до пробела в зеленой ячейке - с любой фразой в предыдущей строке, над ней. Хотя нет. все сравнивает. Все работает. но вот что странно. В приложенном файле, строка 62/63 артикул разный - он скопировал. А строка 64/65 - тоже артикул вообще совершенно разный - и тут скрипт повел себя правильно - ничего не скопировав.
Sub mrshkei()
Dim i As Long, lr As Long, j As Long
Application.ScreenUpdating = False
lr = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To lr
If Cells(i, 1).Interior.ColorIndex = 4 Then
If Split(Cells(i, 1), " ")(0) = Split(Cells(i - 1, 1), " ")(0) Then
For j = 3 To 51
If Cells(i - 1, j) = Empty And Cells(i, j) <> Empty Then
Cells(i - 1, j) = Cells(i, j)
Cells(i - 1, j).Interior.ColorIndex = 3
End If
Next j
End If
End If
Next i
Application.ScreenUpdating = True
End Sub