2011-12-28 10 views
0

Я пытаюсь создать функцию, так что = processCells (A1: A10) примет диапазон ячеек и позволит мне добавить 10 к каждому элементу и отобразить новые числа в ячейках A11: A20. Я хочу использовать функцию на листе, чтобы пользователь мог выбирать ячейки A1: A10 вручную, поэтому они могли бы выбрать B1: B10 и т. Д. Вместо A1: A10Передача диапазона ячеек в функцию в vba от excel

Моя проблема заключается в передаче диапазона ячеек для рабочий лист к функции, а затем обрабатывать их.

ответ

2

Вот пример UDF, чтобы вы начали

Function processCells(rng As Variant, Optional AddValue = 10) As Variant 
    Dim v As Variant 
    Dim i As Long, j As Long 
    Select Case TypeName(Application.Caller) 
     Case "Range" 
      ' Called from a Formula 
      v = rng 
      If IsArray(v) Then 
       ' Called from an Array Formula 
       For j = 1 To UBound(v, 1) 
       For i = 1 To UBound(v, 2) 
        If IsNumeric(v(j, i)) Then 
         v(j, i) = v(j, i) + AddValue 
        End If 
       Next i, j 
      Else 
       ' Called from a single Cell 
       If IsNumeric(v) Then 
        v = v + AddValue 
       End If 
      End If 
      processCells = v 
     Case Else 
      processCells = vbEmpty 
    End Select 
End Function 

Чтобы использовать его, как вы описываете, введите его как формула массива =processCells(A1:A10) в клетках клеток A11:A20

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