Добрый день. В vba только начинаю, прошу помочь!!! Есть задача найти ячейки из массива {Доп код}, при нахождении не пустой, добавить строку ниже, скопировать на новую строку вниз под "Код" и элементы с D19 E19 F19 .... скопировать в D20 E20 F20 .... Пока получилось только с помощью макрорекордера записать поиск по одной ячейке, вернее не поиск а выделение. Подскажите куда копать.
Вы свой код пробовали запустить. В последних строках стало понятней. Надо пройтись по колонке "С" и если есть в ячейке значение то добавить строку под ним и переместить его в созданную строку в колонку "В", если несколько значений, соответственно и столько добавить строк? Разделитель всегда "/"?
Да разделитель есть, то есть если 2 значения, то 2 строки. Но то будет потом. Сейчас бы разобраться с методом Find, и добавлением, все чтобы было в цикле, а потом уже дальнейшие действия.
Вот что получилось сделать с циклом для поиска, но он как-то не правильно работает
Код
Dim iRange As Range
Dim iRow As Long
Dim iFind As String
iFind = "*" 'chto ishem
Set iRange = Columns("C:C" ) .Find(What:=iFind)
If iRow = iRange.Row Then
MsgBox "Ячейка " & iRow
ElseIf iRange Is Nothing Then
MsgBox "Ничего не найдено"
Else
MsgBox "Else"
End If
Sub uuu()
Dim rw&, i&
Dim sp, rg
For rw = Cells(Rows.Count, 3).End(xlUp).Row To 2 Step -1 'проходим по ячейкам диапазона от конца к началу
If Cells(rw, 3) <> "" Then 'если ячейка не пустая то
sp = Split(Cells(rw, 3), "/") 'берём в массив значения ячейки разделитель /
rg = Array(Cells(rw, 4), Cells(rw, 5), Cells(rw, 6)) '
For i = UBound(sp) To 0 Step -1 'проходим по значениям массива от конца к началу
If sp(i) <> "" Then 'если текущее значение не пусто то
Cells(rw + 1, 3).EntireRow.Insert 'добавляем строку
Cells(rw + 1, 2) = sp(i) 'во вторую колонку вносим текущее значение из массива
Cells(rw + 1, 4).Resize(, 3) = rg 'вносим в эту же строку значения ячеек D-F
End If
Next
Cells(rw, 3).ClearContents 'чистим содержимое текущей ячейки
End If
Next
Beep
End Sub
Подскажите кто знает, а как этот макрос применить к открывающемуся файлу. То есть я делаю кнопку в исполняемом файле, запускаю макрос, он открывает файл, а потом пробегает по строчкам. Открытие я сделал:
Код
fileToOpen = Application.GetOpenFilename _
("Files (*.xls), *.xls,Files (*.xlsx), *.xlsx")
If fileToOpen <> False Then
MsgBox "Вы открываете файл " & fileToOpen
Workbooks.Open fileToOpen
End If
а у вас открытый файл становится активным. Соответственно, добавьте тот код к своему и проверьте, работает ли макрос после открытия файла без особых изменений.
Sub tt()
fileToOpen = Application.GetOpenFilename _
("Files (*.xls), *.xls,Files (*.xlsx), *.xlsx")
If fileToOpen <> False Then
MsgBox "Вы открываете файл " & fileToOpen
Set wb = Workbooks.Open(fileToOpen)
Application.ScreenUpdating = False
uuu wb.Worksheets(1)
Application.ScreenUpdating = True
End If
End Sub
Sub uuu(sh)
Dim rw&, i&
Dim sp, rg
With sh
For rw = .Cells(.Rows.Count, 3).End(xlUp).Row To 2 Step -1 'проходим по ячейкам диапазона от конца к началу
If .Cells(rw, 3) <> "" Then 'если ячейка не пустая то
sp = Split(.Cells(rw, 3), "/") 'берём в массив значения ячейки разделитель /
rg = Array(.Cells(rw, 4), .Cells(rw, 5), .Cells(rw, 6)) '
For i = UBound(sp) To 0 Step -1 'проходим по значениям массива от конца к началу
If sp(i) <> "" Then 'если текущее значение не пусто то
.Cells(rw + 1, 3).EntireRow.Insert 'добавляем строку
.Cells(rw + 1, 2) = sp(i) 'во вторую колонку вносим текущее значение из массива
.Cells(rw + 1, 4).Resize(, 3) = rg 'вносим в эту же строку значения ячеек D-F
End If
Next
.Cells(rw, 3).ClearContents 'чистим содержимое текущей ячейки
End If
Next
End With
Beep
End Sub