랜덤값

가끔 뽑기를 엑셀로 만들때가 있다.
워크시트 함수로 만들면, 랜덤함수는 셀계산을 매번하는데, VBA로 만들면, 이를 방지할 수 있다.
예를 들어, 몇 개의 숫자가 있고, 이를 임의로 가져오는 방법을 함수와 VBA로 만들어 봤다.

myimg



여러가지 방법이 있겠으나, 함수로 쓰면 대략 이런 모양이 되지 않을까?
="선택한 값은 "& TEXT(OFFSET(D5,0,RANDBETWEEN(0,10)),"#,###") &" 입니다."

이번에는 VBA로 RANDBEETWEEN 함수를 OFFSET과 함께 사용했다. 별 건 없다.
여기에 기준셀을 선택하는 인풋창을 넣어두면 더 사용하기 편할 수 있겠지만 귀찮아서 패스.

Sub choice_value()

Dim x As Integer
Dim y As Integer
Dim a As String
Dim b As String
Dim CL As Range

x = 0

Set CL = Range("D5")

y = CL.End(xlToRight).Column - CL.Column

a = "선택한 값은 "
b = " 입니다."

Range("d9").Value = a & Format(CL.Offset(x, WorksheetFunction.RandBetween(x, y)), "#,###") & b

End Sub


날짜 자동 기재, 연습용 더미 데이터 생성

myimg



아마, 반복적으로 하는 작업 중 하나가, 날짜 열을 생성하는 것이다. 대부분 시작일자를 치고, 드래그하여 만들텐데, 귀찮으니, VBA로 만들어 보자.

방법은 여러가지가 있겠지만, 내가 하고 싶은건 시작일자와 종료일자를 입력하면, 아래쪽으로 자동입력 되는 형태이다.
아래 이미지과 같은 방식으로

myimg



날짜가 입력되었으면, 우측에 연습용 데이터를 넣어본다. 내가 할 방식은 작은 수와 큰 수를 넣으면, 랜덤방식으로 정수를 넣는 것이다. 아래와 같이 더미데이터가 랜덤으로 생성된다.

myimg


myimg



코드는 아래와 같다. 취향과 용도에 따라서, 바꿔서 사용하면 되겠다.

Sub inputRandomValue()

Dim a As Integer
Dim b As Integer
Dim c As Date

myMenu = Application.InputBox("순차날짜 = 1 / 랜덤정수 = 2")

If myMenu = 2 Then

    Set myrng = Application.InputBox("영역을선택하세요", , , , , , , 8)
    a = Application.InputBox("시작숫자를 정수로 입력하세요")
    b = Application.InputBox("마지막숫자를 정수로 입력하세요")
    If a < b Then
        For x = 1 To myrng.Count
            myrng(x) = Application.WorksheetFunction.RandBetween(a, b)
        Next x
        GoTo dd:
    Else
       MsgBox ("시작숫자가 마지막숫자보다 큼")
    End If

ElseIf myMenu = 1 Then

    On Error GoTo ee:
    c = Application.InputBox("시작일자를 날짜로 입력하세요, YYYY-MM-DD")
    d = Application.InputBox("종료일자를 날짜로 입력하세요, YYYY-MM-DD")

    If c < d Then
        diff = DateDiff("d", c, d)
        rowNow = ActiveCell.Row
        colNow = ActiveCell.Column

        For y = 0 To diff
             Cells(rowNow + y, colNow) = DateAdd("d", y, c)
        Next y

        Columns(colNow).AutoFit
    Else
       MsgBox ("종료일자가 시작일자보다 큼")
    End If

    GoTo dd:

Else

GoTo ee:

End If

ee:

MsgBox "똑바로 입력하세요"

dd:

MsgBox "입력완료"

End Sub


물론, 근본은 없는 코드이다.

끝.