1. FAQ
  2. 엑셀(Excel)
  3. AfterEffects
  4. Premiere
  5. Photoshop
  6. ETC

이 게시판은 아별닷컴 회원만 질문을 올릴 수 있습니다. 회원에게 주어지는 특권인셈이지요. 회원이 아닌 분들은 열람만 가능합니다.

[레벨:30]아별

2011.11.30 16:47

안녕하세요? 파이스님? ^_^

질문을 읽어보다가.. 간결하다는 단어의 정의를 고민해봤습니다. ㅎㅎ

 

일단..

임의의 8자리 패스워드를 생성하고 싶으신거군요..

답변을 작성하다가.. 그냥 범용성 있는 패스워드 생성기를 만들어봤습니다. ㅎㅎ

http://www.abyul.com/zbxe/101921

 

 

[ 이하는 답변입니다~ ]

 

1. 순환문에는 For문과 Do~While 또는 Do~Until문이 있는데요..

    While이나 Until을 사용할때는 구문 안에 i = i+1처럼.. 단계별로 증가시키는 코드가 필요하지만..

    For문은 For문 자체에 증가시키는 코드가 포함되어 있지요..

    For i =1 To 100 이라는 구문 자체가 i를 1부터 100까지 하나씩 증가시키라는 의미입니다.

    즉.. For문을 사용하실때는 i=i+1을 사용하시면 안됩니다.

 

    파이스님의 코드를 정리해보면 아래와 같습니다.     

Sub 비번생성2()
    Dim i As Long, j As Long
    Dim a As Integer, b As Integer, c As Integer, d As Integer
    Dim e As Integer, f As Integer, g As Integer, h As Integer

    Randomize (1)
    For i = 1 To 100
        a = Int((8 * Rnd) + 1)
        b = Int((9 * Rnd) + 0)
        c = Int((9 * Rnd) + 0)
        d = Int((9 * Rnd) + 0)
        e = Int((9 * Rnd) + 0)
        f = Int((9 * Rnd) + 0)
        g = Int((9 * Rnd) + 0)
        h = Int((9 * Rnd) + 0)
        Cells(i, 1) = (a & b & c & d & e & f & g & h)
    Next i
   
End Sub

 

 

2. 무작위로 알파벳을 조합하는 방법에 대해 궁금하시군요..

 

     일단..

      1) 문자별로 아스키코드가 있다는 것을 아셔야하구요..

      2) 엑셀의 A1셀에 a를 입력했다고 하죠.. B1셀에 =CODE(A1)이라고 입력하면.. 97이라는 숫자가 나옵니다.

          소문자 a의 아스키코드는 97입니다. b는 98, c는 99... 머 이런 식입니다.

           대문자는 좀 앞쪽이죠.. A~Z가 65~90의 코드를 갖습니다. 소문자 a~z는 97~122이구요..

      3) 그렇다면.. A~Z사이의 임의의 문자를 뽑고 싶으면 어떻게 하시겠습니까?

           65~90사이의 숫자를 뽑아서 그 코드를 문자로 전환하는 Chr()함수를 이용하면 되겠죠?

           아래처럼 코딩하시면.. A~Z사이의 알파벳을 뽑아서 8자리를 만들어줍니다.

               For i = 1 To 8
                       strTemp = strTemp & Chr(Int(25 * Rnd + 65))
               Next i

 

3. Int((9 * Rnd) + 0) 구문이 이해가 안되시는군요..

     

      Rnd함수는 0부터 1사이의 실수를 결과값으로 돌려주는데요..

      거기에 9를 곱하면.. 9*Rnd는 0부터 9사이의 값을 갖게 됩니다.

      거기에 0을 더하면.. 머. 여전히 0부터 9사이의 값이겠죠..

      만약 1부터 9까지의 값을 원한다면.. Int((8 * Rnd) + 1)이라고 하면 되겠죠..

      8*Rnd가 0부터 8까지 값을 가지니까요. 0값을 가질때 1을 더하면 1이고.. 8값을 가질때 1을 더하면 9이 돼서.. 1~9

 

      Int()함수는 실수를 가장 가까운 정수로 내림해주는 함수니까..

      3.3324232라는 실수는 3이 되겠고.. 6.9973622라는 실수는 6이 되겠죠..

      그런식입니다. ㅎㅎ

 

도움이 되셨기를..

 

 

아참..

제가 만든 아별패스워드생성기의 VBA암호는 abyul.com 입니다.

밑에 쪼그맣게 적는 이유는.. 댓글을 얼마나 성의 있게 읽어보는지를 테스트하는 것이지요.. 후후..

 

 

 

중복되지 않는 값들을 만들때는.. 컬렉션이라는 것을 이용합니다.

    Set x = New Collection

    x.Add xMember, xMember

컬렉션 x의 구성원들은 각자 고유한 문자열 값을 가져야하는데..

기존의 있는 것과 같은 항목을 Add하려면 에러가 납니다.

에러가 안 날때까지 계속 새로운 값을 추가하면서 100개가 될때까지 돌리는 방법을 사용했습니다.

 

컬렉션 개체는 설명하자면 길어지니.. 제가 만든 아별패스워드생성기의 소스를 참고하시고..

자세한 것은 엑사모나 구글에서 컬렉션을 검색해서 공부하시기 바랍니다.

 

문서 첨부 제한 : 0Byte/ 2.00MB
파일 제한 크기 : 2.00MB (허용 확장자 : *.*)