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 FormatSpeicherkapazitätReichweite
Boolesch2 ByteWAHR oder FALSCH
Byte1 Byte0 ~ 255
SammlungUnbekanntUnbekannt
Währung (skalierte Ganzzahl)8 Bytes-922,337,203,685,477.5808 ~ 922,337,203,685,477.5807
Datum8 Bytes1. Januar 100 bis 31. Dezember 9999
(100-01-01 ~ 9999-12-31)
Dezimal14 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örterbuchUnbekanntUnbekannt
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 Zahl2 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
Objekt4 BytesBeliebig 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änge0 bis ungefähr 2 Milliarden
Schnur (feste Länge)Länge der Schnur1 bis etwa 65.400
Variante (mit Zahlen)16 ByteJeder 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 AnzahlDer 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 KonstanteWertErläuterung
vbLeer0Leer(nicht initialisiert)
vbNull1Null(Keine Daten verfügbar)
vbInteger2Wesen
vbLang3lange Ganzzahl
vbSingle4Gleitkommazahl mit einfacher Genauigkeit
vbDouble5Gleitkommazahl mit doppelter Genauigkeit
vbWährung6Wert der Währung
vbDatum7Datumswert
vbString8Schnur
vbObjekt9Individuell
vbFehler10Fehlerwert
vbBoolesch11Boolescher Wert
vbVariante12Variante(Variante Anordnungnur gebraucht)
vbDatenobjekt13Datenzugriffsobjekt
vbDezimal14Dezimalwert
vbByte17Byte-Wert
vbArray8192Anordnung

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.

AufgabeBeispielcode
ErklärungDim o Col als Sammlung
InstanzerstellungSetzen Sie oCol = Neue Sammlung
Instanzerstellung gleichzeitig mit DeklarationDim o Col als neue Kollektion
Artikel hinzufügenoCol. „Apple“ hinzufügen
Greifen Sie über den Index auf das Element zuoCol(1)
Anzahl der TeileoCol.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 entfernenSetzen 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.

Dictionary class 사용을 위한 "Microsoft Scripting Runtime" 참조 추가
„Microsoft Scripting Runtime“-Referenz für die Verwendung der Dictionary-Klasse hinzugefügt

In der folgenden Tabelle finden Sie den Code für jede Aufgabe, z. B. Wörterbuchobjektdeklaration, Instanzerstellung und Elementhinzufügung.

AufgabeBeispielcode
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ügenoDic. „Äpfel“ hinzufügen, 50
Wert ändernoDic („Äpfel“) = 60
Wert erhaltenappleCount = oDic("Äpfel")
Überprüfen Sie, ob der Schlüssel vorhanden istoDic.Exists(„Äpfel“)
Item löschenoDic.Remove("Äpfel")
Alle Artikel löschenoDic.RemoveAll
Anzahl der Teileodic. 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 >>

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

de_DEDeutsch