2013-07-01 3 views
1

여러 개의 열이있는 보고서를 만듭니다. 필요한 것은 정수만 표시하고 소수는 표시하지 않는 열은 정수로 반올림되어야합니다 (따라서 반올림 된 숫자를 표시 할뿐만 아니라 실제로는 둥근 숫자와 같음). 소수점 이하 두 자리 숫자를 나타내는 열은 반올림해서는 안됩니다.VBA - 범위의 배열을 배열로 복사

내가 할 수있는 것은 그러나

If c.NumberFormat = "#,##0_);(#,##0)" Then 
    c.Formula = "=round(" & Right(strFormula, Len(strFormula) - 1) & ",0)" 
End If 

, 나는 배열에 전체 보고서가 있고, 난 그냥 차라리 한 번에 하나 개의 셀을 붙여보다 시트에 전체 배열을 붙여 싶습니다. 차라리 셀 서식을 기반으로 각 셀을 처리하고 반올림하지 않고 보고서가 배열로 이동하는 범위의 서식을 복사하고 배열에서 작업하기를 원합니다. 나는 이것이 과정에서 몇 초를자를 것이라고 믿는다.

배열의 범위 형식을 복사하는 방법이 있습니까?

+0

프레젠테이션을 표현과 혼합하는 것처럼 들립니다. –

+0

죄송합니다. 무슨 소리 야? –

+0

미치 밀 (Mitch Wheat)에 동의합니다. 그는 배열에 표시 한 데이터가 동일한 데이터의 프레젠테이션과 분리되어 있어야한다는 것을 의미합니다. – rwisch45

답변

2

배열의 범위 형식을 복사하는 방법이 있습니까?

제기 된 질문에 초점을 맞 춥니 다. 불행하게도, 예를 들어 myArray = Range("A2:F25")으로 배열에 범위 값을 할당 할 수있는 방식으로 한 줄짜리 코드에서는 수행 할 수 없습니다. (또한, brettdj의 의견을 참조하십시오.) 대신, 같은 필요할 것 :하지만

Dim rng as Range 
Dim formatArray() As String 
Dim i as Long, j as Long 
Set rng = Range(A2:F20) 'or whatever the range is 
Redim formatArray(1 to rng.Rows.Count, 1 to rng.Columns.Count) 
For i = 1 to rng.Rows.Count 
    For j = 1 to rng.Columns.Count 
     formatArray(i, j) = rng.Cells(i, j).NumberFormat 
    Next 
Next 
... 

관찰의 커플 : 당신은 실제로 단지의 단일 행에 대한 서식을 알 필요가

을 범위 내에서 열의 숫자 서식이 중간 열로 변경되지 않기 때문일 수 있습니다. 코드로 단순화 할

:

... 
Redim formatArray(1 to rng.Columns.Count) 
For i = 1 to rng.Columns.Count 
    formatArray(i) = rng.Cells(1, i).NumberFormat 
Next 
... 

는 가정의 예를 위해서, 그 범위의 1 행은 필요한 수의 형식을 갖는다.

워크 시트의 수식을 수정하여 왜곡 할 수 있는지 궁금합니다. 아마도 코드에서 계산을 수행하고 반올림하여 결과 값을 다시 시트에 쓸 수 있기 때문입니다. 보고서.

워크 시트에 쓰고있는 값에 숫자 형식을 적용해야합니다 (숫자를 생성 할 수있는 수식을 수정할 수있는 것은 아닙니다). 범위 내의 전체 열 (예 :

)에 대해 숫자 형식을 적용해야하는 경우
... 
For i = 1 to rng.Columns.Count 
    rng.Columns(i).NumberFormat = formatArray(i) 
Next 
... 

당신이 둥근 값으로 셀의 수식의 결과를 변환해야하는 경우, 당신은 하나의 셀에 대한 예를 제공하는

rng.Cells(2, 5).Value = WorksheetFunction.Round(rng.Cells(2, 5).Value, 0) 

처럼 뭔가 그렇게 할 수 있습니다. 물론 수식에 입력되는 데이터가 이미 시트에 있으며 수식이 다시 계산 된 것으로 가정합니다.