2013-10-11 5 views
2

Поэтому мне нужно извлечь информацию с листа только с определенными значениями. От примерно 550 строк до 50, которые распространяются по всему листу.Как получить значение диапазона в диапазоне

Для этого я использовал автофильтр. Теперь я вижу только строки, соответствующие моим критериям, но как я могу получить значения определенного диапазона?

Это далеко я пришел:

Я знаю, что я должен использовать

RangeINamed.SpecialCells(xlCellTypeVisible) 

работать только с видимой информации. Он работал для получения начальной и последней строки

startRow = bulkbatchRange.SpecialCells(xlCellTypeVisible).row 
endRow = startRow + bulkbatchRange.SpecialCells(xlCellTypeVisible).rows.Count 

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

Так что я попытался сделать

RangeINamed.SpecialCells(xlCellTypeVisible).range("U" & rowNumber).value 

Это не работал он не дал мне ничего. Теперь я довольно невежественный, поэтому кто-то может знать, как я получаю значение этой строки в столбце U в RangeINamed?

Спасибо

+0

RangeINamed.Range ("U10"). Значение или Sheets ("MySheetName"). Range ("U10") – Makah

+0

Hm jeeh, жаль, что я не был достаточно конкретны, но у меня нет точного RowNumber , Поэтому я не могу указать его как «U10». Все, что я знаю, это столбец. – Xepos

ответ

1

Вы всегда можете получить значение в конкретной ячейке, как U10 с:

Range("U10").Value 

ли скрыта или не строка.

РЕДАКТИРОВАТЬ # 1:

Вот небольшой пример, который петли вниз через колонке А таблицы AutoFiltered. Он ищет третью видимую строку (не включая строку заголовка):

Sub GoDownFilter() 
    Dim rLook As Range, r As Range 
    Set rLook = Intersect(ActiveSheet.UsedRange, Range("A:A").Cells.SpecialCells(xlCellTypeVisible)) 
    rLook.Select 
    K = 0 
    For Each r In rLook 
     If K = 3 Then 
      r.Select 
      MsgBox "The third visible row has been selected" 
      Exit Sub 
     End If 
     K = K + 1 
    Next r 
End Sub 
+0

Извините, я не совсем понял это.Но я не знаю роуминг (я хочу использовать цикл For только для видимых строк) из-за видимости, которую он иногда перескакивает из строки 10 в строку 40. Поэтому я не могу напрямую указать «U10» – Xepos

+0

Hi: Xepos , вы хотели бы посмотреть, как зацикливать столбец AutoFiltered? –

+0

Да! Это то, что я пытаюсь сделать, я думаю. – Xepos

2

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

Range("U10").Value

Or относительная клетка используя что-то вроде

RangeINamed.SpecialCells(xlCellTypeVisible)(2,3).Value 

Или

RangeINamed.SpecialCells(xlCellTypeVisible)(2,3).Address 'To see if you are getting it right 

EDIT:

Полный код фильтра и Iterate.

Sub Filter() 
Dim tableRange As Range, var, actualRow As Integer, lastRow As Integer 

Set tableRange = Range("PUT_THE_TABLE_RANGE_HERE") 

' Filter 
With tableRange 
    Call .AutoFilter(5, "SPECIFIC_FILTER") 
End With 

Set f = tableRange.SpecialCells(xlCellTypeVisible) 

With tableRange 
    Call .AutoFilter(5) 
End With 

For Each var In f.Cells.Rows 
    actualRow = var.Row 
    If actualRow <> 1 Then 
     ' Do something 
    End If 
Next 
End Sub 
+0

Спасибо! Это решило мою проблему. Не знал, что вы можете разместить другой диапазон именно так. – Xepos

Смежные вопросы