なずなず VBA教習所~中級者向けサンプルデータ~

おつかれさまです! なずなです。

お金がない!! そうだ、記事を書こう。


と、その前に、Excelファイルの投下テストの記事です。

このくらいをさらっと書くのがしんどい人方向けの記事予定ですよ~

作成したいもの

CSV形式のマスタデータのサンプルを作りたいのです。

社員一覧表のイメージです。

画像1


これをプログラムで生成するできるように作成します。


サンプルファイル

どどん!

コード

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での文字列分割

・日付の計算



いいなと思ったら応援しよう!