2015-04-16 4 views
0

Я хочу извлечь индексы строк непустых ячеек в диапазоне («A1: A10»), который имеет имя «данные», диапазон («Ai») (i четное число) имеет значение «long» и диапазон («Aj») (j - нечетное число) - пустая ячейка. Если я сделаю это правильно, я должен получить (2,4,6,8,10), но мой код не удался. Вот мой код:Извлечь индексы строк непустых ячеек в определенном диапазоне

Sub RowIndexes() 
    Dim NonEmptyRows As Integer 
    Dim RowIndexes() As Integer 
    Dim i As Integer 
    Dim rng As Range 

    NonEmptyRows = WorksheetFunction.CountIf(Range("data"), "long") 
    ReDim RowIndexes(1 To NonEmptyRows) 

    For Each rng In Range("data") 
     If rng.Value = "long" Then 
      i = i + 1 
      RowIndexes(i) = rng.Row 
     End If 
    Next rng 

    Sheets("sheet1").Range("B1:B5").Value = RowIndexes 
End Sub 

я напечатал его, но результат меня смутило, я только что получил «2» (это может быть индекс строки диапазона («A2»)), и я не могу понять Зачем. На самом деле нужна помощь здесь.

ответ

0

Try This

Dim i As Integer 
Dim rng As Range 

For Each rng In Range("data") 
    If rng.Value = "long" Then 
     i = i + 1 
     Sheets("sheet1").Range("B" & (Range("B" & Rows.Count).end(xlUp).Row+1)).Value = rng.Row 
    End If 
Next rng 

испытано и результаты, которые я получил в Range B был

2 
4 
6 
8 
10 

Если же вы хотите использовать существующий код, то вам необходимо обновить следующие строки

OLD LINE

Sheets("sheet1").Range("B1:B5").Value = RowIndexes 

новый отредактированный ЛИНИИ

For i = 1 To NonEmptyRows 
    Sheets("sheet1").Range("B" & (Range("B" & Rows.Count).End(xlUp).Row + 1)).Value = RowIndexes(i) 
    Next i 

Старая RowIndexes не учитывает всех суб переменных, как в 1 to Number of NonEmptyRows нем по умолчанию поднимает первую переменную, которая RowIndexes(1), значение которого 2

+0

благодаря для инструкций, и я исправил эту проблему, которая отложила мой проект на два дня. Своим вдохновением я немного пошатнулся и нашел что-то интересное. – scofieldchen

+0

Используйте знак галочки, чтобы принять ответ http://stackoverflow.com/help/someone-answers – izzymo

+1

Если вы создаете массив и назначаете ему некоторые значения вручную, это, кажется, «вектор строки», и если вы хотите напечатайте его, либо вы используете Range («whatever»). value = workheetfunction.transpose (MyArray) или цикл for. Но если вы переносите значения диапазона в массив, это, кажется, «вектор-столбец» или «матрица», вы можете просто распечатать его с помощью Range («whatever»). Value = MyArray (у них одинаковые строки и столбцы) , Интересно, была ли общая схема? – scofieldchen

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