2009-05-23 3 views
3

숫자 값으로 계산되는 워크 시트의 셀 범위에 수식이 있습니다. 함수에 전달 된 범위에서 VBA의 수치 값을 얻으려면 어떻게해야합니까?VBA를 사용하여 Excel의 수식에서 셀 값을 가져 오는 방법은 무엇입니까?

의 워크 시트에서 열 A의 처음 10 개 행을 가정 해 봅시다은 랜드를 포함() 나는

public Function X(data as Range) as double 

    for c in data.Cells 
     c.Value 'This is always Empty 
     c.Value2 'This is always Empty 
     c.Formula 'This contains RAND() 
    next 

end Function 

나는 셀에서 함수를 호출 ... 내 함수에 인수로 있음을 전달하고있다 .. .

=X(a1:a10) 

어떻게 셀 값을 얻는가? 0.62933645?

엑셀 2003, VB6 VBA (2003 엑셀)에서 실행하는 경우 다음 코드는 나를 위해 작동

+0

나는 몇 가지 빠른 VBA 코드를했는데 Rand() 셀의 값을 얻었습니다. 아무 문제 없습니다. 어쩌면 다른 코드가 더 있는지보기 위해 코드를 게시 할 수 있습니까? –

+0

리차드, 더 이상의 코드는 없습니다 ... 셀 값을 가져와 모두 "비어 있습니다" – Simon

+0

기능을 사용하는 조건에 대해서도 설명하십시오. 특히, 같은 시트에있는 셀은 대화 상자 또는 일부 Excel 기능 (특정 Range 메서드는 특정 상황에서 Excel에서는 작동하지 않음)과 같이 사용할 때 활성 상태입니다. – GSerg

답변

5

:

Public Function X(data As Range) As Double 

For Each c In data.Cells 
    a = c.Value  'This works 
    b = c.Value2 'This works too (same value) 
    f = c.Formula 'This contains =RAND() 
Next 

End Function 

A와 B는 같은과 동일 제가 (전달하고있어 어떤 Rand()가있는 셀 범위입니다. 그 밖에 무슨 일이 일어나고 있는지 모르겠습니다.

아하! X를 설정해야합니까? 이 함수가 정확히 무엇을 기대하는지 모르겠지만 함수의 이름 인 X를 반환 할 값으로 설정해야합니다. 다음 라인을 추가하십시오 :

X = a 
+0

나는 셀이 포함 된 경우 작동 할 수 있습니다. – Simon

+0

어쩌면 X 함수를 호출하는 방법을 넣을 수 있을까요? 다시 말하지만, 내가 생각할 수있는 모든 방법이 나를 위해 일하고 있습니다. –

+0

질문에 쓰여진 X 함수는 c.Value, c.Value2 또는 c.Formula를 사용하여 아무 것도하지 않습니다. c.Value의 루프 내에서 몇 가지 작업을 수행해야한다고 가정합니다. a = a + c. 루프 내의 값 다음에 X = a – barrowc

1

게시 한 레이아웃을 사용하여 문제를 복제 할 수 없습니다. 게시 된 코드에 몇 가지 구문 오류가 있음을 확인했습니다 (예 : "for"는 "for each"이어야 함). 내가 넣을 때 = A1에서 RAND() : A10과 = X (A1 : A10)은 다음의 몇 가지에 대한 자세한 조금 확장 단지에, 그러나

Public Function X(data As Range) As Double 
    Dim c As Excel.Range 
    Dim sum As Double 
    For Each c In data.Cells 
     sum = sum + c.Value 
    Next 
    X = sum 
End Function 

나는이와 잘 수익을 얻었다 당신이 닦았 던 다른 질문들. 당신은 너무 같은 결과를 수식을 평가할 수 :

Public Function X(data As Range) As Double 
    Dim c As Excel.Range 
    Dim sum As Double 
    For Each c In data.Cells 
     sum = sum + Excel.Evaluate(c.Formula) 
    Next 
    X = sum 
End Function 

그러나 일반적으로는 기본적으로 두 번 같은 값을 계산하는대로에 싶지 않을 것입니다 말하기.

0

값을 요청하기 전에 계산을 수행해야합니다.

는 값을 사용할 수 있습니다 전에 계산을 강제해야한다이 상태에서 .. 종종 미리 형성되어

'Set Reasonable default 
Application.CutCopyMode = False 
Application.ScreenUpdating = False 
Application.Interactive = False 
Application.Calculation = xlCalculationManual 

을 다음과 같은 매크로 뭔가를 가속화합니다.

Public Function X(data As Range) As Double 
    'You may need the following as well 
    'Application.Calculate 
    Dim c As Range 
    For Each c In data.Cells 
     c.Calculate 
     c.Value 'This is now has a value 
     c.Value2 'This is now has a value 
     c.Formula 'This contains RAND() 
    Next 
End Function 
+0

Application.Calculate는 계산 모드가 xlManual로 설정된 경우에도 Excel에서 수식의 새 값을 계산하므로 필요하지 않습니다. Application.Calculate를 호출 할 때마다 매번 수동으로 설정하는 전체 목적을 이기고 속도를 높여야합니다. – Adarsha

+0

당신이 그 하나의 세포만을 계산하는 것은 아닙니다. 전체 시트가 아닙니다. 가장 큰 CPU 세이버 옆에 화면 업데이트가 꺼져 있습니다. – Frobbit

관련 문제