2013-02-18 5 views
2

저는 VBA에 익숙하지 않으며 매우 간단하지만 원하는대로 처리 할 수 ​​없습니다.변수가있는 VBA 함수의 셀 값 사용

큰 (333x333) 빈 (0으로 가득) 스프레드 시트의 셀을 자동으로 수정해야합니다.

별도의 스프레드 시트에 수정하려는 모든 셀의 행과 열이 있습니다. (5000 개)

for 루프가이 용도로 적합하다고 보입니다.

다음은 내 매크로 코드입니다. 문제는 마지막 줄 앞에 나타납니다. 내 오류가 구문 오류라고 생각 세포 (VAL1, val2만큼) ALL 기타 사항 서보 -OFF

:

Dim val1 As String, val2 As String, i As Integer 

For i = 1 To 333 

    Sheets("Feuil2").Activate 
    ActiveSheet.Cells(i, 1).Select 

    val1 = Cells(i, 1).Value 
    val2 = Cells(i, 2).Value 

Sheets("Classeur2.csv").Select 
Cells(val1, val2).Select 

ActiveCell.FormulaR1C1 = "1" 

Next i 

문제를 일으키는 줄은 하나입니다. 그러나 나는 두 변수 "val1"과 "val2"의 앞이나 뒤에 추가해야 할 것을 찾을 수 없다.

당신은 어떻게 생각하십니까?

도움을 주셔서 감사합니다. Nicolas.

편집

내 문제는 이제 해결 :

첫 번째 대답은 내가 남자 내 매크로 작업에 필요한 정확히입니다. 두 번째 대답은 적절하고 빠른 방법입니다.

답변

3

VBA를 사용하는 경우 시트 또는 셀을 활성화하거나 선택할 필요가 없습니다. 직접 액세스 할 수 있습니다. 코드 :

Dim rng As Range 
For Each rng In Sheets("Feuil2").Range("A1:A333") 
    Sheets("Classeur2.csv").Cells(rng.Value, rng.Offset(, 1).Value) = "1" 
Next rng 

은 조의 코드와 동일한 결과를 생성합니다.

어떤 이유로 시트를 전환해야하는 경우 매크로 시작 부분에 Application.ScreenUpdating = False을 사용하고 마지막에는 Application.ScreenUpdating=True을 사용하십시오. 이렇게하면 화면 깜박임이 제거되고 실행 속도가 빨라집니다.

+0

감사합니다 피터, 알아두면 좋을 것 같습니다. 다음 번에 시도해 보겠습니다. –

+0

음, 큰 고마워! 오늘 저는 5000 라인을 고려하기 위해 매크로를 확장해야했습니다. 첫 번째 3000 라인을 통과하는 데 20 분 이상 걸렸습니다. 나는 매크로를 멈추고 솔루션을 시험해야했기 때문에 그것을 안다. "Range"표기법을 이해하기 위해이 20 분을 사용했습니다. 방법은 더 빠릅니다 (지금은 minut에 대해). –

+0

'Application.ScreenUpdating = False'와'Application.Calculation = xlCalculationManual'을 삽입하여 속도를 더욱 높일 수 있습니다! 매크로의 끝에서'Application.ScreenUpdating = False'와'Application.Calculation = xlCalculationAutomatic'으로 다시 설정하십시오 :-) –

0

문자열이 아닌 정수를 인수로 사용하는 셀의 인수로 사용할 VAL1 및 VAL2는 문자열이 아닌 정수로 희미하게 표시해야합니다.

Dim val1 As Integer, val2 As Integer, i As Integer 

For i = 1 To 333 

    Sheets("Feuil2").Activate 
    ActiveSheet.Cells(i, 1).Select 

    val1 = Cells(i, 1).Value 
    val2 = Cells(i, 2).Value 

Sheets("Classeur2.csv").Select 
Cells(val1, val2).Select 

ActiveCell.FormulaR1C1 = "1" 

Next i 
+0

또한이 루프를 FOR EACH 루프로 사용해 볼 수도 있습니다. 큰 차이는 아니지만 조금 더 읽기 쉽습니다. – Joe

+0

감사합니다. 예상대로 작동했습니다 :) –