Excel VBA:構造体を一度に初期化する|APIのZeroMemoryを使用

Excel VBAでWindows APIのZeroMemoryを使用し構造体を初期化します、大きい構造体の初期化には便利かも。




Homeに戻る > Excel プログラムのTipsへ

構造体とは、型が異なるデータをグループ化する機能です。

構造体は1つのオブジェクトとして処理ができるので、操作が簡単になりプログラムコードも分かり易くなります。

構造体はTypeステートメントで下記のように宣言します。

Type 構造体名
要素名1 As 型名
要素名2 As 型名

End Type

構造体を使用する場合、下記のように定義します。

Dim オブジェクト名 As 構造体名


構造体を初期化するには直接空文字などの値をセットすることで可能ですが、ここではWindows APIのZeroMemoryを使用し構造体を初期化するコードを掲載します。

ZeroMemoryの構文:

Declare Sub ZeroMemory Lib "kernel32" Alias "RtlZeroMemory" (Destination As Any, ByVal Length As Long)

Destination:構造体を表すオブジェクト名を指定します。

Length:構造体の大きさを指定します。

関連する記事として、構造体とAPIを使った「Excel VBAでカラーダイアログを表示する」を掲載していますので参照してください。



Windows APIのZeroMemoryを使用し構造体を初期化するVBA

■ VBAの解説

APIを参照するためにDeclareステートメントで、ZeroMemoryプロシージャを宣言しています。

TypeステートメントでCustData構造体を宣言しています。

・ コマンドボタン クリックイベント

  1. 構造体の要素全てにデータを代入します。
  2. セルに構造体のデータを表示します。
  3. ZeroMemoryを呼び出し、構造体を初期化します。
  4. 初期化後のデータをセルに表示します。

Excel VBA シートコード

Option Explicit

'指定されたメモリブロックに0を書き込む
Private Declare Sub ZeroMemory Lib "kernel32" _
            Alias "RtlZeroMemory" (Destination As Any, ByVal Length As Long)

'初期化する構造体
Private Type CustData
    No  As Long
    name As String
    tel As String
    fax As String
End Type

Private Sub CommandButton1_Click()
    Dim tcust As CustData
    Dim i As Integer
    
    '構造体にデータを代入
    tcust.No = 56
    tcust.name = "大沢"
    tcust.tel = "123456789"
    tcust.fax = "234567891"
    
    '初期化前のデータを表示
    Range("B7") = tcust.No
    Range("B8") = tcust.name
    
    'Excel VBAで初期化
    Call ZeroMemory(tcust, Len(tcust))
    
    '初期化後のデータを表示
    Range("D7") = tcust.No
    Range("D8") = tcust.name
End Sub


Excel実行結果

B列が初期化前のデータで、D列が初期化後のデータです。

数値型のデータは0に、文字型のデータは空文字になっているのが確認できます。

構造体の初期化画面

Homeに戻る > Excel プログラムのTipsへ

■■■
このサイトの内容を利用して発生した、いかなる問題にも一切責任は負いませんのでご了承下さい
■■■
当ホームページに掲載されているあらゆる内容の無許可転載・転用を禁止します


Copyright (c) Excel-Excel ! All rights reserved