Я думаю, что это может быть то, что вы хотите.SheetNames - это массив, а RangeStrings также являются массивом, чтобы их можно было изменить позже.(примечание: массивы основаны на нуле, и поэтому мы пропускаем элемент с нулевой этикой)
В основном, проходите через ячейки в области ключей только один раз.Затем используйте местоположение столбца найденной ячейки, чтобы определить правильное имя SheetName для активации, и местоположение строки найденной ячейки, чтобы определить правильную RangeString для выбора.Это происходит, когда найдено первое совпадение.(Я не понимаю ваш исходный Exit For, за которым следует Exit Sub -> что вы ожидаете? Может ли быть выбрано более одной страницы?)
'select page
Sub Show_Page()
' look only once at all cells in the key area
For Each aCell In Sheets("home").Range("A2:E10")
If aCell.Value = Me.ComboBox3.Value Then '>> OOps, my test only Sheets("home").Cells(1, "A") Then
Dim sheetNamesArray() As Variant, sheetIndex As Long, theSheet As String
sheetNamesArray = Array("zero", "offset1", "p1", "p2", "p3", "p4", "p5")
sheetIndex = aCell.Column ' numeric value equivalent of "A", ... "E"
theSheet = sheetNamesArray(sheetIndex)
Worksheets(theSheet).Activate
Dim sheetRangesArray() As Variant, rangeIndex As Long, rangeString As String
sheetRangesArray = Array("zero", "notRow1", "A001;J106", "A111;J216", "A221;J326", "A331;J436", "A441;J546", "A551;J656", "A661;J766", "A771;J876", "A881;J986")
rangeIndex = aCell.Row ' numeric value 2...10
rangeString = sheetRangesArray(rangeIndex)
ActiveSheet.Range(rangeString).Select
Exit Sub ' once we have found it, exit the SUB (and implicitly also the FOR)
End If
Next aCell
End Sub
'eliminate Show_Range()