반응형
- 개인적으로 필요해서 SPSS의 집단별 통계 기능을 엑셀로 만들고 있는 중이다.
- 이 매크로는 그 과정의 시작 단계라 할 수 있겠다.
- 집단별 변수값에 따라 만들 수 있는 모든 조합을 나열한다.
- 예를 들어, 성별 변수가 남/여, 지역 변수가 서울/수도권/비수도권으로 구분되어 있다면,
- 남-서울, 남-수도권, 남-비수도권, 여-서울, 여-수도권, 여-비수도권 항목을 모두 나열하는 기능이다.
- 사용방법: 1) 조합을 산출할 영역을 지정한다. 2) 매크로를 실행한다. 3) 끝
- 코딩은 공부하는 차원에서 컬렉션을 사용했는데, 그냥 배열변수를 써도 무방하다.
매크로 Output
VBA Code
Option Explicit
Option Base 1
Sub every_case()
Dim oCol() As New Collection
Dim rngSel As Range
Dim i As Long
Dim j As Long
Dim k As Long
Dim m As Long
Dim totalComb As Long
Dim crit As Double
Set rngSel = Selection '선택영역 설정
totalComb = 1
'////// 컬렉션에 데이터를 담는 과정; 배열을 써도 무방함
For j = 1 To rngSel.Columns.Count '열 갯수만큼 루프
ReDim Preserve oCol(j) '열 갯수만큼 컬렉션 동적 생성
For i = 2 To rngSel.Rows.Count '행 갯수만큼 루프; 열머리가 없다면 1부터 시작하도록 변경
If Not IsEmpty(rngSel.Cells(i, j)) Then '비어있는 셀은 제외
oCol(j).Add Item:=rngSel.Cells(i, j) '각 컬렉션에 삽입
End If
Next i
totalComb = totalComb * oCol(j).Count '조합해야 할 개수 산출
Next j
'////// 결과물을 보여줄 시트 생성
With Sheets.Add(, Sheets(Sheets.Count)) '결과를 출력할 시트 생성
.Name = "result"
End With
'////// 조합을 뽑는 과정
crit = totalComb
For j = 1 To rngSel.Columns.Count
For m = 1 To totalComb / crit
For k = 1 To crit
Sheets("result").Cells(crit * (m - 1) + k, j) = oCol(j)(1 + Int((k - 1) / (crit / oCol(j).Count)))
Next k
Next m
crit = crit / oCol(j).Count
Next j
End Sub
매크로 실행 동영상
매크로 예시파일
Copyright (2020) Ruahneuma. All Rights Reserved.
반응형
'VBA Macro > VBA Excel' 카테고리의 다른 글
[엑셀 VBA] 숫자데이터의 구간별 빈도 빠르게 산출하기 (0) | 2021.01.26 |
---|---|
[엑셀 VBA] 가능한 모든 조합 나열하기 (응용하기) (0) | 2021.01.25 |
[엑셀 VBA] 두 단어의 일치도(%) 산출 매크로 #2 (일반화된 방법) (2) | 2020.05.12 |
[엑셀 VBA] 셀 내용 보존하면서 셀 병합하기 (2) | 2018.07.28 |
엑셀에서 특정 문자로 나열된 셀 내용을 새로운 행을 추가하여 구분하기 (0) | 2018.03.09 |