2010-08-13 7 views
1

Я хочу подсчитать количество разных ячеек, которые выбраны с помощью VBA.Подсчитайте количество разных ячеек в VBA

Рассмотрите, выбираем ли мы пять отдельных ячеек - D5, C2, E7, A4, B1. Есть ли способ подсчитать количество ячеек.

Во-вторых, как я могу получить данные в этих ячейках. Допустим, я хочу сохранить его в массиве.

Благодарим за помощь.

ответ

3
Dim rngCell as Range, arrArray() as Variant, i as integer 

Redim arrArray(1 to Selection.Cells.Count) 

i = 1 
For each rngCell in Selection 

    arrArray(i) = rngCell.Value 
    i = i + 1 

Next 
+0

Благодарим за помощь. Код работает так, как я хотел. – Aniruddha

+0

@ Анирудха - счастлив помочь. Спасибо за подтверждение ответа. – variant

0

К счастью, у меня есть путь вокруг него, делая - Selection.Cells.Count

Это возвращает меня число клеток для выбранных ячеек.

Но я до сих пор застрял с динамическим присвоением этого значения в массив, как в ---

I = Selection.Cells.Count Dim ValArr(I)

+0

Этот код работает – Aniruddha

1

Похоже, вы получили это в основном разобрались, но вот что-то, чтобы загрузить его в массив, если вы хотите:

Public Sub Example() 
    Dim test() As Variant 
    test = RangeToArray(Excel.Selection, True) 
    MsgBox Join(test, vbNewLine) 
End Sub 

Public Function RangeToArray(ByVal rng As Excel.Range, Optional ByVal skipBlank As Boolean = False) As Variant() 
    Dim rtnVal() As Variant 
    Dim i As Long, cll As Excel.Range 
    ReDim rtnVal(rng.Cells.Count - 1) 
    If skipBlank Then 
     For Each cll In rng.Cells 
      If LenB(cll.Value) Then 
       rtnVal(i) = cll.Value 
       i = i + 1 
      End If 
     Next 
     ReDim Preserve rtnVal(i - 1) 
    Else 
     For Each cll In rng.Cells 
      rtnVal(i) = cll.Value 
      i = i + 1 
     Next 
    End If 
    RangeToArray = rtnVal 
End Function 
Смежные вопросы