2012-03-30 5 views
1

내가 너무 (기본적으로 나를 아래로 10 회를 해당 기능을 드래그 한 후 메인 시트 창에서 셀 B1에
"=A1*2" 를 입력하고 동등한 것 범위에 값 중 하나를 할당 할 찾고 있어요 B2=A2*2
B3=A3*2
, ...,
Bn=An*2VBA 세포 수학

내가 임시 변수에 값을 할당 할 때 오류가 발생
With ThisWorkbook.Worksheets(sheetname) 
    Dim temp As Range, temp2 As Range 
    Set temp = Range(Cells(1, 1), Cells(10, 1)) 
    Set temp2 = Range(Cells(1, 2), Cells(10, 2)) 
    temp2.Value = temp.Value * 2 
End With 

. 내가 같이가 내 방법이 잘못되었다는 유증이지만 그것을 고칠 수는없는 것 같습니다.

감사합니다. 한 줄에

+0

무엇이 오류입니까? 질문에 추가 하시겠습니까? 고마워요 – bernie

답변

3

ThisWorkbook.Worksheets(sheetname).Range("B1:B10").FormulaR1C1 = "=RC[-1]*2"

+0

+1 좋은 한 라이너 –

+0

고마워요! – user1302187

1

이것은 당신이와 (이 질문에 지정하는 것입니다) 값을 원하는 가정, 코드를 재 작성 얼마나 아니다 공식 :

Dim temp As Variant 
Dim nRows As Long 
Dim iRow As Long 
Dim sheetname As String 

sheetname = "Sheet1" 'or whatever 
nRows = 10 

With ThisWorkbook.Worksheets(sheetname) 
    temp = .Range(.Cells(1, 1), .Cells(nRows, 1)) 'Load range to a variant array 
    For iRow = 1 To nRows 'Loop through array to multiply elements by 2 
     temp(iRow, 1) = temp(iRow, 1) * 2 
    Next iRow 
    .Range(.Cells(1, 2), .Cells(nRows, 2)) = temp 'Write array back to range 
End With 

.Range.Cells. 점이 있어야합니다. 그렇지 않은 경우 속성을 올바르게 한정하지는 않습니다. 그들은 ThisWorkbook.Worksheets(sheetname)을 참조하지 않고 그 순간에 어떤 시트가 활성화되어 있는지를 알 수 있습니다.

두 번째 요점은 전체 배열을 한 번에 (또는 전체 범위) 증식 할 수 없다는 것입니다. 요소를 순환하여 개별적으로 곱해야합니다. 범위를 셀에 반복하는 것보다 훨씬 빠르게 수행하기 때문에 배열에 범위를로드하고 루프를 선택합니다. 이것은 단지 10 개의 세포를 가지고 있다면별로 중요하지 않을 것이지만, 더 많은 세포가 있다면 확실하게 그렇게 할 것입니다.

+0

+1 더 나은 대답; 또한, eluciating 코멘트를 주셔서 감사합니다 – bernie

+0

감사합니다, 매우 유익한! – user1302187