Добрый день,
Я очень новый в кодировании и совершенно новый в кодировании вещей с помощью макросов vba. После того, как я обнаружил полезность vba в excel, я теперь прилагаю усилия, чтобы узнать больше об этом. Любая помощь была бы очень признательна.
Это код, с которым я работаю до сих пор:
Option Explicit
Const initrow As Integer = 3
Const ENDROW As Long = 65536
Const PrimaryLengthCol As Integer = 1 '"A"
Sub Test()
Dim lastrow As Double
Dim i As Double
Dim irow As Double
lastrow = Cells(Rows.Count, "A").End(xlUp).Row
Application.ScreenUpdating = False
irow = 0
i = 0
For i = 0 To lastrow
If Cells(initrow + irow, PrimaryLengthCol + 2) = "BLANK" Then
Continue For
Cells(initrow + i, PrimaryLengthCol + 3).Value = Cells(initrow + irow, PrimaryLengthCol + 2).Value
End If
Next
End Sub
Таким образом, по существу проблема, с которой я сталкиваюсь, заключается в следующем:
У меня есть следующее В столбце » A «(входной столбец):
- 0
- 14.155
- 14.128
- 15.589
- ПУСТО
- ПУСТО
- ПУСТО
- 15.158
Мне нужно, чтобы код vba прошел через каждую ячейку, и если ячейка равна «пустой» (текстовая строка), то соответствующая ячейка примет следующий номер. Кроме того, если значение из столбца «A» равно нулю, то выходные данные равны «void» в столбце «B».
Таким образом, желаемый выход в столбце » B » (выходной столбец) должен быть:
- Пустота
- 14.155
- 14.128
- 15.589
- 15.158
- 15.158
- 15.158
- 15.158
Последний критерий заключается в том, что если ячейкам в столбце «A», равному «пустому», предшествовало нулевое значение в предыдущей ячейке, то эти «пустые» также будут равны значению «пустые» в выходном столбце » B» :
Таким образом, если столбец «A» имел этот сценарий:
- 0
- ПУСТО
- ПУСТО
Выходной столбец «B» должен быть:
- пустота
- пустота
- пустота
Я не уверен, как применить Continue For, так как я хочу, чтобы цикл «пропускал» по «пустым» ячейкам для следующей итерации, но все еще заполнял соответствующее значение в столбце «B» с последующим квалификационным значением. Я бы предпочел завершить это через vba, потому что я снова пытаюсь выучить язык, поэтому я заставляю себя увеличить свое воздействие на него.
Еще раз буду признателен за любую помощь в этом вопросе.
Спасибо!
Вот немного другой подход, который может упростить использование и изменение (не протестирован):
Более продвинутый подход с Формулой Excel R1C1 (также не протестирован):
.CurrentRegion
получает прямоугольный диапазон, окруженный пустыми ячейками (аналогично щелчку по ячейкеA3
и нажатию Ctrl + A), затем.Offset(,1)
должен переместить диапазон в столбец B, и.Resize(,1)
является необязательным, чтобы изменить размер диапазона в один столбец только в случае, если столбец B не пуст.Поэтому, основываясь на советах Slai, которые я очень ценил в сочетании с кодом, с которым я уже играл, проблема была решена с помощью следующего кода. Я должен был разделить его на 2 функции, чтобы выполнить все мои первоначальные критерии. Если у кого-то есть более эффективный способ решения проблемы, я буду более чем счастлив узнать об этом.