2016-10-14 3 views
0

Мне нужно найти строку, содержащую определенное слово и т. Д. И после определенного (переменного) номера строки.excel macro найти строку

Последняя формула номер строки выглядит следующим образом:

Son1 = Range(KirilimKolonu & ":" & KirilimKolonu) _ 
      .Find(what:="1", _ 
       after:=Range(KirilimKolonu & "1"), _ 
       searchdirection:=xlPrevious).Row 

что-то вроде

x =1 

do while x < 785 

if range(KirilimKolonu & x).value = 1 then exit loop else 

x = x + 1 

Loop 

должно быть лучше вместо петли ...

+3

Похоже, вы просто хотите сделать другой '.Find' с опцией' after', установленной в строке 'Son1 + 1'? – arcadeprecinct

+0

@arcadeprecinct Я хочу найти последнюю строку с опцией, например, которая предшествует строке 785 ... (число строк изменяется для каждого условия) –

+0

Вы хотите найти последнюю строку перед определенной строкой или первой строкой после определенный ряд? Ваш вопрос и комментарий противоречат друг другу. Можете ли вы более подробно описать, что хотите найти? Может быть, с небольшим примером. (Редактируйте это в свой вопрос) – arcadeprecinct

ответ

1

Самый простой способ будет изменять диапазон для поиска и поиска назад. Если указать ячейку, чтобы начать поиск (After варианта) где-то в середине, поиск будет обернуть вокруг и меткости может быть на самом деле после начальной ячейки (а не не попадания на всех)

Dim foundCell As Range 
Dim searchRange As Range 
Dim Son1 As Long 

Set searchRange = Range("A1:A" & 785) 'your variable goes here 

Set foundCell = searchRange.Find(what:="1", searchdirection:=xlPrevious) 'specify other options if you must 

'you need to check if something was found or .Row will cause an error. 
If Not foundCell Is Nothing Then 
    Son1 = foundCell.Row 
Else 
    'do what you need to if there is no match 
End If 

More options

+0

благодарит за вашу помощь. я использовал xlNext, начиная с самого начала ... '' ' –

+0

Set searchRange = Range (KirilimKolonu & SubB3 & ":" & KirilimKolonu & SubB4) Set foundCell = searchRange.Find (что: = "4", searchdirection: = xlNext) Если не foundCell ничего после этого Son4 = foundCell.Row Если Son5> SubB5 Тогда Range (Kolon2 & SubB5) .Formula = "= SUBTOTAL (9," & Kolon2 & SubB5 + 1 & ":" & Kolon2 & Son5 & ")" Else Диапазон (Kolon2 & SubB5) .Formula = "= SUBTOTAL (9," & Kolon2 & SubB5 + 1 & ":" & Kolo n2 & LastRow & ")" Конец Если Конец Если ' –

+0

размещение более длинных частей кода никогда не является хорошей идеей. У вас есть еще одна проблема? Помог ли мой код? Если нет, то почему? – arcadeprecinct