Как определить строку в диапазоне, смежном с моим выделением? - PullRequest
2 голосов
/ 01 июля 2019

Я уже выбираю другой диапазон ячеек в течение дня и проверяю через Vlookup, существует ли связь с учетной записью.

Если она существует, мой vlookup говорит "true" в столбцах F и G;если это не так, мой vlookup возвращает "ложь"

Однако возможная причина, по которой vlookup возвращает "ложь", даже если сопоставление аккаунта связано с проблемой пробелов

ТакНиже я создал код, который проверяет, есть ли в определенных столбцах F и G inStr со словом "False".

Если обнаружено любое слово "False", вызывается определенная подпроцедура обрезкиисключить интервалы в моем выборе.

Обнаружение строки «False» выполняется еще раз, чтобы убедиться, что «False» теперь «True» из-за устранения проблемы с интервалами.Если строка «False» все еще существует после итерации цикла, то у нас есть неправильная ассоциация учетной записи.После этого появляется окно сообщения, и код заканчивается

Пожалуйста, я хочу обрезать свой выбор только тогда, когда я обнаружу любую строку "False" в соседних столбцах F и G .... поэтому мой выбор, например,A10: E14, я хочу обнаруживать только «ложные» строки в F10: G14

Sub myCode()

    Dim iRow As Range, cell As Range
    Set iRow = Range("F2:G100")  '<<<this should be only columns F and G with 
                                    'rows adjacent to my manual selection
    For Each cell In iRow     'for each cell in F and G adjacent to my 
        'selection    
        If InStr(cell.Value, "FALSE") > 0 Then             
            Call Trim_Code
        End If
    Next cell

    For Each cell In iRow
        If InStr(cell.Value, "FALSE") > 0 Then
            MsgBox ("Account Mis-association Found!")
        End If
    Next cell

End Sub
Sub Trim_Code()

      Dim Rng As Range
      Set Rng = Selection

      For Each Cell In Rng    
            Cell.Value = Trim(Cell)    
      Next Cell
End Sub

Как мне установить в iRow только смежные строки F и G относительно моего выбора,и как мне очистить этот код, чтобы он выполнялся быстрее?

\\\

Решено с любезной помощью PeterT!

Sub Test ()

Dim thisWS As Worksheet
Set thisWS = ActiveSheet

Dim Association As Boolean
Association = True

Dim firstRow As Long
Dim lastRow As Long

firstRow = Selection.Cells.Row
lastRow = firstRow + Selection.Cells.Rows.Count - 1

Dim accountChecks As Range

With thisWS
    Set accountChecks = .Range(.Cells(firstRow, 6), .Cells(lastRow, 7))
End With



Dim account As Range

For Each account In accountChecks
    If account = False Then
        Call Trim_Code
    End If


    If account = False Then
        MsgBox "Account Mis-association Found in row " & account.Row & "!"
        Association = False
    End If
Next account


If Association = False Then
    Exit Sub
End If




'proceed to do some crazy code

End Sub

Sub Trim_Code ()

  Dim Rng As Range
  Set Rng = Selection

  For Each cell In Rng
        cell.Value = Trim(cell)
  Next cell

End Sub

1 Ответ

2 голосов
/ 01 июля 2019

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

Sub Test()
    Dim thisWS As Worksheet
    Set thisWS = ActiveSheet

    Dim firstRow As Long
    Dim lastRow As Long
    firstRow = Selection.Cells.Row
    lastRow = firstRow + Selection.Cells.Rows.Count - 1

    Dim accountChecks As Range
    With thisWS
        Set accountChecks = .Range(.Cells(firstRow, "F"), .Cells(lastRow, "G"))
    End With

    Trim_Code accountChecks

    Dim account As Range
    For Each account In accountChecks
        If account = False Then
            MsgBox "Account Mis-association Found in row " & account.Row & "!"
        End If
    Next account
End Sub

Sub Trim_Code(ByRef theseCells As Range)
    Dim cell As Range
    For Each cell In theseCells
        cell.Value = Trim(cell)
    Next cell
End Sub
...