У меня есть 3 столбца, 20 строк таблицы. (A1:C20)3 столбца представляют собой 1 цифру 3-значного числа.
Некоторые строки имеют 3 цифры, а некоторые - пустые.

Мне нужен способ вернуть все непустые строки из 3 цифр одну за другой, начиная с вершины, в 3 отдельных столбца. Если значения добавляются в пустые строки, вывод отражается.

Пример:

A2:C2 составляет 4 6 2
A10:C10 составляет 2 6 6
A18:C18 - 0 6 1

вывод в D1:F3 будет
4 6 2
2 6 6
0 6 1

У меня есть решение как:

Sub ReturnValued ()
Set cpySht = Sheets("Sheet1")
Set pstSht = Sheets("Sheet2")
i = 0
For Each cell In cpySht.Range(cpySht.Cells(1, "A"), cpySht.Cells(cpySht.Cells(Rows.Count, "A").End(xlUp).Row, "A"))
  If cell.Value <> "" Then
    i = i + 1
    pstSht.Cells(i, "A") = cell.Value
  End If
Next cell
End Sub

Мне просто интересно, есть ли лучшее решение или решение с формулами.

Любая помощь приветствуется! Формулы предпочтительны, макросы приветствуются.

1 ответ1

0
Sub returnValues()

'last row used in the origin data sheet
lastRow = Sheets("sheet1").UsedRange.Rows.Count

'counter for the rows to be pasted in sheet 2
n = 1

'loop through all rows
For rowNum = 1 To lastRow
    'test if all three cells in the row have data in them:
    If Not IsEmpty(Sheets("sheet1").Cells(rowNum, 1)) And _
        Not IsEmpty(Sheets("sheet1").Cells(rowNum, 2)) And _
        Not IsEmpty(Sheets("sheet1").Cells(rowNum, 3)) Then
        'if ok, copies the entire row and paste to sheet 2
        Sheets("sheet1").Cells(rowNum, 1).EntireRow.Copy Sheets("sheet2").Range("A" & n)
        n = n + 1
    End If
Next rowNum

End Sub

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .