【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: 陸/海/空/梅/竹/松
배열에 격납했을 경우는 Range2차원 배열은 (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: 陸/海/空/梅/竹/松
배열에 격납했을 경우는 Range2차원 배열은 (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.)