Sub Test()
Dim Rng As Range
Dim Var()
Dim i As Long
Dim ii As Long
Dim j As Long
Dim X As New Collection
With Sheet1
.Range("i7:k1048576").Clear
Set Rng = .Range(.Range("b7"), .Cells(Rows.Count, 2).End(xlUp))
End With
For i = 1 To ActiveSheet.Range("f7").Value * 100
'== f7셀 값까지 i를 반복한다는 알겠는데요 *100은 왜 하는 것인지 이해가 안됩니다.
On Error Resume Next
j = Application.WorksheetFunction.RandBetween(1, Rng.Cells.Count)
X.Add Rng.Cells(j), CStr(Rng.Cells(j)) '== 간단하게 워크시트함수로 해결하셨다니..ㅠㅠ
If Err.Number <> 457 Then '==여기 if절이 의미하는 것은 무엇인지 이해가 안됩니다. 중복값을 찾는거 같은데.. 어떻게 저런 문구가 나오는건지요...
ii = ii + 1
ReDim Preserve Var(1 To ActiveSheet.Range("f7").Value, 1 To 3)
Var(ii, 1) = ii
Var(ii, 2) = Rng.Cells(j)
Var(ii, 3) = Rng.Cells(j).Offset(, 1)
End If
On Error Resume Next
If ii = ActiveSheet.Range("f7").Value Then Exit For
Next i
ActiveSheet.Range("i7").Resize(ii, 3) = Var
On Error GoTo 0
End Sub
제가 복잡하게 생각한걸 생각보다 간단하게 푸셨네요.. ㅠㅠ 부럽습니다..
얼른 열심히 배우겟습니다. 감사합니다^^
첫댓글 안녕하세요? [히노이]님...
*100은 중복되지 않는 값을 찾기 위해 여러번 순환하기 위함입니다.
만약 데이터가 적어서 F7셀값만큼이 나오지 않으면 무한루프에 빠질 우려가 있어 for 문을 이용한 겁니다.
err.number <> 457 이라면 문구는 x.add rng.cells(j), cstr(rng.cells(j)) 했을때 만약 중복된 값이 추가되면
457 오류가 생기는데 해당 오류가 생기지 않는다면 중복되지 않는 값이므로 그리 처리한 것입니다.
그래서 on error resume next 와 on error goto 0 문을 삽입한 거죠...
그럼 잘 해결되시길... ^^*
친절하신 설명감사드립니다. ㅎㅎ 좀 더 공부해보겠습니다!!