あなたが学校管理システムを作成しようとしているとしましょう。ここでは、生徒名、生徒のロール番号、クラスなど、さまざまなタイプの変数があります。学校にも教師がいるため、教師名、教師の科目、クラスなどがあります。同様に、他にも多くのオブジェクトがあります。 、司書、クラス、原則など。学校のエンティティごとに異なる変数を使用することは、面倒な作業になります。生徒、教師、クラスなど、それらに関連する値を格納するデータ型を作成するのはどうですか。このために、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

image

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

image

上記のコードでは、最初に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を実行すると、このように結果が発生します。

image

この機能により、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つの重要な機能です。これは、特定の条件で値を合計するのに役立ちます。