【ExcelVBA】셀에 대한 For Each의 순서
6512 단어 VBA신인 프로그래머 응원ExcelVBA초보자용
For Each로 셀 처리
VBA의 For 문장은 두 가지가 있습니다.
For カウンタ変数 = 開始 To 終了
인덱스를 지정할 필요가 없으면, 기술이 간결해지기 때문에 상기 2.를 추천하고 싶은 곳입니다.
그
For Each 要素の変数 In 配列やリスト
루프입니다만, 워크 시트상의 셀을 처리하는 경우, 모르면 「왜??」가 되는 거동이 있으므로 정리해 둡니다. 특히 다른 언어와 저그 배열에 익숙한 사람.… 행 단위나 열 단위로 루프하는 쪽이 많다고 생각하기 때문에, 별로 필요가 없는 지식일지도 모릅니다만.
샘플 데이터
For Each
데이터를 설정 중입니다.
샘플 프로그램
샘플 데이터 범위의 셀 값을 Range("A1:C2")
로 차례로 "/"단락으로 결합해 가고, For Each
로 결과를 이미디에이트 윈도우에 출력합니다.
' 処理対象の指定方法によってFor Eachの順番が違う
Sub TestOrder()
' Rangeで読み込み
Dim str As String: str = ""
Dim area As Range: Set area = Range("A1:C2")
Dim cell As Variant: For Each cell In area
str = str & IIf(Len(str) > 0, "/", "") & cell.Value
Next
Debug.Print " Range: " & str
' 二次元配列で読み込み
str = ""
For Each cell In area.Value
str = str & IIf(Len(str) > 0, "/", "") & cell
Next
Debug.Print " Multidimentional: " & str
' 配列をtranspose関数で行列を入れ替えるとRangeと同じ順番に
str = ""
For Each cell In WorksheetFunction.Transpose(area.Value)
str = str & IIf(Len(str) > 0, "/", "") & cell
Next
Debug.Print "Transpose multidimentional: " & str
End Sub
실행 결과
Debug.print
로 그대로 For Each
로 지정한 경우와 샘플 데이터의 범위를 배열에 격납하고 나서 지정했을 경우에, 처리하는 셀의 순서가 바뀝니다.
Range라면 행 단위, 배열에 격납한 경우라면 열 단위가 됩니다. 처음에는 깜짝 놀란다.
Range: 陸/海/空/梅/竹/松
Multidimentional: 陸/梅/海/竹/空/松
Transpose multidimentional: 陸/海/空/梅/竹/松
배열에 격납했을 경우는 Range
2차원 배열은 (1, 1)
로 처리하면, 1차원째×2차원째가 아니라 2차원째×1차원째입니다…
아마 3차원 이상의 배열도 차원이 큰 순서로 처리한다고 생각한다. 확인하지 않았지만.
배열의 내용
셀을 Variant 형식의 배열에 저장하면 다음과 같이 저장됩니다.
첫 번째 차원은 행이고 두 번째 차원은 열의 다차원 배열입니다.
위의 배열에 대해 종횡을 변환하는 워크시트 함수의 (1, 2)
를 사용하면 다음과 같이 변환됩니다.
2차원째×1차원째로 처리하므로, Range를 그대로 지정했을 때와 같은 순서가 됩니다.
감각적으로는 행×열이 확실히 옵니다…
Cells 속성의 인수도 (1, 3)
그러나 첫 번째 인수의 행 x 두 번째 인수의 열의 이중 루프가 떠오르기 쉽지 않습니까?
(다른 언어로) 저그 배열을 익숙해지면, 외측의 작은 차원 → 안쪽의 큰 차원의 이미지가 될 생각이므로, 기억해 두면 좋을지도입니다.
Java로 POI를 사용해 Excel Fuck 할 때 뭔가, getRow는 있어도 getColumn적인 것이 없기 때문에, 기본이 행 베이스의 처리가 됩니다. (최신판은 모르지만)
VBA의 다차원 배열은 (1, 1)
Reference
이 문제에 관하여(【ExcelVBA】셀에 대한 For Each의 순서), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/11295/items/524554a5397f20c60fd6
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
샘플 데이터 범위의 셀 값을
Range("A1:C2")
로 차례로 "/"단락으로 결합해 가고, For Each
로 결과를 이미디에이트 윈도우에 출력합니다.' 処理対象の指定方法によってFor Eachの順番が違う
Sub TestOrder()
' Rangeで読み込み
Dim str As String: str = ""
Dim area As Range: Set area = Range("A1:C2")
Dim cell As Variant: For Each cell In area
str = str & IIf(Len(str) > 0, "/", "") & cell.Value
Next
Debug.Print " Range: " & str
' 二次元配列で読み込み
str = ""
For Each cell In area.Value
str = str & IIf(Len(str) > 0, "/", "") & cell
Next
Debug.Print " Multidimentional: " & str
' 配列をtranspose関数で行列を入れ替えるとRangeと同じ順番に
str = ""
For Each cell In WorksheetFunction.Transpose(area.Value)
str = str & IIf(Len(str) > 0, "/", "") & cell
Next
Debug.Print "Transpose multidimentional: " & str
End Sub
실행 결과
Debug.print
로 그대로 For Each
로 지정한 경우와 샘플 데이터의 범위를 배열에 격납하고 나서 지정했을 경우에, 처리하는 셀의 순서가 바뀝니다.
Range라면 행 단위, 배열에 격납한 경우라면 열 단위가 됩니다. 처음에는 깜짝 놀란다.
Range: 陸/海/空/梅/竹/松
Multidimentional: 陸/梅/海/竹/空/松
Transpose multidimentional: 陸/海/空/梅/竹/松
배열에 격납했을 경우는 Range
2차원 배열은 (1, 1)
로 처리하면, 1차원째×2차원째가 아니라 2차원째×1차원째입니다…
아마 3차원 이상의 배열도 차원이 큰 순서로 처리한다고 생각한다. 확인하지 않았지만.
배열의 내용
셀을 Variant 형식의 배열에 저장하면 다음과 같이 저장됩니다.
첫 번째 차원은 행이고 두 번째 차원은 열의 다차원 배열입니다.
위의 배열에 대해 종횡을 변환하는 워크시트 함수의 (1, 2)
를 사용하면 다음과 같이 변환됩니다.
2차원째×1차원째로 처리하므로, Range를 그대로 지정했을 때와 같은 순서가 됩니다.
감각적으로는 행×열이 확실히 옵니다…
Cells 속성의 인수도 (1, 3)
그러나 첫 번째 인수의 행 x 두 번째 인수의 열의 이중 루프가 떠오르기 쉽지 않습니까?
(다른 언어로) 저그 배열을 익숙해지면, 외측의 작은 차원 → 안쪽의 큰 차원의 이미지가 될 생각이므로, 기억해 두면 좋을지도입니다.
Java로 POI를 사용해 Excel Fuck 할 때 뭔가, getRow는 있어도 getColumn적인 것이 없기 때문에, 기본이 행 베이스의 처리가 됩니다. (최신판은 모르지만)
VBA의 다차원 배열은 (1, 1)
Reference
이 문제에 관하여(【ExcelVBA】셀에 대한 For Each의 순서), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/11295/items/524554a5397f20c60fd6
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Range: 陸/海/空/梅/竹/松
Multidimentional: 陸/梅/海/竹/空/松
Transpose multidimentional: 陸/海/空/梅/竹/松
셀을 Variant 형식의 배열에 저장하면 다음과 같이 저장됩니다.
첫 번째 차원은 행이고 두 번째 차원은 열의 다차원 배열입니다.
위의 배열에 대해 종횡을 변환하는 워크시트 함수의
(1, 2)
를 사용하면 다음과 같이 변환됩니다.2차원째×1차원째로 처리하므로, Range를 그대로 지정했을 때와 같은 순서가 됩니다.
감각적으로는 행×열이 확실히 옵니다…
Cells 속성의 인수도
(1, 3)
그러나 첫 번째 인수의 행 x 두 번째 인수의 열의 이중 루프가 떠오르기 쉽지 않습니까?(다른 언어로) 저그 배열을 익숙해지면, 외측의 작은 차원 → 안쪽의 큰 차원의 이미지가 될 생각이므로, 기억해 두면 좋을지도입니다.
Java로 POI를 사용해 Excel Fuck 할 때 뭔가, getRow는 있어도 getColumn적인 것이 없기 때문에, 기본이 행 베이스의 처리가 됩니다. (최신판은 모르지만)
VBA의 다차원 배열은
(1, 1)
Reference
이 문제에 관하여(【ExcelVBA】셀에 대한 For Each의 순서), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/11295/items/524554a5397f20c60fd6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)