собирать числа из столбца, содержащего пустые ячейки, используя Excel VBA - PullRequest
1 голос
/ 13 мая 2011

У меня есть небольшая проблема, я иногда сталкиваюсь с такой проблемой, но пока не нашел быстрого решения.

Итак, представьте, что у нас есть лист Excel, и давайте предположим, что у нас есть пара чисел в столбце «А» с некоторыми пустыми ячейками в нем. В целом (просто для простоты) у нас есть первые 10 ячеек в столбце «А», которые нужно наблюдать. Например:

3
(empty cell)
(empty cell)
6
(empty cell)
4
(empty cell)
23
(empty cell)
2

Теперь на следующем шаге я хотел бы собрать эти числа в другой столбец (например, столбец B) с помощью VBA. Очевидно, я просто хочу собрать те ячейки, которые содержат число, и я хочу игнорировать пустые ячейки. Поэтому я хотел бы получить столбец что-то вроде этого:

3
6
4
23
2

Я уже написал следующий код, но застрял на этом этапе.

Sub collect()
For i = 1 To 10
    if cells(i,1)<>"" then...
Next i
End Sub

Есть ли простой способ решить эту проблему?

Заранее спасибо,

Ласло

Ответы [ 4 ]

3 голосов
/ 13 мая 2011

Вероятно, самый быстрый и простой способ - использовать расширенный фильтр Excel - единственное изменение, которое вам нужно сделать, - это добавить имя поля и критерии.Вы даже можете перечислить только уникальные предметы enter image description here

Эквивалент VBA равен

Sub test()

With Sheet1
    .Range("B1:B8").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=.Range( _
        "D1:D2"), CopyToRange:=.Range("F1"), Unique:=False
End With

End Sub
2 голосов
/ 13 мая 2011

Вы должны быть в состоянии использовать метод в посте в комментариях, но вы также можете использовать SpecialCells как Range("A:A").SpecialCells(xlCellTypeConstants,xlNumbers).Copy, чтобы получить все заполненные ячейки.

Редактировать: необходимые константы, а не формулы.

0 голосов
/ 13 мая 2011

Это будет работать для любого количества выбранных вами строк. Он всегда будет выводиться в следующем столбце в начале вашего выбора, например если данные начинаются в B10, они выводятся в C10

Sub RemoveBlanks()
    Dim cl As Range, cnt As Long
    cnt = 0

    For Each cl In Selection
        If Not cl = vbNullString Then
            Cells(Selection.Cells(1, 1).Row, Selection.Cells(1, 1).Column).Offset(cnt, 1) = cl
            cnt = cnt + 1
        End If
    Next cl
End Sub
0 голосов
/ 13 мая 2011

Если вы хотите выполнить цикл вручную и не возражаете, указав максимальный предел строки;

Dim i As long, values As long

for i = 1 To 10
    if cells(i, 1).Value <> "" Then
        values = (values + 1)
        '//adjacent column target
        cells(values, 2).value = cells(i, 1).value 
    end ff
next i
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...