VBAでの構造体を使用する方法?ユーザーは、データ型を定義
あなたが学校管理システムを作成しようとしているとしましょう。ここでは、生徒名、生徒のロール番号、クラスなど、さまざまなタイプの変数があります。学校にも教師がいるため、教師名、教師の科目、クラスなどがあります。同様に、他にも多くのオブジェクトがあります。 、司書、クラス、原則など。学校のエンティティごとに異なる変数を使用することは、面倒な作業になります。生徒、教師、クラスなど、それらに関連する値を格納するデータ型を作成するのはどうですか。このために、VBAの定義済みデータ型を使用できます。
この記事では、VBAで独自のデータ型を作成する方法を学習します。それらはVBAのUDTと呼ばれます。 ===ユーザー定義のデータ型の定義VBAで構造またはUDTを定義するには、Type _ EndTypeブロックを使用します。
これがUDTの構文です。
Type Tname_Of_Data_Type var1 as datatype 'datatype can be anything, int, array,or even UDT var2 as datatype Var3() as datatype --- VarN() as datatype End Type
したがって、VBAでカスタムデータ型を定義するには、TypeKeywordから始めます。次に、カスタムデータ型の名前を記述します。 `link:/ excel-macros-and-vba-how-to-use-vba-collections-in-excel [vba collections]`とUDTを区別できるように、データ型の名前の前にTを使用するのが慣例です。 。 DataTypeは何でもかまいません。そして、整数、文字列、バリアント、別のUDT、配列、コレクション、何でも。
プログラムでUDTを使用するには、他の変数と同じようにその変数を宣言します。
Sub UseUDT 'Declaring variable of user defined data type Dim myVar1 as Tname_Of_Data_Type Dim myVar2 as Tname_Of_Data_Type End Sub
シンプル。このUDT内の変数を使用するために、ドット演算子を使用します。
データ型の名前に続けて、ドットと変数の名前を使用します。
Sub UseUDT 'Declaring variable of user defined data type Dim myVar1 as Tname_Of_Data_Type Dim myVar2 as Tname_Of_Data_Type myVar1.var1="Abcd" myVar2.Var2="xyvz" End Sub
理論はこれで十分です。例に飛び込んで、それがどのように機能するかを見てみましょう。
学生に関連する情報を格納する学生変数を作成するしたがって、学生に関連する情報を格納するユーザー定義のデータ型を作成するタスクがあります。
学生には、名、姓、ロール番号、生年月日、クラス、セクション、科目があります。
それでは作成しましょう。
'Created a Public Student Data Type Public Type Tstudent fName As String 'For First Name lName As String 'For Last Name rNo As Integer 'For Roll Number clss As string 'For Class section As String 'For Section Name subjects() As String 'For Subjects of student End Type 'Use this Tstudent type in subroutine Sub StudentsInfo() 'Creating and initializing student type variable Dim student1 As Tstudent student1.fName = "Manish" student1.lName = "Singh" student1.rNo = 12334 student1.clss = 10 student1.section = "A" ReDim student1.subjects(2) student1.subjects(0) = "physics" student1.subjects(1) = "Math" 'Printing student details. Debug.Print (student1.fName) Debug.Print (student1.lName) Debug.Print (student1.rNo) Debug.Print (student1.clss) Debug.Print (student1.section) Debug.Print (student1.subjects(0)) Debug.Print (student1.subjects(1)) End Sub
上記のサブを実行すると、次のように結果が出力されます。
Manish Singh 12334 10 A physics Math |
UDTの配列の作成と要素へのアクセス
同様に、必要な数のTstudentタイプの変数を作成できます。
他のデータ型と同じように、Tstudent型の配列を作成することもできます。
Public Type Tstudent fName As String 'For First Name lName As String 'For Last Name rNo As Integer 'For Roll Number clss As string 'For Class section As String 'For Section Name subjects() As String 'For Subjects of student End Type 'Creating an arrays of Tstudents type Sub SchoolInfo() Dim schoolName As String Dim students() As Tstudent schoolName = "Senior School" ReDim students(10) For i = 0 To 9 students(i).fName = "name" & Str(i + 1) students(i).rNo = i + 1 Next i Debug.Print ("Name : Roll No") For i = 0 To 9 Debug.Print (students(i).fName & " : " & students(i).rNo) Next i End Sub
このコードを実行すると、これはイミディエイトウィンドウに出力されます。
Name : Roll No name 1 : 1 name 2 : 2 name 3 : 3 name 4 : 4 name 5 : 5 name 6 : 6 name 7 : 7 name 8 : 8 name 9 : 9 name 10 : 10 |
上記のコードでは、最初にUDT構造を前に定義し、サブを定義しました(理由については後で説明します)。 VBAの変数の場合と同じように、dimキーワードを使用して配列を作成しました。次に、Redimを使用して配列のサイズを定義しました。その後、forループを使用して配列を初期化します。
構造体の要素にアクセスするには、別のforループを使用します。それだ。
モジュールの上にUDTを宣言したのはなぜですか?
サブルーチンまたは関数の外部のモジュールで最初にUDTを宣言すると、ワークブック内のすべてのモジュールで使用できます。これは、モジュールに100個のサブと関数がある場合、それらすべてが本体でStudent型変数を宣言できることを意味します。 UDTがプライベートでない場合は、ワークブック内のすべてのモジュールで使用できます。構造体(UDT)を包含モジュールのみが使用できるようにする場合は、それをプライベートとして宣言します。
Private Type Tstudent fName As String lName As String rNo As Integer clss As Integer section As String subjects() As String End Type
手続きレベルでUDTを使用することはできません。これは、サブルーチンまたは関数内でユーザー定義のデータ型を定義できないことを意味します。
ネストされたユーザー定義タイプ自動車と呼ばれるUDTがあるとします。車には独自の要素があります。同様に、独自のプロパティを持つことができる自転車と呼ばれるUDTがあります。
ここで、Vehicleというデータ型が必要だとします。車両は、その要素として車と自転車を持つことができます。これはできますか?はい、できます。以下のコードを参照してください
Private Type Tcar seats As Integer ac As Boolean typ As String color As String manufacturer As String Dop As Date rc_no As String End Type Private Type Tbike seats As Integer typ As String color As String manufacturer As String Dop As Date rc_no As String End Type Private Type Tvehicle number_of_Vehicle As Integer bike As Tbike car As Tcar End Type Sub vehicleVarification() Dim myVehicles As Tvehicle myVehicles.number_of_Vehicle = 2 myVehicles.bike.seats = 1 myVehicles.bike.typ = "Racing" myVehicles.car.seats = "4" myVehicles.car.ac = True Debug.Print myVehicles.number_of_Vehicle Debug.Print myVehicles.bike.typ Debug.Print myVehicles.car.ac End Sub
ここでは、3つのユーザー定義データ型を定義しました。 1つ目は、自動車に関連する情報が含まれているTcarです。 2つ目は自転車です。これには、自転車に関する情報も含まれています。
3番目のUDTはTvehicleです。車両数を格納する1つの変数と、TcarおよびTbikeタイプの2つの変数が含まれています。
プライベートタイプの車両
number_of_Vehicle As Integer
バイクAsTbike
車Tcarとして
エンドタイプ
TcarとTbikeの変数にアクセスするには、Tvehicleデータ型を使用できます。サブでは、Tvehicleタイプの変数をmyVehiclesとして1つだけ定義しました。この変数を作成すると、VBAはTcarとTbikeの変数も作成します。
TcarとTcarの変数を初期化してアクセスするには、myVehicle変数を使用できます。あなたがコードで見ることができるように。
myVehicles.number_of_Vehicle = 2
myVehicles.bike.seats = 1
myVehicles.bike.typ = “レーシング”
myVehicles.car.seats = “4”
myVehicles.car.ac = True
subを実行すると、このように結果が発生します。
この機能により、VBAのプログラミング能力が飛躍的に向上します。データ型は、実際のエンティティのように構造化できます。大規模なプロジェクトで役立つデータ型間の関係を作成できます。
そうですね、これがVBAでユーザー定義のデータ型または構造を作成して使用する方法です。説明できたと思います。この記事またはその他のVBA関連の質問について質問がある場合は、以下のコメントセクションで質問してください。ご連絡をお待ちしております。
関連記事:
link:/ general-topics-in-vba-vba-variables-in-excel [ExcelのVBA変数]
| * VBAはVisualBasic forApplicationsの略です。
これは、Microsoftのプログラミング言語です。これは、MSExcel、MS-Word、MS-AccessなどのMicrosoft Officeアプリケーションで使用されますが、VBA変数は特定のキーワードです。
link:/ general-topics-in-vba-excel-vba-variable-scope [Excel VBA Variable Scope]
| *すべてのプログラミング言語には、定義された変数にアクセスできる場所を定義する変数アクセス指定子があります。 ExcelVBAも例外ではありません。 VBAにもスコープ指定子があります。
link:/ cells-ranges-rows-and-columns-in-vba-what-is-the-difference-between-byref-and-byval-arguments-vba-interview-question [ByRef and ByVal Arguments]
|引数がByRef引数として別のサブまたは関数に渡されると、実際の変数の参照が送信されます。変数のコピーに加えられた変更は、元の引数に反映されます。
link:/ files-workbook-and-worksheets-in-vba-delete-sheets-without-confirmation-prompts-using-vba-in-microsoft-excel [MicrosoftExcelのVBAを使用して確認プロンプトなしでシートを削除する]
| VBAを使用してシートを削除しているので、何をしているのかがわかります。
この警告を表示せず、いまいましいシートを削除しないようにExcelに指示します。
link:/ files-workbook-and-worksheets-in-vba-add-and-save-new-workbook-using-vba-in-microsoft-excel [Microsoft Excel2016でVBAを使用して新しいブックを追加および保存する]
|このコードでは、最初にワークブックオブジェクトへの参照を作成しました。次に、新しいワークブックオブジェクトで初期化しました。このアプローチの利点は、この新しいワークブックの操作を簡単に実行できることです。保存、閉じる、削除などのように `link:/ menus-toolbars-status-bar-in-vba-display-a-message-on-the-statusbar-using-vba-in-microsoft-excel [Display A Message On ExcelVBAステータスバー*] `| Excelのステータスバーはコードモニターとして使用できます。 VBAコードが長く、VBAを使用していくつかのタスクを実行する場合、画面のちらつきが表示されないように、画面の更新を無効にすることがよくあります。
link:/ general-topics-in-vba-turn-off-warning-messages-using-vba-in-microsoft-excel [Microsoft Excel2016でVBAを使用して警告メッセージをオフにする]
| *このコードはVBAを無効にするだけではありませんアラートだけでなく、コードの時間効率も向上します。方法を見てみましょう。
人気の記事:
link:/ keyboard-formula-shortcuts-50-excel-shortcuts-to-increase-your-productivity [生産性を高めるための50のExcelショートカット]
|あなたの仕事をより速くしてください。これらの50のショートカットにより、Excelでの作業がさらに高速になります。
link:/ forms-and-functions-introduction-of-vlookup-function [ExcelのVLOOKUP関数]
|これは、さまざまな範囲やシートから値を検索するために使用される、Excelの最も使用され人気のある関数の1つです。 link:/ Tips-countif-in-microsoft-excel [COUNTIF in Excel 2016]
|この驚くべき関数を使用して、条件付きの値をカウントします。特定の値をカウントするためにデータをフィルタリングする必要はありません。
ダッシュボードを準備するには、Countif関数が不可欠です。
link:/ excel-formula-and-function-excel-sumif-function [ExcelでSUMIF関数を使用する方法]
|これは、ダッシュボードのもう1つの重要な機能です。これは、特定の条件で値を合計するのに役立ちます。