Excel에서 범위의 각 행을 반복합니다.


116

이것은 내장 기능이 있다고 확신하는 것들 중 하나입니다 (그리고 과거에 그것을 들었을 수도 있습니다).하지만 기억하기 위해 머리를 긁적입니다.

Excel VBA를 사용하여 다중 열 범위의 각 행을 어떻게 반복합니까? 내가 검색 한 모든 자습서는 1 차원 범위를 통해 작업하는 것에 대해서만 언급하는 것 같습니다.


답변:


150
Dim a As Range, b As Range

Set a = Selection

For Each b In a.Rows
    MsgBox b.Address
Next

149

이 같은:

Dim rng As Range
Dim row As Range
Dim cell As Range

Set rng = Range("A1:C2")

For Each row In rng.Rows
  For Each cell in row.Cells
    'Do Something
  Next cell
Next row

8

이것을 우연히 발견하고 내 해결책을 제안 할 것이라고 생각했습니다. 나는 일반적으로 다중 차원 배열에 범위를 할당하는 내장 기능을 사용하는 것을 좋아합니다 (제 생각에는 JS 프로그래머이기도합니다).

나는 자주 다음과 같은 코드를 작성합니다.

Sub arrayBuilder()

myarray = Range("A1:D4")

'unlike most VBA Arrays, this array doesn't need to be declared and will be automatically dimensioned

For i = 1 To UBound(myarray)

    For j = 1 To UBound(myarray, 2)

    Debug.Print (myarray(i, j))

    Next j

Next i

End Sub

변수에 범위를 할당하는 것은 VBA에서 데이터를 조작하는 매우 강력한 방법입니다.


나는이 방법이 가장 좋다!
아토스

2
선호하는 두 가지 주요 이점 : 1) 배열 방법이 항상 범위를 반복하는 보다 빠릅니다 . 2) 간단하고 양방향으로 사용하고 몇 가지 계산 후에 배열을 다시 쓸 수 있습니다 Range("A1:D4") = myarray. 참고 : Dim myarray 변형으로; 기본적으로 1 기반 2dim 배열 이라는 사실에주의하십시오
TM

7

루프에서는 항상 Cells다음과 같이 R1C1 참조 메서드 를 사용하여 클래스 를 사용하는 것을 선호합니다 .

Cells(rr, col).Formula = ...

이것은 빠르고 쉽게 날 수 있습니다 루프 이상 범위 쉽게 세포의 :

Dim r As Long
Dim c As Long

c = GetTargetColumn() ' Or you could just set this manually, like: c = 1

With Sheet1 ' <-- You should always qualify a range with a sheet!

    For r = 1 To 10 ' Or 1 To (Ubound(MyListOfStuff) + 1)

        ' Here we're looping over all the cells in rows 1 to 10, in Column "c"
        .Cells(r, c).Value = MyListOfStuff(r)

        '---- or ----

        '...to easily copy from one place to another (even with an offset of rows and columns)
        .Cells(r, c).Value = Sheet2.Cells(r + 3, 17).Value


    Next r

End With
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.