Excel VBA-Kurs (8): Grundlagen der Excel VBA-Sprache – Datentypen, Datenstrukturen
In diesem Artikel betrachten wir den Datentyp und die bereitgestellte Datenstruktur unter den Grundlagen der Excel-VBA-Sprache.
Dies ist eine Fortsetzung des vorherigen Artikels.
Excel VBA-Kurs (7): Grundlagen der Excel VBA-Sprache – Syntax
3.3. Datentyp
3.3.1. grundlegender Datentyp
Die folgende Tabelle fasst die von VB (oder VBA) unterstützten Datentypen zusammen. Unter den Tabelleninhalten der Quelle unten werden Collection und Dictionary separat in „Datenstruktur“ erklärt.
Liste der grundlegenden Datentypen
Quelle: https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/data-type-summary
Datei Format | Speicherkapazität | Reichweite |
Boolesch | 2 Byte | WAHR oder FALSCH |
Byte | 1 Byte | 0 ~ 255 |
Sammlung | Unbekannt | Unbekannt |
Währung (skalierte Ganzzahl) | 8 Bytes | -922,337,203,685,477.5808 ~ 922,337,203,685,477.5807 |
Datum | 8 Bytes | 1. Januar 100 bis 31. Dezember 9999 (100-01-01 ~ 9999-12-31) |
Dezimal | 14 Byte | +/-79.228.162.514.264.337.593.543.950.335 ohne Dezimalkomma +/-7,9228162514264337593543950335 mit 28 Nachkommastellen Die kleinste Zahl ungleich Null ist +/- 0,000000000000000000000000001 |
Wörterbuch | Unbekannt | Unbekannt |
Doppelt (Gleitkommazahl mit doppelter Genauigkeit) | 8 Bytes | -1,79769313486231E308 bis -4,94065645841247E-324 für negative Werte 4,94065645841247E-324 bis 1,79769313486232E308 für positive Werte |
Ganze Zahl | 2 Byte | -32.768 bis 32.767 |
Lang (Lange ganze Zahl) | 4 Bytes | -2.147.483.648 bis 2.147.483.647 |
Lang Lang (LongLong-Ganzzahl) | 8 Bytes | -9.223.372.036.854.775.808 bis 9.223.372.036.854.775.807 Nur auf 64-Bit-Plattformen gültig. |
LangPtr (Long Integer auf 32-Bit-Systemen, LongLong Integer auf 64-Bit-Systemen) | 4 Bytes auf 32-Bit-Systemen 8 Bytes auf 64-Bit-Systemen | -2.147.483.648 bis 2.147.483.647 auf 32-Bit-Systemen -9.223.372.036.854.775.808 bis 9.223.372.036.854.775.807 auf 64-Bit-Systemen |
Objekt | 4 Bytes | Beliebig Objekt Hinweis |
Einzel (Gleitkommazahl mit einfacher Genauigkeit) | 4 Bytes | -3,402823E38 bis -1,401298E-45 für negative Werte 1.401298E-45 bis 3.402823E38 für positive Werte |
Schnur (variable Länge) | 10 Byte + Stringlänge | 0 bis ungefähr 2 Milliarden |
Schnur (feste Länge) | Länge der Schnur | 1 bis etwa 65.400 |
Variante (mit Zahlen) | 16 Byte | Jeder numerische Wert bis zum Bereich von a Doppelt |
Variante (mit Zeichen) | 22 Bytes + Stringlänge (24 Bytes auf 64-Bit-Systemen) | Gleicher Bereich wie für variable Länge Schnur |
Benutzerdefinierten (unter Verwendung Art) | Von Elementen benötigte Anzahl | Der Bereich jedes Elements ist derselbe wie der Bereich seines Datentyps. |
Unter ihnen sind die am häufigsten verwendeten Datentypen Int, Long, String und Boolean.
Varianten- und benutzerdefinierte Datentypen werden weiter unten näher erläutert.
Variant-Datentyp
Der Variant-Datentyp ist ein spezieller Datentyp, der mehrere Datentypen speichern und verarbeiten kann. Wenn der Datentyp bei der Deklaration einer Variablen weggelassen wird, wird sie als Variant-Datentyp angegeben. Weitere Informationen zum Variant-Datenformat finden Sie unter der folgenden URL.
https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/variant-data-type
Verwenden Sie die VarType-Funktion, um zu überprüfen, welche Art von Daten eine Variant-Variable während der Ausführung speichert.
https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/vartype-function
Konstruktion
VarType(Varname)
wesentlich Varname Das Argument ist eine Variante, die Variablen enthält, ausgenommen Variablen benutzerdefinierter Typen.
Rückkehrbilden
eine Konstante | Wert | Erläuterung |
vbLeer | 0 | Leer(nicht initialisiert) |
vbNull | 1 | Null(Keine Daten verfügbar) |
vbInteger | 2 | Wesen |
vbLang | 3 | lange Ganzzahl |
vbSingle | 4 | Gleitkommazahl mit einfacher Genauigkeit |
vbDouble | 5 | Gleitkommazahl mit doppelter Genauigkeit |
vbWährung | 6 | Wert der Währung |
vbDatum | 7 | Datumswert |
vbString | 8 | Schnur |
vbObjekt | 9 | Individuell |
vbFehler | 10 | Fehlerwert |
vbBoolesch | 11 | Boolescher Wert |
vbVariante | 12 | Variante(Variante Anordnungnur gebraucht) |
vbDatenobjekt | 13 | Datenzugriffsobjekt |
vbDezimal | 14 | Dezimalwert |
vbByte | 17 | Byte-Wert |
vbArray | 8192 | Anordnung |
Persönlich verwende ich das Variant-Datenformat nicht gut, und ich verwende es hauptsächlich zum gleichzeitigen Lesen und Schreiben von Blattdaten. Informationen zum Lesen und Schreiben einer großen Menge Blattdaten mithilfe von Variantenarrays finden Sie im folgenden Artikel.
VBA-Codierungsmuster: Bereichsschleife - Lesen
VBA-Codierungsmuster: Bereichsschleife - Schreiben
Dies ist ein Beispielcode, der den Variant-Datentyp verwendet. Es zeigt, dass es mit Integer-, String-, Realzahl- und Datumsdatentypen umgehen kann.
Sub VariantTest() Dim a As Variant '데이터 형식을 생략하면 Variant 형식임 a = 1: Debug.Print a a = "1": Debug.Print a a = 1.1: Debug.Print a a = CDate("2021-07-31"): Debug.Print a End Sub
Benutzerdefinierter Datentyp
Sie können benutzerdefinierte Datentypen deklarieren und verwenden. Deklarieren Sie benutzerdefinierte Datentypen mit dem Schlüsselwort „Type“, ähnlich wie „struct“ in der Sprache C. Benutzerdefinierte Datentypen sind keine Objekte, daher wird bei der Deklaration eine Instanz erstellt, Speicher zugewiesen und Werte können eingegeben werden.
Weitere Informationen zum benutzerdefinierten Datenformat finden Sie unter der folgenden URL.
https://docs.microsoft.com/en-us/office/vba/language/how-to/user-defined-data-type
Beispielcodes für benutzerdefinierte Datentypen sind wie folgt.
Type EmployeeRecord ' 사용자 정의 형식을 만듭니다. ID As Integer ' 데이터 형식의 요소를 정의합니다. Name As String Address As String Phone As Long HireDate As Date End Type Sub CreateRecord() Dim MyRecord As EmployeeRecord ' 변수를 선언합니다. MyRecord.ID = 12003 ' 요소에 값을 할당합니다. MyRecord.Name = "Andy" MyRecord.HireDate = CDate("2021-07-31") End Sub
3.3.2. Datenstruktur
Zu den häufig verwendeten Datenstrukturen gehören Array, Collection und Dictionary. Werfen wir einen Blick auf jeden.
Array
Es hat eine feste Anzahl von Artikeln. Da es sich nicht um ein Objekt handelt, wird durch seine Deklaration eine Instanz erstellt. Beim Deklarieren können die Anzahl der Dimensionen und die Unter- und Obergrenze jeder Dimension angegeben werden, oder die Dimensionen und der Bereich eines Arrays können während der Ausführung dynamisch geändert werden. Wenn Sie nur die Anzahl der Elemente angeben, ohne die Unter- und Obergrenze jeder Dimension anzugeben, ist die Untergrenze standardmäßig 0. Wenn Option Base 1 verwendet wird, ist die Standarduntergrenze 1.
Deklarationsbeispielcode
Dim DayArray(50) Dim Matrix(3, 4) As Integer Dim MyMatrix(1 To 5, 4 To 9, 3 To 5) As Double
Deklarieren Sie untere/obere Grenzen für jede Dimension, überprüfen Sie: use LBound, UBound
Dim A(1 To 100, 0 To 3, -3 To 4) LBound(A, 1) -> 1, UBound(A, 1) -> 100 ' 1차원 하한/상한 LBound(A, 2) -> 0, UBound(A, 2) -> 3 ' 2차원 하한/상한 LBound(A, 3) -> -3, UBound(A, 3) -> 4 ' 3차원 하한/상한
Änderung der Dimensionsgröße: Ändern Sie die Dimensionsgröße eines dynamischen Arrays mit der Redim-Anweisung.
Dim MyArray() As Integer ' 동적 배열을 선언합니다. Redim MyArray(5) ' 5개의 요소를 할당합니다. Redim Preserve MyArray(15) ' 15개의 요소로 크기를 변경합니다.
Gegenstandsschleife (For Next)
'Split & Trim 처리 Public Function SplitTrim(aExpression As String, aDelimeter As String) As String() Dim saOut() As String, i As Integer saOut = Split(aExpression, aDelimeter) For i = LBound(saOut) To UBound(saOut) saOut(i) = Trim(saOut(i)) Next i SplitTrim = saOut End Function
Initialisierung: Initialisieren Sie Array-Variablen mit der Erase-Anweisung.
' 배열 변수를 선언합니다. Dim NumArray(10) As Integer ' 정수 배열입니다. Dim StrVarArray(10) As String ' 변수 문자열 배열입니다. Dim StrFixArray(10) As String * 10 ' 고정 문자열 배열입니다. Dim VarArray(10) As Variant ' Variant 배열입니다. Dim DynamicArray() As Integer ' 동적 배열입니다. ReDim DynamicArray(10) ' 저장 공간을 할당합니다. Erase NumArray ' 0으로 지정된 각 요소입니다. Erase StrVarArray ' 길이가 0인 문자열 ("")로 지정된 각 요소입니다. Erase StrFixArray ' 0으로 지정된 각 요소입니다. Erase VarArray ' Empty로 지정된 각 요소입니다. Erase DynamicArray ' 배열에 의해 사용되는 빈 메모리입니다.
Sammlung
Die Collection-Klasse ähnelt einem dynamischen Array. Eine variable Anzahl einzigartiger Gegenstände kann hinzugefügt und entfernt werden. Weil es ein Objekt istSatz“ und „Neu“, um eine Instanz zu erstellen. Wenn Sie in Visual Basic eine Referenz auf ein Objekt erstellen oder eine neue Referenz zuweisen, müssen Sie „SatzDas Schlüsselwort „Set“ muss verwendet werden, und das Schlüsselwort „Set“ wird nicht benötigt, wenn einer Variablen ein Wert zugewiesen wird. Sie müssen zwischen der Behandlung von Objekten und Variablen unterscheiden, um Grammatikfehler zu vermeiden. Du kannst oft Fehler machen, sei also vorsichtig.
In der folgenden Tabelle finden Sie Codes für jede Aufgabe, z. B. Sammlungsobjektdeklaration, Instanzerstellung und Elementhinzufügung.
Aufgabe | Beispielcode |
Erklärung | Dim o Col als Sammlung |
Instanzerstellung | Setzen Sie oCol = Neue Sammlung |
Instanzerstellung gleichzeitig mit Deklaration | Dim o Col als neue Kollektion |
Artikel hinzufügen | oCol. „Apple“ hinzufügen |
Greifen Sie über den Index auf das Element zu | oCol(1) |
Anzahl der Teile | oCol.Count |
Gegenstandsschleife (für) | Dim l So lange Für l = 1 bis oCol.Count Debug.Print oCol(l) Nächste |
Gegenstandsschleife (für jeden) | Dim Frucht als Variante Für jede Frucht in oCol Debug.Frucht drucken Nächste |
Element entfernen (Index festlegen) | oFarbe Entfernen(1) |
Instanz entfernen | Setzen Sie oCol = Nichts |
Beispielcode mit Collection lautet wie folgt. Als Referenz, Artikel in Sammlung beginnen mit 1.
Sub CollectionTest() Dim oCol As Collection Set oCol = New Collection oCol.Add "Apple" oCol.Add "Strawberry" oCol.Add "Lemon" oCol.Add "Banana" Debug.Print oCol(1) Debug.Print oCol.Item(1) Debug.Print "----------" Dim l As Long For l = 1 To oCol.Count Debug.Print oCol(l) Next Debug.Print "----------" oCol.Remove (1) Dim fruit As Variant For Each fruit In oCol Debug.Print fruit Next Set oCol = Nothing End Sub '출력 Apple Apple ---------- Apple Strawberry Lemon Banana ---------- Strawberry Lemon Banana
Wörterbuch
Es ist möglich, variable eindeutige Elemente der Schlüsselwertstruktur zu verwalten und Elemente dynamisch hinzuzufügen/zu entfernen.
Es ist eine Datenstruktur ähnlich wie Dictionary in Python, HashMap in C++ und HashMap in Java. Beim Zugriff nach Schlüsselwert ist die Leistung O(1).
Die Dictionary-Klasse wird standardmäßig nicht bereitgestellt. Um es in der frühen Bindungsmethode zu verwenden, müssen Sie zuerst auf „Microsoft Scripting Runtime“ verweisen. Erstellen Sie zur Verwendung in der späten Bindungsmethode eine Instanz über CreateObject und verwenden Sie sie.
In der folgenden Tabelle finden Sie den Code für jede Aufgabe, z. B. Wörterbuchobjektdeklaration, Instanzerstellung und Elementhinzufügung.
Aufgabe | Beispielcode |
Deklaration (frühverbindlich) | Dim oDic als Wörterbuch |
Instanzerstellung (frühe Bindung) | Setzen Sie oDic = Neues Wörterbuch |
Deklaration (Late Binding) | Dim oDic als Objekt |
Instanzerstellung (spätes Binden) | Set oDic = CreateObject ("Scripting.Dictionary") |
Artikel hinzufügen | oDic. „Äpfel“ hinzufügen, 50 |
Wert ändern | oDic („Äpfel“) = 60 |
Wert erhalten | appleCount = oDic("Äpfel") |
Überprüfen Sie, ob der Schlüssel vorhanden ist | oDic.Exists(„Äpfel“) |
Item löschen | oDic.Remove("Äpfel") |
Alle Artikel löschen | oDic.RemoveAll |
Anzahl der Teile | odic. Graf |
Gegenstandsschleife (für jeden) | Dim-Taste als Variante Für jede Taste in odic. Keys Debug.Taste drucken, oDic(key) Nächster Schlüssel |
Gegenstandsschleife (nur für frühe Bindung) | Dim l So lange Für l = 0 bis oDic.Count -1 Debug.Print oDic.Keys(l), oDic.Items(l) Nächste l |
Beispielcode, der Dictionary verwendet, lautet wie folgt. Als Referenz beginnen Elemente im Wörterbuch bei 0.
Sub DictionaryTest() Dim oDic As Dictionary Set oDic = New Dictionary oDic.Add "A", "Apple" oDic.Add "S", "Strawberry" oDic.Add "L", "Lemon" oDic.Add "B", "Banana" Debug.Print oDic("A") Debug.Print oDic.Items(0) Debug.Print "----------" Dim l As Long For l = 0 To oDic.Count - 1 Debug.Print oDic.Items(l) Next Debug.Print "----------" oDic.Remove ("A") Dim key As Variant, fruit As String For Each key In oDic.Keys fruit = oDic(key) Debug.Print fruit Next Set oDic = Nothing End Sub '출력 Apple Apple ---------- Apple Strawberry Lemon Banana ---------- Strawberry Lemon Banana
Beim Durchsuchen eines Dictionary-Objekts mit der For-Schleife-Anweisung kann die Variable, die den Schlüsselwert enthalten soll, nur vom Typ Variant oder Object sein. Im obigen Beispiel verwendete der Code in den Zeilen 23 und 24 das Variant-Format.
In diesem Artikel haben wir uns VBA-Datentypen und Datenstrukturen angesehen. Insbesondere Sammlung und Wörterbuch werden sehr wahrscheinlich häufig verwendet, machen Sie sich also bitte damit vertraut. Als Nächstes sehen wir uns hilfreiche Anleitungen zum Programmieren von VBA an.
<<Verwandte Artikelliste >>
- Starten Sie den Excel-VBA-Kurs. (Vorlesungsankündigung, feat. Warum wir Excel VBA empfehlen)
- Excel VBA-Kurs(1): Überblick über Excel VBA
- Excel VBA-Kurs (2): Excel VBA-Grundlagen
- Excel VBA-Kurs (3): Excel-Objektmodell
- Excel VBA-Kurs (4): Arbeiten mit dem Excel-Objektmodell
- Excel VBA-Kurs (5): Excel-Dateierweiterung, VBE, Schrifteinstellungen
- Excel VBA-Kurs (6): Grundlagen der Excel VBA-Sprache – Variablen
- Excel VBA-Kurs (7): Grundlagen der Excel VBA-Sprache – Syntax
- Excel VBA-Kurs (8): Grundlagen der Excel VBA-Sprache – Datentypen, Datenstrukturen
- Excel VBA-Kurse (9): Excel VBA How-To
- Excel VBA-Kurs (10): Tools, die mit Excel VBA entwickelt und verwendet werden
- Vollständiges Inhaltsverzeichnis für Excel VBA-Kurse