なずなず VBA教習所~中級者向けサンプルデータ~
おつかれさまです! なずなです。
お金がない!! そうだ、記事を書こう。
と、その前に、Excelファイルの投下テストの記事です。
このくらいをさらっと書くのがしんどい人方向けの記事予定ですよ~
作成したいもの
CSV形式のマスタデータのサンプルを作りたいのです。
社員一覧表のイメージです。
これをプログラムで生成するできるように作成します。
サンプルファイル
どどん!
コード
Option Explicit
Sub サンプルデータの作成()
Dim col As New Collection
Dim mastSH As Worksheet
Set mastSH = ThisWorkbook.Worksheets("マスタ")
Dim i As Long
i = 1
Do While mastSH.Cells(i, 1).Value <> ""
col.Add mastSH.Cells(i, 1).Value
i = i + 1
Loop
Dim sh As Worksheet
Set sh = ThisWorkbook.Worksheets("Sheet1")
'適当に全部消す
sh.Range("A1:Z20000").Clear
'列名を出力
Dim x As Long
For x = 1 To col.Count
sh.Cells(1, x).Value = col(x)
Next
'出力行を指定
Dim inputCnt
inputCnt = ThisWorkbook.Worksheets("説明").Range("C3")
Dim y As Long
Dim no
Dim name As String
Dim X入社日 As Date
'データ出力
For y = 2 To inputCnt + 1
no = y - 1
'No
sh.Cells(y, 1) = no
'社員番号
sh.Cells(y, 2).Value = Format(no, "1000")
'氏名
name = CreateRndName()
sh.Cells(y, 3).Value = name
'メールアドレス
sh.Cells(y, 4).Value = Split(name, " ")(1) & "." & Split(name, " ")(0) & "@sample.com"
'3チームに分ける
sh.Cells(y, 5).Value = Chr((no Mod 3) + 65)
'1月ずつ
X入社日 = #1/1/2019#
sh.Cells(y, 6).Value = DateAdd("m", no - 1, X入社日)
Next
MsgBox "作成完了しました!", vbInformation, "メッセージ"
sh.Activate
End Sub
Function CreateRndName()
Dim str As String
Dim i As Long
For i = 1 To 3
str = str & RndChar
Next
str = str & " "
For i = 1 To 3
str = str & RndChar
Next
CreateRndName = str
End Function
Function RndChar()
Dim cnt
RndChar = Chr(rndom(122, 97))
End Function
Function rndom(max, min)
Randomize
rndom = Int((max - min + 1) * rnd + min)
End Function
使用したものメモ
・VBAでランダム数字
・数字から文字への変換
・コレクション
・Splitでの文字列分割
・日付の計算