휴양소 추첨 비주얼베이직 관련
안녕하세요! 오빠두에서 도움을 많이 받고 있는 엑셀초보입니다..
이번에 회사 휴양소 추첨 업무를 하고 있는데,, 엑셀 비주얼베이직 도움을 받으려고 하고 있습니다. 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
번호 | 카테고리 | 제목 | 작성자 | 작성일 | 추천 | 조회 |
[📚교재 출간 안내] 「진짜쓰는 실무엑셀」 , 드디어 출간되었습니다! (179)
![]() ![]() |
![]() ![]() |
2022.02.03 | 469 | 183664 | ||
공지사항 | 공지사항 |
⭐ [더 나은 커뮤니티 문화를 위한 Q&A 글 작성 규칙] ⭐
(165)
오빠두엑셀
|
2021.10.28
|
추천 220
|
조회 11858
|
![]() ![]() |
2021.10.28 | 220 | 11858 |
56911 | 함수/공식 |
New sumifs로 기간별 합계 질문 드립니다.
![]() ![]() |
![]() |
2023.05.31 | - | 19 |
56905 | 함수/공식 |
New 합쳐진 문자열이 공백일때는 공백문자열을 제외하고 나타낼 수 있도록 할 수 있을까요 ???
![]() ![]() ![]() |
![]() |
2023.05.31 | - | 29 |
56904 | 파워쿼리/피벗 |
New 파워쿼리 또는 함수로 누적 데이터 만드는 방법
![]() ![]() ![]() |
![]() |
2023.05.31 | - | 30 |
56903 | 문서서식 |
New 조건부서식 범위가 자꾸 바뀔 때...
![]() ![]() |
![]() |
2023.05.31 | - | 22 |
56902 | 구글시트 |
New 주식 매매일지 평단가 계산 질문
![]() ![]() |
![]() |
2023.05.31 | - | 21 |
56901 | 함수/공식 |
New INDEX, MATCH 함수 질문🤚🤚
(1)
![]() |
![]() |
2023.05.31 | - | 21 |
56896 | 함수/공식 |
New vslookup 참조를 다른 sheet에 있는 값을 참조 하려고 할 때 나타나는 어려움
![]() ![]() |
![]() |
2023.05.31 | - | 36 |
56894 | 피벗테이블 |
New 대시보드, 데이터 추가시 피벗테이블 계속 다시 만들어야하나요?
![]() |
![]() |
2023.05.31 | - | 28 |
56892 | 함수/공식 |
New averageifs 계산이 안되는데...아시는분~
![]() ![]() |
![]() |
2023.05.31 | - | 25 |
56890 | 함수/공식 |
New 집계표에 들어갈 함수좀 가르쳐주십시요.
![]() |
![]() |
2023.05.31 | - | 27 |
56888 | 함수/공식 |
New 기존 셀값 유지하면서 수식 입력하는 방법
![]() ![]() |
![]() |
2023.05.31 | - | 53 |
56886 | 함수/공식 |
New 셀 문자열 중 잘못된 값 골라내는 법
![]() ![]() ![]() |
![]() ![]() |
2023.05.31 | - | 42 |
56885 | 피벗테이블 |
New 엑셀 피벗테이블 질문드립니다. 도저히 모르겠네요ㅠ
![]() ![]() |
![]() |
2023.05.31 | - | 40 |
56883 | 차트/그래프 |
New 엑셀 차트 데이터관련 질문드립니다
![]() ![]() ![]() |
![]() |
2023.05.31 | - | 32 |
56882 | 함수/공식 |
New 만나이를 이용하여 출생년도를 추출하려면 어떤 함수를 쓰는게 좋을까요?
![]() ![]() |
![]() |
2023.05.31 | - | 42 |
56877 | 함수/공식 |
New 엑셀 함수 질문드립니다ㅠㅠ
![]() ![]() |
![]() |
2023.05.31 | - | 36 |
56873 | 문서서식 |
New 엑셀로 회의 자료를 만들고 싶은데요.
![]() |
![]() |
2023.05.31 | - | 30 |
56870 | 함수/공식 |
New 문자가 시작되기 전에 점(마침표) 만 삭제하고 싶어요
![]() ![]() ![]() |
![]() ![]() |
2023.05.31 | - | 38 |
56867 | 함수/공식 |
New 액셀 함수 질문 여쭙니다.
![]() ![]() |
![]() |
2023.05.31 | - | 43 |
56862 | 함수/공식 |
New 다중조건 함수
(3)
![]() |
![]() |
2023.05.30 | - | 63 |
56851 | VBA |
New 비품 관리 대장 시트를 만들고 싶은데요,,
(1)
답변완료
![]() |
![]() |
2023.05.30 | - | 57 |
56849 | 파워쿼리/피벗 |
New 쿼리값 0이 -0으로 표시됩니다..
![]() ![]() |
![]() |
2023.05.30 | - | 48 |
56848 | 함수/공식 |
New 출석율 계산하는 방법 좀 알려주세요 ㅠㅠ
![]() ![]() ![]() |
![]() |
2023.05.30 | - | 49 |
56847 | VBA |
New VBA 관련 문의드립니다 ㅜㅜ
(2)
![]() |
![]() |
2023.05.30 | - | 51 |
56845 | 문서서식 |
New 빠른 실행 도구모음 설정 관련 문의
![]() |
![]() |
2023.05.30 | - | 36 |
56842 | 문서서식 |
New 두 파일을 합쳤더니 날짜를 기준으로 필터 정렬이 안되네요
![]() ![]() |
![]() |
2023.05.30 | - | 38 |
56840 | 함수/공식 |
New 범위 내 날짜의 근무시간 찾기
![]() ![]() |
![]() |
2023.05.30 | - | 45 |
56837 | 파워쿼리/피벗 |
New 파워쿼리 내에서 덧셈 뺄셈 질문
(3)
답변완료
![]() |
![]() |
2023.05.30 | - | 46 |
56834 | 구글시트 |
New 데이터 내용에 따라 셀 테두리를 다르게 지정하고 싶습니다.
![]() ![]() |
![]() |
2023.05.30 | - | 41 |
56825 | 함수/공식 |
New 여러 시트 값 다른 시트에 연결하기
![]() ![]() ![]() |
![]() |
2023.05.30 | - | 47 |
@유림 님 Dim resort As String
이 부분을
Dim resort As Variant
로 바꾸면 될겁니다.
@더블유에이 님 답변감사합니다. 변경 시 "개체가 이 속성 또는 메서드를 지원하지 않습니다" 라고 뜹니다...ㅠㅠ
@유림 님 어느 부분에서 그렇게 뜨는지 모르겠지만..
For Each 는 Variant 만 사용할 수 있습니다
For Each 안에 string_resort 라는 변수를 string으로 만들어서 처리해보세요
string_resont = resort
이런 형태로 구현하면 됩니다