2017-01-13 1 views
0

설문 조사 결과를 다운로드하여 Excel에 저장했습니다.루프마다 IF 문을 열

이 매크로를 "A"열에 적용 할 수 있습니다.

Private Sub CommandButton1_Click() 

counter = 2 'moves output 

For Each n In [A7:A50] 'loops through cell in specified range 

    If n < 400 Then 
     Sheets("Output").Cells(counter, "B") = 0 'Output to other sheet, = points awarded 
    ElseIf n > 400 Then 
     Sheets("Output").Cells(counter, "B") = 3 'Output to other seet, = points awarded 
    End If 

    counter = counter + 1 'moves counter up 1 

Next 

End Sub 

"B-R"은 모두 "A"칼럼과 동일한 조건을 갖는다. 대신 그냥 "A"및 출력 열 전환과 반복이 코드

Sheets("Output").Cells(counter, "B") = 3 'Output to other seet, = points awarded 

를 입력하는 것이 가능 루프 내 카운터에 있고 내 if 문.

내 스크립트는 "결과 워크 시트"의 A7 : A50 열을보고 "출력 워크 시트"의 B 열에 점을 생성합니다.

열 B (결과 워크 시트)에서 열 C로 출력 한 다음 결과 워크 시트 C 열을보고 결과 D 열 (출력 워크 시트)로 출력 할 수 없습니다.).

+0

중첩 된 루프 (For ... For ... Next ... Next) - 열에는 하나, 행에는 하나를 사용하고 루프 카운터에 따라 Cells()의 두 값을 설정하십시오. – SMM

답변

1

어쩌면 이것은 당신을 도울 것입니다 : R과 열 각각에 대해 매크로를 적용

Private Sub CommandButton1_Click() 

Dim rng As Range 
Dim i As Integer 

Set rng = Range("A:R") ' define your range 

For i = 1 To rng.Columns.Count ' loop through the columns 

    counter = 2 'moves output 

    For Each n In Range(Cells(7, i), Cells(50, i)) 'loops through cell in specified column i 

    If n < 400 Then 
     Sheets("Output").Cells(counter, i + 1) = 0 'Output to other sheet, = points awarded 
    ElseIf n > 400 Then 
     Sheets("Output").Cells(counter, i + 1) = 3 'Output to other seet, = points awarded 


    End If 

    counter = counter + 1 'moves counter up 1 

    Next 
Next i 

End Sub 

나는 범위 A의 각 열을 통과 루프를 추가했습니다. > 업데이트 열 "B",

열 "B"를 평가 - -> 업데이트

열 "A"를 평가 : 결과가 원하는 컬럼에 적용 할 수 있도록 나는 경우 문에서 "B"를 대체했다 열 "C"...

이 방법이 도움이됩니까?

+0

안녕하세요. 가장 효과적이었습니다. 정말 고마워요. 나는 단지 며칠 동안 VBA로 일해 왔으며 원래의 게시물까지만 갈 수있었습니다. – jcaud3

+0

문제 없습니다, 나는 초보자이기도하므로 투쟁을 알고 있습니다. 해피 내가 도울 수있어 :) – Wujaszkun

+0

당신은 어떤 자원을 사용 했습니까? 다음 단계로이 매크로를 다른 변수로 확장하려고합니다. 기본적으로 R, S-AB가 새로운 유형의 질문이되고 iF 문을 변경해야합니다. – jcaud3

1

수정 된 답변을 작성하여 문제를 해결하십시오. 내가 보는 몇 가지가 있습니다.

먼저, 결과가 들어가기 전에 각 시트를 활성화해야한다고 생각합니다. 둘째, 출력을 넣을 셀을 식별 한 후 .value를 사용하십시오. 셋째 셀() 함수는 정수를 사용하므로 "B"는 2 여야합니다.

다음 코드를 사용하여 문제가 없는지 확인해보십시오.



Private Sub CommandButton1_Click() 
    Dim r as Long 
    Dim c as Long 
    Dim lastrow as Integer 
    Dim lastcol as Integer 
    Dim cpath as String 

    cpath = Worksheets("SHEETNAME") 'less typing later on 
    cpath2 = Worksheets("Output") 
    lastrow = WorksheetFunction.CountA(Range("A:A")) 
    lstcolm = WorksheetFunction.CountA(cpath.Rows(1).EntireRow) 
    cpath.Cells(2,1).Activate 'assuming you have a header row 


    For c = 1 to lastcol 
    For r = 2 to lastrow 

If cpath.cells(r,c).value < 400 Then 

cpath2.Activate 
    cpath2.Cells(r, 2).value = 0 
ElseIf n > 400 Then 

cpath2.Activate 
    cpath2.Cells(r, 2).value = 3 
End If 

cpath.activate 

next r 
next c 

End Sub 
+0

이 사이트 .. & & gt 승리를 위해. – mkinson