Row.Cells не возвращает все ячейки из целевого диапазона - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь написать некоторый VB-код для заполнения значения в ячейке, если выполняется какое-то условие:

Private Sub CommandButton1_Click()

    Dim targetRange As range
    Dim isBBset As Boolean
    Dim isDiagnosisSet As Boolean
    Dim isDiureticSet As Boolean
    Dim rowCounter As Long

    rowCounter = 1
    Set targetRange = Union(range("AC:AE"), range("AH:AL"), range("AP:AS"), range("AW:BA"), range("BE:BH"))
    targetRange.Font.Bold = True
    For Each Row In targetRange.Rows

        If rowCounter > 1 And rowCounter <= 201 Then
            isBBset = False
            For Each cell In Row.Cells
                Dim stringVal As String

                If IsNumeric(cell.Value) = True Then
                    stringVal = CStr(cell.Value)
                Else
                    stringVal = cell.Value
                End If
                If stringVal = "19" Or stringVal Like "19+*" Or stringVal Like "*+19+*" Or stringVal Like "*+19" Then
                    range("BJ" & rowCounter).Value = 0
                    isBBset = True
                ElseIf stringVal = "20" Or stringVal Like "20+*" Or stringVal Like "*+20+*" Or stringVal Like "*+20" Then
                    range("BJ" & rowCounter).Value = 0
                    isBBset = True
                ElseIf stringVal = "21" Or stringVal Like "21+*" Or stringVal Like "*+21+*" Or stringVal Like "*+21" Then
                    range("BJ" & rowCounter).Value = 0
                    isBBset = True
                ElseIf stringVal = "22" Or stringVal Like "22+*" Or stringVal Like "*+22+*" Or stringVal Like "*+22" Then
                    range("BJ" & rowCounter).Value = 0
                    isBBset = True
                ElseIf stringVal = "23" Or stringVal Like "23+*" Or stringVal Like "*+23+*" Or stringVal Like "*+23" Then
                    range("BJ" & rowCounter).Value = 0
                    isBBset = True
                ElseIf stringVal = "24" Or stringVal Like "24+*" Or stringVal Like "*+24+*" Or stringVal Like "*+24" Then
                    range("BJ" & rowCounter).Value = 0
                    isBBset = True
                End If
            Next cell
            If isBBset = False Then
                range("BJ" & rowCounter).Value = 1
            End If
        End If
        rowCounter = rowCounter + 1
    Next Row
End Sub

Я получаю целевой диапазон по объединению, а затем зацикливаюсь на каждой строке.Я ожидаю, что когда я сделаю Row.Cells, я получу все ячейки из моего диапазона для этого ряда, но я получу ячейки только из первого диапазона, который я положил в объединение.Как получить отдых?

1 Ответ

0 голосов
/ 07 июня 2018

Что вы могли бы рассмотреть (и это просто советы):

  • Получить последний использованный ряд целевого диапазона, например:

    Dim LR as long
    LR = targetRange.Find("*", , , , xlByRows, xlPrevious).Row
    
  • Затем выполните цикл от строк 1 до LR, например:

    Dim RW as long
    For RW = 1 to LR
        'Your code to do stuff
    Next RW
    
  • В этом цикле, цикл по используемому столбцу в целевом диапазоне

    Dim CL as range
    For Each CL in targetRange.Columns
        Debug.Print Cells(RW, CL.Column).value
    Next CL
    
  • Таким образом, итог может выглядеть следующим образом:

    Dim LR as long, RW as long
    Dim CL as range
    
    LR = targetRange.Find("*", , , , xlByRows, xlPrevious).Row
    For RW = 1 to LR
        If RW > 1 AND RW <= 200 then
            For Each CL in targetRange.Columns
                Debug.Print Cells(RW, CL.Column).value 'Your code goes here
            Next CL
        End if    
    Next RW
    

Надеюсь, что помог решить вашу проблему

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