Выбор листа Excel по номеру - PullRequest
0 голосов
/ 04 августа 2020

Я новичок в макросах и VBA в Excel. Есть ли способ проверить, находится ли Testvalue между Value 1 и Value 2, и перейти на соответствующий лист? Если это не так, перейдите к следующей строке и повторите.

Например, с тестовым значением 3742 должен быть выбран лист A21.

введите описание изображения здесь

Ответы [ 2 ]

2 голосов
/ 04 августа 2020

Просто перебирайте каждую строку, пока не будет выполнено необходимое условие:

Dim testVal As Long, r As Integer
Dim yourSheet As Worksheet
Set yourSheet = Sheet1
With yourSheet
  testVal = .Range("E2").Value
  r = 2
  Do Until (.Range("A" & r).Value <= testVal) And _
    (.Range("B" & r).Value >= testVal)
    ThisWorkbook.Worksheets(.Range("C" & r).Value).Activate
    r = r + 1
  Loop
End With
1 голос
/ 04 августа 2020

На мой взгляд, вместо зацикливания каждой строки быстрее, если вы используете метод Find.

Sub test()

    Dim rngSearchA As Range, rngSearchB As Range, rngFoundA As Range, rngFoundB As Range
    Dim strValue As String, strSheetName As String
    Dim LastRowA As Long, LastRowB As Long
    
    With ThisWorkbook.Worksheets("Sheet1")
    
        strValue = .Range("E2").Value
        strSheetName = ""
        
        LastRowA = .Cells(.Rows.Count, "A").End(xlUp).Row
        LastRowB = .Cells(.Rows.Count, "B").End(xlUp).Row
        
        Set rngSearchA = .Range("A2:A" & LastRowA)
        Set rngSearchB = .Range("B2:B" & LastRowB)
        
        Set rngFoundA = rngSearchA.Find(strValue, LookIn:=xlValues, Lookat:=xlWhole)
        Set rngFoundB = rngSearchB.Find(strValue, LookIn:=xlValues, Lookat:=xlWhole)
        
        If Not rngFoundA Is Nothing And Not rngFoundB Is Nothing Then
            If .Range("C" & rngFoundA.Row).Value <> .Range("C" & rngFoundB.Row).Value Then
                MsgBox "Searching value appears in both columns with different Sheet name."
            Else
                strSheetName = .Range("C" & rngFoundA.Row).Value
            End If
        ElseIf Not rngFoundA Is Nothing Or Not rngFoundB Is Nothing Then
            If Not rngFoundA Is Nothing Then
                strSheetName = .Range("C" & rngFoundA.Row).Value
            Else
                strSheetName = .Range("C" & rngFoundB.Row).Value
            End If
        Else
            MsgBox "Value not found!"
        End If
        
        If strSheetName <> "" Then
            ThisWorkbook.Worksheets(strSheetName).Activate
        End If
        
    End With
    
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...