휴양소 추첨 비주얼베이직 관련

VBA
작성자
유림
작성일
2023-05-01 16:55
조회
95
엑셀버전 : 엑셀2019

운영체제 : 윈도우10

질문 요약 : 컴파일 오류 해결

안녕하세요! 오빠두에서 도움을 많이 받고 있는 엑셀초보입니다..

이번에 회사 휴양소 추첨 업무를 하고 있는데,, 엑셀 비주얼베이직 도움을 받으려고 하고 있습니다. ChatGPT를 통해서 여기까지 코드를 작성했는데, 막상 실행하면 "컴파일 오류입니다" 라고 뜨네요.... 3시간째 헤매고 있습니다... 도움을 요청드립니다.

 

 

====================

Sub ResortLottery()
'휴양소 리스트 A1:A50
'각 부서별 당첨자 인원 설정
'각 부서별 선택한 휴양소 및 사원명 입력 (부서는 C열, 사원명은 D열, 휴양소는 E열)
'각 휴양소별로 랜덤으로 당첨자 선택, 부서별로 당첨자 인원만큼 선택

Dim resorts As Variant
resorts = Range("A1:A50").Value 'A1:A50에 있는 휴양소 리스트를 변수에 저장

Dim departments As Variant
departments = Array("영업팀", "마케팅팀", "개발팀", "디자인팀", "인사팀") '각 부서를 배열에 저장

Dim winnersPerDepartment As Variant
winnersPerDepartment = Array(1, 1, 1, 1, 1) '각 부서별 당첨자 인원 설정

Dim selectedEmployees As New Collection '선택한 사원과 휴양소를 담을 컬렉션 변수
Dim lastRow As Long
lastRow = Range("C" & Rows.Count).End(xlUp).Row '마지막 행을 찾음
Dim i As Long
For i = 2 To lastRow '각 부서별로 선택한 휴양소와 사원명을 컬렉션에 추가
Dim department As String
department = Range("C" & i).Value
Dim employeeName As String
employeeName = Range("D" & i).Value
Dim resort As String
resort = Range("E" & i).Value
If department <> "" And employeeName <> "" And resort <> "" Then
selectedEmployees.Add Array(department, employeeName, resort) '선택한 휴양소, 사원명, 부서명을 배열로 묶어서 추가
End If
Next i

Dim selectedResorts As New Collection '선택된 휴양소를 담을 컬렉션 변수
For Each Item In selectedEmployees '선택된 휴양소를 컬렉션에 추가
Dim resortName As Variant '변수를 Variant로 변경
resortName = Item(2)
If Not selectedResorts.Contains(resortName) Then
selectedResorts.Add resortName
End If
Next Item

Dim departmentWinners As New Collection '당첨자를 담을 컬렉션 변수
For Each resort In selectedResorts '각 휴양소별로 랜덤으로 당첨자 선택
Dim winners As New Collection
Dim j As Long
For j = 1 To winnersPerDepartment(selectedResorts.IndexOf(resort)) '해당 휴양소의 부서별 당첨자 인원만큼 선택
Dim eligibleEmployees As New Collection '해당 휴양소에서 선택 가능한 사원들을 담을 컬렉션 변수
For Each Item In selectedEmployees '선택한 휴앙소에서 해당 휴양소와 같은 이름의 휴양소를 선택한 사원들을 선택 가능한 사원으로 추가
If Item(2) = resort Then
eligibleEmployees.Add Item
End If
Next Item

If eligibleEmployees.Count > 0 Then '선택 가능한 사원이 있을 경우 랜덤으로 당첨자 선택
Dim randomIndex As Long
randomIndex = Int(Rnd * eligibleEmployees.Count) + 1 '랜덤한 인덱스 선택
Dim winner As Variant
winner = eligibleEmployees(randomIndex)
winners.Add winner
selectedEmployees.Remove randomIndex '이미 당첨된 사원은 다음 추첨에서 제외
End If
Next j

departmentWinners.Add Array(resort, winners) '해당 휴양소의 당첨자를 컬렉션에 추가

Next resort

'결과 출력
Dim resultSheet As Worksheet
Set resultSheet = Sheets.Add(after:=Sheets(Sheets.Count)) '새로운 시트 생성

