뽐뿌

개발자포럼 입니다.

IT 개발자간 정보를 공유하고 논의가 이루어지는 공간입니다.
엑셀 VBA 문제점좀 찾아주세요..ㅜ 11
분류: 질문
이름: 85년생


등록일: 2020-01-05 21:01
조회수: 317 / 추천수: 0





[조건부 샘플링 데이터 구하기]


 


P45:P60의 값이 


1~12개 일 경우 6개의 샘플링 값 선택


13개 이상일 경우 7개의 샘플링 값 선택


 


[문제점]

 


P45:P60의 값이 


 



1. 총 5개 이하일 경우 : 엑셀 멈춤



 



2. 6개 이상일 경우 : 빈 셀이 하나 선택되어 총 샘플링 갯수에 오류를 발생시킴



예를들어 14개의 데이터에 값이 있고 1개의 셀이 비어있다면 7개의 샘플링 값이 선택되어야 하나 빈 셀을 포함해서 총 값이 7개가아닌 6개가 되어버림..



 


 


 


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


VBA CODE


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


 




Sub test()






Range("AT45:AT60").ClearContents






A = "AU44"










If A < 13 Then






Dim rX      As Range: Set rX = [P45:P60]


Dim iCnt    As Long: iCnt = rX.Cells.Count


Dim oDic    As Object: Set oDic = CreateObject("scripting.Dictionary")


Do


    i = Int(Rnd * iCnt + 1)


    v = rX.Cells(i).Value


    If Not oDic.exists(v) Then oDic.Add v, ""






Loop While oDic.Count < 6


Dim rY       As Range: Set rY = [AT45]


For Each k In oDic.keys


rY.Value = k: Set rY = rY.Offset(1)


   


Next










ElseIf A > 12 Then


Dim rA As Range: Set rA = [P45:P60]


Dim iCntA As Long: iCntA = rA.Cells.Count


Dim oDicA As Object: Set oDicA = CreateObject("scripting.Dictionary")


Do






   i = Int(Rnd * iCntA + 1)


   v = rA.Cells(i).Value


   If Not oDicA.exists(v) Then oDicA.Add v, ""






Loop While oDicA.Count < 7


Dim rB As Range: Set rB = [AT45]


For Each A In oDicA.keys


rB.Value = A: Set rB = rB.Offset(1)


        


Next


End If


End Sub


 


 


엑셀파일 주소입니다.


 



https://drive.google.com/file/d/1qT8WYGNTpwrWhfgjHexFn-vsElD8ICle/view?usp=sharing 


 





본 게시글은 작성자에 의해 2020-01-06 07:59:25에 최종 수정되었습니다. (2회)


[ 주소복사 http://www.ppomppu.co.kr/zboard/view.php?id=developer&no=23864 ]

추천 0

다른 의견 0


상대에게 상처를 줄 수 있는 댓글은 삼가주세요. (이미지 넣을 땐 미리 보기를 해주세요.)
직접적인 욕설 및 인격모독성 발언을 할 경우 제재가 될 수 있습니다.
- 미리보기
이모티콘  익명요구    다른의견   
△ 이전글▽ 다음글 -목록보기