2013-10-10 3 views
0

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

Когда я возвращаю значение calc для excel, я получаю #VALUE! ошибка, что означает , что типы переменных различны.

Я попытался использовать Cint (var) и получить ту же ошибку.

Вот код без Cint():

Function CalcTest(Interval As Range) As Integer 
    Dim x As Integer 
    Dim y As Integer 
    x = Interval.Offset(0, 0).Value 
    y = Interval.Offset(1, 0).Value 
    CalcTest = x + y 
End Function 

Я уже пробовал:

Function CalcTest(Intervalo As Range) As Integer 
    CalcTest = Interval.Offset(0, 0).Value + Interval.Offset(1, 0).Value 
End Function 

И:

Function CalcTest(Interval As Range) As Integer 
    Dim x As Integer 
    Dim y As Integer 
    x = CInt(Interval.Offset(0, 0).Value) 
    y = CInt(Interval.Offset(1, 0).Value) 
    CalcTest = x + y 
End Function 

И без declarating де тип функции:

Function CalcTest(Interval As Range) 
    ... 
    ... 
End Function 

И в Excel я вызываю функцию с некоторым диапазоном:

=CalcText(A1:A2) 

Что я делаю неправильно?

#

Большая картина:

enter image description here

Что мне нужно сделать, это создать CEL в любом месте, которое подсчитывает от общих значений от $ R седловины для каждого occurrency ключевого значения в $ N col.

За каждый раз, когда у меня есть «TH» в $ N Col, мне нужно скопировать значение $ R col этого строки в cel.

То же самое для многих других $ N Значения.

В данном примере значение накопленной CEL для TH в $ N 25.

Tks за помощь !!!

+1

Зачем вам VBA для этого? –

+1

Почему бы не использовать инструкцию SUMIF в формуле Excel? – enderland

+0

Точно мои мысли :) –

ответ

0

Вы делаете так трудно на себя.

Поместите в ячейку в строке 2 и перетащить его вниз:

=SUMIF(N$2:N2,"TH",R$2:R2) 
+0

Tks для подсказки, но я это знаю! Я просто упростил функцию, чтобы спросить здесь! Посмотрите на ответ Сиддхарта! Tks за помощь !!! –

+0

@ EdgarBarcellosJunior, пожалуйста, напишите код, который на самом деле показывает вашу проблему - ошибка, которая у вас есть в фактическом коде, должна быть другой, потому что ошибка с вашим кодом выше, чем мой ответ (и адрес Siddharth Rout). – enderland

+0

Я редактирую свой вопрос с большой картинкой и ссылкой на скриншот. Пожалуйста, обратите внимание и спасибо за помощь! –

0

Это то, что вы пытаетесь?

Public Function CalcTest(rng1 As Range, rng2 As Range) As Variant 
    On Error GoTo Whoa 

    CalcTest = rng1.Value + rng2.Value 

    Exit Function 
Whoa: 
    CalcTest = "Please check the Range Values" 
End Function 

В ячейке Excel, поместите эту формулу =CalcText(A1,A2)

enter image description here

+0

Не совсем. Я просто упростил функцию, чтобы спросить здесь. Но мне действительно нужно искать значения в большом диапазоне, например $ A: $ D, и делать это n раз. Так что мне нужно будет работать с rang.Offset (x, y). Значение вместо rang.Value, как вы. Реальный вопрос: как манипулировать целыми или длинными данными в rang.Offset (x, y) .value? Tks за помощь !!! –

+0

В этом случае вам не нужно '.Offset()'. Вам нужно пройти через диапазон. См. Ответ @ enderland :) –

+0

@EdgarBarcellosJunior Я вижу, что вы перенаправляете эндерланда на этот пост: p. Хорошо, вы можете точно объяснить, чего вы пытаетесь достичь? Вы пытаетесь найти сумму всех чисел в диапазоне смешанных типов? –

0

Вы не должны упростить код на то, что не достаточно представлять ваш вопрос. Из ваших комментариев и вопросов.

Function CalcTest(Interval As Range) As Integer 
    Dim x As Range 
    CalcTest = 0 
    For Each x In Interval 
     If IsNumeric(x) Then 
      CalcTest = CalcTest + x.Value 
     End If 
    Next x 
End Function 

Это позволит убедиться, что вы складываете на самом деле число.

Но, как это не будет работать какой-либо иной то функция рабочего листа:

=Sum(Range) 

Просто преобразования значения Integer не будет работать, если то, что вы преобразования не converatble. Если вы передадите письмо в функцию CInt(), он просто потерпит неудачу.

+0

Tks за советом. Но теперь я смущен. Если значение cel в excel является целым числом, например «10», почему я не могу манипулировать тогда в скрипте VBA с использованием смещения (в случае поиска этого cel в диапазоне)? –

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