Dim rowIndex As Long
rowIndex = 1
Dim k As Long
For k = 1 To departmentWinners.Count '각 휴양소별로 결과 출력
resultSheet.Cells(rowIndex, 1).Value = departmentWinners(k)(0) & " 당첨자"
rowIndex = rowIndex + 1
Dim l As Long
For l = 1 To departmentWinners(k)(1).Count '각 부서별로 선택된 당첨자 출력
resultSheet.Cells(rowIndex, 1).Value = departmentWinners(k)(1)(l)(0) & "부서: " & departmentWinners(k)(1)(l)(1) & " (" & departmentWinners(k)(1)(l)(2) & ")"
rowIndex = rowIndex + 1
Next l
Next k

resultSheet.Columns.AutoFit '결과를 자동으로 조정하여 표시
resultSheet.Activate '새로운 시트를 활성화하여 표시
End Sub

 

스크랩
공유
전체 3

  • 2023-05-01 17:16

    @유림 님 Dim resort As String

    이 부분을

    Dim resort As Variant

    로 바꾸면 될겁니다.


    • 2023-05-01 17:29

      @더블유에이 님 답변감사합니다.  변경 시 "개체가 이 속성 또는 메서드를 지원하지 않습니다" 라고 뜹니다...ㅠㅠ

      20230501_172845.png


      • 2023-05-01 18:16

        @유림 님 어느 부분에서 그렇게 뜨는지 모르겠지만..

        For Each 는 Variant 만 사용할 수 있습니다

        For Each 안에 string_resort 라는 변수를 string으로 만들어서 처리해보세요

        string_resont = resort

        이런 형태로 구현하면 됩니다


