2015-11-17 8 views
0

Я пытаюсь выбрать несколько диапазонов одновременно. То есть. B2: C2, B12: C12, B14: C14.Выбор нескольких диапазонов из строки диапазонов

обновленный код

Sub MarkForDMSLookup() 
Dim MarkingString As String 
Dim MarkingRange As String 

j = 0 

For i = 3 To 20 'LastRow() 
    If Cells(i, 5) = "Yes" Then 
     j = j + 1 
     MarkingRange = "B" & i & ":C" & i 
     'MsgBox MarkingRange 
     If j = 1 Then MarkingString = MarkingRange 
     If j > 1 Then MarkingString = MarkingString & ", " & MarkingRange 

     If Cells(i, 5) = "No" Then Cells(i, 5).EntireRow.Hidden = True 

    End If 
Next i 

'MsgBox MarkingString 

Union(MarkingString).Select 
End Sub 

Union тег дает мне несоответствиетипа. Любая помощь в выравнивании типов была бы весьма признательна.

При ограничении цикла для перехода от 2 до 20 я могу использовать тег Range вместо Union.

+1

На какой строке вы получите сообщение об ошибке? Изменить 'For i = 3 To LastRow()' to 'For i = 3 To LastRow' – R3uK

+0

Ошибка при использовании' Set SelRange = Union (MarkingString) ' У меня нет ошибки с' LastRow() ', но я собираюсь для этого нужно, когда я разворачиваю код .. :) – StefanMoeberg

+0

'Set SelRange = range (MarkingString)' – Jeeped

ответ

1

Я бы просто использовать автофильтра вместо зацикливания:

Sub MarkForDMSLookup() 
    Dim j As Long 
    j = 0 

    With Range("E2:E" & LastRow()) 
     .AutoFilter field:=1, Criteria1:="Yes" 
     On Error Resume Next 
     .Resize(.Rows.Count - 1).Offset(1, -3).Resize(, 2).SpecialCells(xlCellTypeVisible).Select 
     On Error GoTo 0 
    End With 

End Sub 
Function LastRow() 
    LastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row 
End Function 
+0

Это близко, но не то, что мне нужно. Мне нужно иметь возможность выбирать фильтрованные ячейки и только отфильтрованные ячейки. – StefanMoeberg

+1

Не уверен, что я следую. Это делает то же, что и ваш исходный код, т. Е. Выбирает только ячейки, в которых столбец E содержит «Да», и скрывает остальные. – Rory

+0

Извините! Я сделал опечатку! – StefanMoeberg

0
Sub MarkForDMSLookup() 
Dim MarkingString As String, _ 
    MarkingRange As String, _ 
    FirstRun As Boolean, _ 
    RgMarking As Range, _ 
    RgTotal As Range, _ 
    CounT As Long, _ 
    ToTaL As Long 

FirstRun = True 
CounT = 0 
ToTaL = 0 
Set RgTotal = Nothing 

For i = 3 To LastRow 
    If Cells(i, 5) <> "Yes" Then 
     If Cells(i, 5) = "No" Then Cells(i, 5).EntireRow.Hidden = True 
    Else 
     MarkingRange = "B" & i & ":C" & i 
     CounT = CounT + 1 
     ToTaL = ToTaL + 1 
     If FirstRun Then 
      MarkingString = MarkingRange 
      FirstRun = False 
     Else 
      MarkingString = MarkingString & ", " & MarkingRange 
     End If 
     If CounT <> 20 Then 

     Else 
      On Error GoTo ErrHandler 
      Set RgMarking = Range(MarkingString) 
      Set RgTotal = Union(RgTotal, RgMarking) 
      On Error GoTo 0 
      MarkingString = vbNullString 
      FirstRun = True 
      CounT = 0 
     End If 
    End If 
Next i 

Set RgTotal = Union(RgTotal, RgMarking) 
RgTotal.Select 
Exit Sub 

ErrHandler: 
MsgBox Err.Description & vbCrLf & Err.Number 
Resume Next 
End Sub 
Смежные вопросы