Как я могу пропустить несколько столбцов, используя заголовок столбца из кода ниже - PullRequest
1 голос
/ 15 апреля 2019

У меня есть несколько столбцов с разными заголовками, я хотел бы пропустить несколько столбцов, используя заголовок столбца, не уверен в их размещении, они будут в столбце B или C в коде ниже Массив («A», «B», «C», «D», «E»)

код ниже работает нормально, чтобы заполнить пробелы с вышеупомянутым значением, таким как filldown Пожалуйста, помогите

 Sub FillRows()
     Const SheetName As String = "Close Price"

Dim lastRow As Long, x As Long, y
Dim arColumns
arColumns = Array("A", "B", "C", "D", "E")

With Worksheets(SheetName)
    lastRow = .Rows(Rows.Count).End(xlUp).Row
    For x = 3 To lastRow
        For y = 0 To UBound(arColumns)
            If IsEmpty(.Cells(x, arColumns(y)).Value) Then .Cells(x, arColumns(y)).Value = .Cells(x - 1, arColumns(y)).Value

        Next
    Next

End With

End Sub

1 Ответ

0 голосов
/ 15 апреля 2019

Ну, данных нет, поэтому я создал свой собственный.Я сделал только диапазон данных, начиная с A1 и 5 столбцов.Заголовок в столбце B: XYZ

enter image description here

Красные ячейки - пустые.Мы хотим что-то сделать, чтобы все пустые ячейки в диапазоне, кроме тех в столбце, где заголовок равен XYZ.

Итак, мой код сначала получает последнюю строку диапазона, затем выбирает сразувсе пустые ячейки, а затем, 1 на 1, он проверяет, является ли заголовок XYZ или нет.Если нет, то он что-то делает (в моем коде просто печатать адрес этих пустых ячеек).

Dim sCell As Range
Dim LastRow As Long
Dim i As Long

Dim arColumns As Variant
arColumns = Array("A", "B", "C", "D", "E")

'we need to get the real last row of complete range
'so we need to check all columns because it could be
'that last cell of a column is a blank


For i = 0 To UBound(arColumns) Step 1
    If Range(arColumns(i) & Rows.Count).End(xlUp).Row > LastRow Then
        LastRow = Range(arColumns(i) & Rows.Count).End(xlUp).Row
    End If
Next i

Range("A1:E" & LastRow).SpecialCells(xlCellTypeBlanks).Select 'we select all blank cells only

For Each sCell In Selection
    If Cells(1, sCell.Column).Value <> "XYZ" Then
        'If first cell in this same column IS NOT = XYZ then do something
        'You can add to skip extra columns adding OR conditions to IF
        Debug.Print sCell.Address(False, False)
    End If
Next sCell

При выполнении этого кода выводятся только адреса пустых ячеек, но ни один из них не находится в столбце B,потому что заголовок в столбце B равен XYZ.

C2
D2
A3
E3
A5
C8
E9
E10
D11
A13
C15
C17
E17
A19
D19
A23
E23

Хорошо, что вы можете добавить дополнительные проверки в части IF с условиями OR / AND, если они вам нужны.Что-то вроде If Cells(1, sCell.Column).Value <> "XYZ" Or Cells(1, sCell.Column).Value="ABC" Then пропустит пустую ячейку, если заголовок будет XYZ или ABC

Надеюсь, вы сможете адаптировать это к вашим потребностям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...