2013-11-29 5 views
0

Мое намерение построить динамический диапазон альтернативных ячеек как неудачный, очевидно, из-за отсутствия знаний.Стройте альтернативный диапазон ячеек vba

For j = 1 To numFrame 
    Set MaxStRange_OD_OUT = ActiveSheet.Range(Cells(1, 2 * (j + 1))) 
    MaxVal = Application.Max(MaxStRange_OD_OUT) 
    Debug.Print MaxVal 
Next j 

, что я хотел бы для того чтобы достигнуть это

MaxStRange_OD_OUT = ActiveSheet.Range(Cells(1, 4),Cells(1, 6),Cells(1, 8)) 

конечно число клеток может меняться скажем от 1 до 10 (numFrame)

благодаря

+0

вам нужно использовать макрос ли? – Makah

ответ

1

Вы можете использовать Application.Union, чтобы создать диапазон.

Sub UnionRangeExample() 

Dim rng As Range 
Dim i As Long 

    For i = 1 To 20 Step 2 

    If rng Is Nothing Then 

    Set rng = ActiveSheet.Cells(i, 1) 

    Else 

    Set rng = Application.Union(rng, ActiveSheet.Cells(i, 1)) 
    End If 

    Next i 

MsgBox rng.Address 

End Sub 

В вашей ситуации вы можете использовать его как это:

Sub UnionRangeExample_v2() 

Dim rng As Range 
Dim j As Long 
Dim numFrame As Long 


numFrame = 10 


    For j = 1 To numFrame 
     If rng Is Nothing Then 

     Set rng = ActiveSheet.Cells(1, 2 * (j + 1)) 

     Else 

     Set rng = Application.Union(rng, ActiveSheet.Cells(1, 2 * (j + 1))) 
     End If 
    Next j 

MsgBox "max for: " & rng.Address & " is " & Application.Max(rng) 

End Sub 
+0

Я получаю определенную или определенную объектами ошибку. –

+0

На какой линии? Я просто написал его и протестировал его на своем ПК без проблем. – Sam

+0

@ fabio.geraci Я просто добавил еще один пример, который вы должны использовать в своей ситуации (опять я протестировал это без проблем). – Sam

1

Вы можете попробовать этот код здесь

Function MyMaxValue() as Double 
    Dim maxValue As Double, numFrame As Double, i As Integer, currentValue As Double 

    numFrame = 7 

    For i = 1 To numFrame 
     currentValue = Cells(1, 2 * (j + 1)).value 
     If currentValue > maxValue Then 
      maxValue = currentValue 
      Debug.Print "new value = " & maxValue 
     End If 
    Next i 

    MyMaxValue = maxValue  
End Function 
+0

есть способ преобразовать все значения в диапазоне перед вычислением максимального значения –

+0

Да, вы можете использовать Union(), а затем Max(). Но вопрос в том, почему вы хотите Range с этими значениями? Мой код достигает той же цели с одинаковой скоростью (лучше), и я думаю, что это более ясно, чем переменная Range и так далее. – Makah

+0

Makah, я новичок в vba, поэтому я работаю с тем, что знаю, но ваш код будет идеально подойдет, особенно потому, что мне нужен abs val для достижения значений, спасибо –

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