전체 11,065
번호 카테고리 제목 작성자 작성일 추천 조회
알림
[📚교재 출간 안내] 「진짜쓰는 실무엑셀」 , 드디어 출간되었습니다! (179)
오빠두엑셀 | 2022.02.03 | 추천 469 | 조회 183664
오빠두엑셀 2022.02.03 469 183664
공지사항 공지사항
⭐ [더 나은 커뮤니티 문화를 위한 Q&A 글 작성 규칙] ⭐ (165)
오빠두엑셀 | 2021.10.28 | 추천 220 | 조회 11858
오빠두엑셀 2021.10.28 220 11858
56911 함수/공식
New sumifs로 기간별 합계 질문 드립니다. 엑셀파일
xiezhu | 2023.05.31 | 추천 0 | 조회 19
xiezhu 2023.05.31 - 19
56905 함수/공식
New 합쳐진 문자열이 공백일때는 공백문자열을 제외하고 나타낼 수 있도록 할 수 있을까요 ??? 엑셀파일첨부파일 (1)
순진한사람 | 2023.05.31 | 추천 0 | 조회 29
순진한사람 2023.05.31 - 29
56904 파워쿼리/피벗
New 파워쿼리 또는 함수로 누적 데이터 만드는 방법 엑셀파일첨부파일
디뚜띠 | 2023.05.31 | 추천 0 | 조회 30
디뚜띠 2023.05.31 - 30
56903 문서서식
New 조건부서식 범위가 자꾸 바뀔 때... 첨부파일
yaho**** | 2023.05.31 | 추천 0 | 조회 22
yaho**** 2023.05.31 - 22
56902 구글시트
New 주식 매매일지 평단가 계산 질문 첨부파일
hwan | 2023.05.31 | 추천 0 | 조회 21
hwan 2023.05.31 - 21
56901 함수/공식
New INDEX, MATCH 함수 질문🤚🤚 (1)
보라색양털 | 2023.05.31 | 추천 0 | 조회 21
보라색양털 2023.05.31 - 21
56896 함수/공식
New vslookup 참조를 다른 sheet에 있는 값을 참조 하려고 할 때 나타나는 어려움 엑셀파일 (2)
이상권 | 2023.05.31 | 추천 0 | 조회 36
이상권 2023.05.31 - 36
56894 피벗테이블
New 대시보드, 데이터 추가시 피벗테이블 계속 다시 만들어야하나요?
신안동헬린이 | 2023.05.31 | 추천 0 | 조회 28
신안동헬린이 2023.05.31 - 28
56892 함수/공식
New averageifs 계산이 안되는데...아시는분~ 첨부파일 (2) 답변완료
roadstar | 2023.05.31 | 추천 0 | 조회 25
roadstar 2023.05.31 - 25
56890 함수/공식
New 집계표에 들어갈 함수좀 가르쳐주십시요.
karism**** | 2023.05.31 | 추천 0 | 조회 27
karism**** 2023.05.31 - 27
56888 함수/공식
New 기존 셀값 유지하면서 수식 입력하는 방법 첨부파일 (4) 답변완료
누누가가 | 2023.05.31 | 추천 0 | 조회 53
누누가가 2023.05.31 - 53
56886 함수/공식
New 셀 문자열 중 잘못된 값 골라내는 법 엑셀파일 (1)
욕심없는성공v | 2023.05.31 | 추천 0 | 조회 42
욕심없는성공v 2023.05.31 - 42
56885 피벗테이블
New 엑셀 피벗테이블 질문드립니다. 도저히 모르겠네요ㅠ 첨부파일 (1)
김민석 | 2023.05.31 | 추천 0 | 조회 40
김민석 2023.05.31 - 40
56883 차트/그래프
New 엑셀 차트 데이터관련 질문드립니다 엑셀파일첨부파일
전설 | 2023.05.31 | 추천 0 | 조회 32
전설 2023.05.31 - 32
56882 함수/공식
New 만나이를 이용하여 출생년도를 추출하려면 어떤 함수를 쓰는게 좋을까요? 엑셀파일 (5)
naver_5f055a605ee7d | 2023.05.31 | 추천 0 | 조회 42
naver_5f055a605ee7d 2023.05.31 - 42
56877 함수/공식
New 엑셀 함수 질문드립니다ㅠㅠ 첨부파일 (3) 답변완료
닉으로 | 2023.05.31 | 추천 0 | 조회 36
닉으로 2023.05.31 - 36
56873 문서서식
New 엑셀로 회의 자료를 만들고 싶은데요.
PpPp | 2023.05.31 | 추천 0 | 조회 30
PpPp 2023.05.31 - 30
56870 함수/공식
New 문자가 시작되기 전에 점(마침표) 만 삭제하고 싶어요 엑셀파일 (2) 답변완료
욕심없는성공v | 2023.05.31 | 추천 0 | 조회 38
욕심없는성공v 2023.05.31 - 38
56867 함수/공식
New 액셀 함수 질문 여쭙니다. 엑셀파일 (2)
xiezhu | 2023.05.31 | 추천 0 | 조회 43
xiezhu 2023.05.31 - 43
56862 함수/공식
New 다중조건 함수 (3)
잼잼잼잼 | 2023.05.30 | 추천 0 | 조회 63
잼잼잼잼 2023.05.30 - 63
56851 VBA
New 비품 관리 대장 시트를 만들고 싶은데요,, (1) 답변완료
가득 | 2023.05.30 | 추천 0 | 조회 57
가득 2023.05.30 - 57
56849 파워쿼리/피벗
New 쿼리값 0이 -0으로 표시됩니다.. 첨부파일 (3) 답변완료
yaho**** | 2023.05.30 | 추천 0 | 조회 48
yaho**** 2023.05.30 - 48
56848 함수/공식
New 출석율 계산하는 방법 좀 알려주세요 ㅠㅠ 엑셀파일첨부파일 (1)
Blak case | 2023.05.30 | 추천 0 | 조회 49
Blak case 2023.05.30 - 49
56847 VBA
New VBA 관련 문의드립니다 ㅜㅜ (2)
c571**** | 2023.05.30 | 추천 0 | 조회 51
c571**** 2023.05.30 - 51
56845 문서서식
New 빠른 실행 도구모음 설정 관련 문의
kmh94 | 2023.05.30 | 추천 0 | 조회 36
kmh94 2023.05.30 - 36
56842 문서서식
New 두 파일을 합쳤더니 날짜를 기준으로 필터 정렬이 안되네요 엑셀파일 (2) 답변완료
STEroid | 2023.05.30 | 추천 0 | 조회 38
STEroid 2023.05.30 - 38
56840 함수/공식
New 범위 내 날짜의 근무시간 찾기 첨부파일 (1)
뽀송지콩 | 2023.05.30 | 추천 0 | 조회 45
뽀송지콩 2023.05.30 - 45
56837 파워쿼리/피벗
New 파워쿼리 내에서 덧셈 뺄셈 질문 (3) 답변완료
yaho**** | 2023.05.30 | 추천 0 | 조회 46
yaho**** 2023.05.30 - 46
56834 구글시트
New 데이터 내용에 따라 셀 테두리를 다르게 지정하고 싶습니다. 첨부파일 (1)
구린이 | 2023.05.30 | 추천 0 | 조회 41
구린이 2023.05.30 - 41
56825 함수/공식
New 여러 시트 값 다른 시트에 연결하기 엑셀파일첨부파일
빵코디 | 2023.05.30 | 추천 0 | 조회 47
빵코디 2023.05.30 - 47