Добрый день! Нужна помощь, написала часть макроса, а вторую дописать не могу. с Лист1 нужно перенести данные на общий лист по признаку если в колонке С стоит "Кто:", то берем данные из ячейки в колонке K и переносим на общий лист в колонку A с названием "Кто:", приложила файл. Спасибо огромное за помощь!
Добрый день! Нужна помощь, написала часть макроса, а вторую дописать не могу. с Лист1 нужно перенести данные на общий лист по признаку если в колонке С стоит "Кто:", то берем данные из ячейки в колонке K и переносим на общий лист в колонку A с названием "Кто:", приложила файл. Спасибо огромное за помощь!Заяц6628
По вопросу - нечто похожее как раз решаем тут: http://www.excelworld.ru/forum/2-53502-1 Алгоритм может быть аналогичным - идём циклом по листу, ищем "Кто:", как нашли запоминаем всё что нужно из К, и далее будем это добавлять к другим копируемым данным - которые вероятно уже копирует первая часть макроса.
По вопросу - нечто похожее как раз решаем тут: http://www.excelworld.ru/forum/2-53502-1 Алгоритм может быть аналогичным - идём циклом по листу, ищем "Кто:", как нашли запоминаем всё что нужно из К, и далее будем это добавлять к другим копируемым данным - которые вероятно уже копирует первая часть макроса.Hugo
Hugo, мне потребовалось перенести столбец один куда грузятся данные и у меня ничего не вышло, код тот что я изменила по этому же файлу приложила. Подскажите почему у меня не вышло?
Hugo, мне потребовалось перенести столбец один куда грузятся данные и у меня ничего не вышло, код тот что я изменила по этому же файлу приложила. Подскажите почему у меня не вышло?Заяц6628
Заяц6628, несколько ошибок: 1 почему массив теперь на 10? выгрузка ведь как и была Resize(1, 3) 2 не "номер питомника:", а "номер питомника", или меняйте на листе. Если возможны оба варианта - можно их оба и прописать в коде. Но такой подход вполне рабочий. Если поправить.
[vba]
Код
Sub Макрос1() Dim a(1 To 1, 1 To 3)
With Sheets("общий лист") sz = .Range("F" & Rows.Count).End(xlUp).Row + 1 For i = 3 To Range("A" & Rows.Count).End(xlUp).Row
If Cells(i, "C") = "номер питомника" Then a(1, 2) = Cells(i, "K") If Cells(i, "C") = "Документ" Then a(1, 3) = Cells(i, "K") If Cells(i, "C") = "Кто:" Then Erase a: a(1, 1) = Cells(i, "K")
If Val(Cells(i, "R")) > 0 Then .Cells(sz, "A").Resize(1, 3).Value = a .Cells(sz, "D") = Cells(i, "F") .Cells(sz, "E") = Cells(i, "R") .Cells(sz, "F") = Cells(i, "S") .Cells(sz, "G") = Cells(i, "X") .Cells(sz, "H") = Cells(i, "AA") sz = sz + 1 End If Next End With End Sub
[/vba] И вот только заметил - после смены питомника нужно массив очистить, иначе там могу остаться данные другого пистомника! Добавил в код, но это будет работать если первым по питомнику встречается "Кто:" Нужно в данных определить признак по которому меняется питомник, и очищать в этот момент массив a - тогда в сводный не попадут чужие данные, в случае брака в этих местах просто будет пусто в первых трёх столбцах.
Заяц6628, несколько ошибок: 1 почему массив теперь на 10? выгрузка ведь как и была Resize(1, 3) 2 не "номер питомника:", а "номер питомника", или меняйте на листе. Если возможны оба варианта - можно их оба и прописать в коде. Но такой подход вполне рабочий. Если поправить.
[vba]
Код
Sub Макрос1() Dim a(1 To 1, 1 To 3)
With Sheets("общий лист") sz = .Range("F" & Rows.Count).End(xlUp).Row + 1 For i = 3 To Range("A" & Rows.Count).End(xlUp).Row
If Cells(i, "C") = "номер питомника" Then a(1, 2) = Cells(i, "K") If Cells(i, "C") = "Документ" Then a(1, 3) = Cells(i, "K") If Cells(i, "C") = "Кто:" Then Erase a: a(1, 1) = Cells(i, "K")
If Val(Cells(i, "R")) > 0 Then .Cells(sz, "A").Resize(1, 3).Value = a .Cells(sz, "D") = Cells(i, "F") .Cells(sz, "E") = Cells(i, "R") .Cells(sz, "F") = Cells(i, "S") .Cells(sz, "G") = Cells(i, "X") .Cells(sz, "H") = Cells(i, "AA") sz = sz + 1 End If Next End With End Sub
[/vba] И вот только заметил - после смены питомника нужно массив очистить, иначе там могу остаться данные другого пистомника! Добавил в код, но это будет работать если первым по питомнику встречается "Кто:" Нужно в данных определить признак по которому меняется питомник, и очищать в этот момент массив a - тогда в сводный не попадут чужие данные, в случае брака в этих местах просто будет пусто в первых трёх столбцах.Hugo
Sub Макрос1() Dim sz As Long, i As Long Dim a(1 To 1, 1 To 2) Dim nr As Long Dim pit As String
With Sheets("общий лист") sz = .Range("F" & Rows.Count).End(xlUp).Row + 1 For i = 1 To Range("A" & Rows.Count).End(xlUp).Row
If Cells(i, "C") = "Номер" Then nr = Cells(i, "J") If Cells(i, "C") = "номер питомника" Then a(1, 1) = Cells(i, "K") If Cells(i, "C") = "Документ" Then a(1, 2) = Cells(i, "K") If Cells(i, "C") = "Кто:" Then pit = Cells(i, "K"): Erase a
If Val(Cells(i, "R")) > 0 Then .Cells(sz, "B").Resize(1, 2).Value = a .Cells(sz, "A") = nr .Cells(sz, "D") = Cells(i, "F") .Cells(sz, "E") = Cells(i, "R") .Cells(sz, "F") = Cells(i, "S") .Cells(sz, "G") = Cells(i, "X") .Cells(sz, "H") = Cells(i, "AA") .Cells(sz, "I") = pit sz = sz + 1 End If Next End With End Sub
[/vba] Добавил ещё объявление пары переменных, заругалось...
Вот так вышло вроде: [vba]
Код
Sub Макрос1() Dim sz As Long, i As Long Dim a(1 To 1, 1 To 2) Dim nr As Long Dim pit As String
With Sheets("общий лист") sz = .Range("F" & Rows.Count).End(xlUp).Row + 1 For i = 1 To Range("A" & Rows.Count).End(xlUp).Row
If Cells(i, "C") = "Номер" Then nr = Cells(i, "J") If Cells(i, "C") = "номер питомника" Then a(1, 1) = Cells(i, "K") If Cells(i, "C") = "Документ" Then a(1, 2) = Cells(i, "K") If Cells(i, "C") = "Кто:" Then pit = Cells(i, "K"): Erase a
If Val(Cells(i, "R")) > 0 Then .Cells(sz, "B").Resize(1, 2).Value = a .Cells(sz, "A") = nr .Cells(sz, "D") = Cells(i, "F") .Cells(sz, "E") = Cells(i, "R") .Cells(sz, "F") = Cells(i, "S") .Cells(sz, "G") = Cells(i, "X") .Cells(sz, "H") = Cells(i, "AA") .Cells(sz, "I") = pit sz = sz + 1 End If Next End With End Sub
[/vba] Добавил ещё объявление пары переменных, заругалось...Hugo
Можно раз так пошло то и вообще без массива, просто используйте 4 переменных. Я начал с массивом потому что там нужно было 3 постоянных значения рядом в строку выгружать, массивом меньше букв, меньше действий.
Можно раз так пошло то и вообще без массива, просто используйте 4 переменных. Я начал с массивом потому что там нужно было 3 постоянных значения рядом в строку выгружать, массивом меньше букв, меньше действий.Hugo