2011-08-25 11 views
0

테이블이 있으며 테이블의 행 수가 알려지지 않았습니다. 사용자가이 테이블의 A 열에 항목을 입력 할 때마다 열 A에 방금 입력 한 항목을 참조하는 수식을 사용하여 테이블의 다른 열을 동적으로 채우고 싶습니다.EXCEL/VBA - 수식을 셀에 동적으로 삽입하십시오.

시트의 행 수가 알려지지 않았기 때문에 B, C, D 등의 열을 수식에 복사하십시오.

이렇게하는 효과적인 방법이 있습니까?

VBA의 onCalculate 및 onChange 이벤트에 코드를 작성하려는 시도는 매우 비효율적이거나 영원한 루프를 초래합니다.

+0

이있어되지 않습니다 .... 개인 서브 Worksheet_Change (ByVal의 다른 이름으로 대상 범위) Target.Column는 = 3 그런 다음 Application.ScreenUpdating 사용 = 거짓 적용합니다. 계산 = xlCalculationManual Sheet2.Cells (Target.Row 5) .Formula 문 = "XXX = (" "XXX" ","& Target.Address & ", E5)" Application.ScreenUpdating 사용 = TRUE Application.Calculation = xlCalculationAutomat ic 최종면 End Sub – stan

+0

원한다면 스스로 응답 할 수 있습니다. –

답변

1

여기 B에서 빈 식을 작성하는 샘플입니다, C 및 D마다 선택이 변경 :에서 ThisWorkbook에서

:

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) 
    Dim oSh As Worksheet, oUsed As Range, oRng As Range 

    Set oSh = Sh 
    Set oUsed = oSh.UsedRange.Columns("B") 

    'only add to blank formulas 
    Set oRng = oUsed.Find("", LookIn:=xlFormulas) 

    Do While Not oRng Is Nothing 
     'B formula 
     oRng.Offset(, 0).FormulaR1C1 = "=RC[-1] + 100" 
     'C formula 
     oRng.Offset(, 1).FormulaR1C1 = "=RC[-1] + 100" 
     'D formula 
     oRng.Offset(, 2).FormulaR1C1 = "=RC[-1] + 100" 
     Set oRng = oUsed.Find("", oRng, xlFormulas) 
    Loop 
End Sub 

이 통합 문서에 에있는 모든 워크 시트를 작동, 따라서 현재 시트를 테스트 할 수 있습니다.

+0

Excel의 속도를 높이기 위해 올바른 열에서 변경이 발생했는지 확인하기 위해이 모든 것을 사용했습니다. 당신의 코드를 감싸지 말아야한다. (타겟, oUsed) Nothing Then .... End If – RonnieDickson

+0

@RonnieDickson - 그런 식으로 생각했지만 대상은 한 셀에서 다른 셀로 이동할 때 대상 셀만 지정한다. . 따라서 셀 A1에서 셀 B25로 이동하면 대상의 주소는 B25이므로 교차에서 나타나지 않습니다 ... A 열의 변경 사항 만 확인하는 방법이 다른지 확실하지 않습니다. 속도를 높이는 또 다른 방법은 화면 업데이트를 사용하지 않는 것입니다. 그러나 이는 과도 할 수 있습니다. – transistor1

2

Excel 2007 또는 Excel 2010을 사용하는 경우 목록 범위를 목록가 자동으로 실행됩니다!
가장 좋은 매크로는 더 매크로

+0

+1이 문제를 해결하는 가장 좋은 방법입니다. – JMax

관련 문제