2012/07/21

VBAのTypeステートメント

後輩指導してたらTypeステートメントなんてのに初めて気がついたのでメモ。

Typeステートメントはユーザー定義型が作れる模様。.Netでよくデータモデルを扱う人間には使い勝手が良さそうです。定義してあればタイプミスしてもコンパイルで引っかかってくれます。テキストデータやレコードの読み込み時なんかで使えそうです。

以下、サンプル。テキストデータから「店舗レコード」型配列を作成するイメージです。
'店舗レコード
Type StoreRecord
StoreCd As String
Name As String
OpenDate As String
CloseDate As String
End Type

'店舗レコード作成
Function CreateStoreRecords(lines() As String) As StoreRecord()
Dim fso As FileSystemObject
Set fso = New FileSystemObject
Dim stream As TextStream
Set stream = fso.OpenTextFile(fileName, ForReading)
Dim results() As StoreRecord
Dim count As Integer
count = 0
Do Until stream.AtEndOfLine
Dim elements() As String
elements = Split(stream.readLine, ",")
Dim store As StoreRecord
store.StoreCd = Format(elements(0), "000000")
store.Name = elements(1)
store.OpenDate = CDate(elements(2))
store.CloseDate = CDate(elements(3))
ReDim Preserve results(count)
results(count) = store
count = count + 1
Loop
Set stream = Nothing
Set fso = Nothing
CreateStoreRecords = results
End Function

普段はあまりVBAを書くことがありませんが、たまにこういう発見も悪くないなぁって感じです。まぁ昔作った物を異常に修正したくなったりしますが…。

ちなみに久しぶりにSyntax Highlighter使ったらまったくもって使い方を忘れた上に、なんだかうまいこと投稿できず、削除と投稿を繰り返したりしました。

pagetop