Страницы: 1
RSS
VBA. Пропуск пустых строк при копировании
 
У меня есть таблица в которой через определенный интервал повторяется группа ячеек. Эту группу мне нужно скопировать на другой лист. Если в первой найденой строке группы данные есть - то все работает хорошо, но если она пустая - код зацикливается и начинает копировать мне пустые ячейки. Помогите пожалуйста модифицировать код чтобы добавить проверку - если первая строка пустая, то переходить к следующей итерации:
Код
Do    For j = n To .Cells(n - 1, "K").End(xlDown).Row
      Cells(i, "B") = FoundCell.Offset(, 1)     
      Cells(i, "C") = .Cells(j, "K")             
      Cells(i, "D") = .Cells(j, "J")       
      Cells(i, "F") = .Cells(j, "L")           
      Cells(i, "G") = .Cells(j, "M")    
      i = i + 1
Next
 
Что-то наворочено там у Вас...
Зачем Do? Зачем счетчик i=i+1?
Покажите лучше в файле-примере. Как есть-Как надо
И вот это уточните
Цитата
Genesys написал: если первая строка пустая
ВСЯ строка должна быть пустой?
Согласие есть продукт при полном непротивлении сторон
 
1) i - счетчик порядкового номера строки на листе, на который осуществляется перенос
2) строка считается пустой если пустое значение вот тут Cells(i, "C") = .Cells(j, "K")  

3) Do - поскольку, как я упомянул, на одном листе может быть несколько групп строк и мы по определенному условию перемещаемся на эту пустую группу и первоначальная задача - опеределить является ли первая строка пустой, и только после этого начинать копирование
Код
Set FoundCell = .Columns(1).Find("условие:", , xlValues, xlWhole)     

If Not FoundCell Is Nothing Then        FAdr = FoundCell.Address
        n = FoundCell.Row + 3    'начальная строка в таблице
      Do
        Cells(i, "B") = FoundCell.Offset(, 1)  
        For j = n To .Cells(n - 1, "K").End(xlDown).Row
          Cells(i, "C") = .Cells(j, "K")      
          Cells(i, "D") = .Cells(j, "J")        
          Cells(i, "F") = .Cells(j, "L")    
          Cells(i, "G") = .Cells(j, "M")  
          i = i + 1
        Next
         Set FoundCell = .Columns(1).FindNext(FoundCell)
          n = FoundCell.Row + 3
      Loop While FoundCell.Address <> FAdr
     End If
        End With
 
Цитата
Genesys написал: строка считается пустой если пустое значение вот тут Cells(i, "C") = .Cells(j, "K")  
Проверяйте это условие в начале каждой интерации цикла For...Next
Код
        For j = n To .Cells(n - 1, "K").End(xlDown).Row
            If Not IsEmpty(.Cells(j, "K")) Then
                Cells(i, "C") = .Cells(j, "K")
                Cells(i, "D") = .Cells(j, "J")
                Cells(i, "F") = .Cells(j, "L")
                Cells(i, "G") = .Cells(j, "M")
                i = i + 1
            End If
        Next
P.S. Оформите код в своих сообщениях так-же как мой. Ищите на панели инструментов сообщений значек <...>
Изменено: Sanja - 04.10.2018 09:54:56
Согласие есть продукт при полном непротивлении сторон
 
Sanja,спасибо большое за помощь! Все работает как часы теперь!
Страницы: 1
Наверх