Excel VBA-Bereiche und -Zellen

Bereiche und Zellen in VBA

Excel-Tabellen speichern Daten in Zellen. Zellen sind in Zeilen und Spalten angeordnet. Jede Zelle kann durch den Schnittpunkt ihrer Zeile und Spalte identifiziert werden (Bsp. B3 oder R3C2).

Ein Excel-Bereich bezieht sich auf eine oder mehrere Zellen (z. B. A3:B4)

Zellenadresse

A1-Notation

In der A1-Notation wird auf eine Zelle durch ihren Spaltenbuchstaben (von A bis XFD) gefolgt von ihrer Zeilennummer (von 1 bis 1.048.576) verwiesen.

In VBA können Sie mit dem auf jede Zelle verweisen Bereichsobjekt.

123456789 ' Siehe Zelle B4 auf dem derzeit aktiven BlattMsgBox-Bereich("B4")' Siehe Zelle B4 auf dem Blatt mit dem Namen 'Daten'MsgBox Worksheets("Daten").Range("B4")' Siehe Zelle B4 auf dem Blatt mit dem Namen 'Daten' in einer anderen OPEN-Arbeitsmappe“ mit dem Namen „Meine Daten“MsgBox Workbooks("Meine Daten").Worksheets("Daten").Range("B4")

R1C1-Notation

In der R1C1-Notation wird eine Zelle mit R gefolgt von der Zeilennummer, dann dem Buchstaben "C" gefolgt von der Spaltennummer bezeichnet. zB B4 in R1C1-Notation wird von R4C2 referenziert. In VBA verwenden Sie die Zellen-Objekt um die R1C1-Notation zu verwenden:

12 ' Siehe Zelle R[6]C[4] d.h. D6Zellen(6, 4) = "D6"

Zellbereich

A1-Notation

Um auf mehr als eine Zelle zu verweisen, verwenden Sie ein „:“ zwischen der Startzellenadresse und der letzten Zelladresse. Das Folgende bezieht sich auf alle Zellen von A1 bis D10:

1 Bereich("A1:D10")

R1C1-Notation

Um auf mehr als eine Zelle zu verweisen, verwenden Sie ein „“, zwischen der Startzellenadresse und der letzten Zelladresse. Das Folgende bezieht sich auf alle Zellen von A1 bis D10:

1 Bereich (Zellen(1, 1), Zellen(10, 4))

In Zellen schreiben

Um Werte in eine Zelle oder eine zusammenhängende Gruppe von Zellen zu schreiben, beziehen Sie sich einfach auf den Bereich, setzen Sie ein =-Zeichen und schreiben Sie dann den zu speichernden Wert:

12345678910 ' F5 in Zelle mit Adresse F6 speichernBereich("F6") = "F6"' E6 in Zelle mit Adresse R[6]C[5] speichern, d.h. E6Zellen(6, 5) = "E6"' Speichere A1:D10 im Bereich A1:D10Bereich("A1:D10") = "A1:D10"' oderRange(Cells(1, 1), Cells(10, 4)) = "A1:D10"

Aus Zellen lesen

Um Werte aus Zellen zu lesen, verweisen Sie einfach auf die Variable, um die Werte zu speichern, setzen Sie ein =-Zeichen und beziehen Sie sich dann auf den zu lesenden Bereich:

1234567891011 Dimmwert1Dimmwert2' Aus Zelle F6 lesenval1 = Bereich("F6")' Aus Zelle E6 lesenval2 = Zellen(6, 5)MsgBox val1Msgbox val2

Hinweis: Um Werte aus einem Zellbereich zu speichern, müssen Sie anstelle einer einfachen Variablen ein Array verwenden.

Nicht zusammenhängende Zellen

Um auf nicht zusammenhängende Zellen zu verweisen, verwenden Sie ein Komma zwischen den Zellenadressen:

123456 ' 10 in den Zellen A1, A3 und A5 speichernBereich("A1,A3,A5") = 10' 10 in den Zellen A1:A3 und D1:D3) speichernBereich("A1:A3, D1:D3") = 10

Kreuzung von Zellen

Um auf nicht zusammenhängende Zellen zu verweisen, verwenden Sie ein Leerzeichen zwischen den Zellenadressen:

123 ' 'Col D' in D1:D10 speichern', was zwischen A1:D10 und D1:F10 gemeinsam istBereich("A1:D10 D1:G10") = "Spalte D"

Versatz von einer Zelle oder einem Bereich

Mit der Offset-Funktion können Sie die Referenz aus einem bestimmten Bereich (Zelle oder Zellengruppe) um die angegebene Anzahl_Zeilen und Anzahl_Spalten verschieben.

Offset-Syntax

Range.Offset(number_of_rows, number_of_columns)

Versatz von einer Zelle

12345678910111213141516 ' OFFSET von einer Zelle A1'Beziehen Sie sich auf die Zelle selbst' 0 Zeilen und 0 Spalten verschiebenBereich("A1").Offset(0, 0) = "A1"' 1 Zeilen und 0 Spalten verschiebenBereich("A1").Offset(1, 0) = "A2"' 0 Zeilen und 1 Spalten verschiebenBereich("A1").Offset(0, 1) = "B1"' 1 Zeile und 1 Spalte verschiebenBereich("A1").Offset(1, 1) = "B2"' Verschiebe 10 Zeilen und 5 SpaltenBereich("A1").Offset(10, 5) = "F11"

Versatz von einem Bereich

123 ' Referenz auf Bereich A1:D4 um 4 Zeilen und 4 Spalten verschieben'Neue Referenz ist E5:H8Bereich("A1:D4").Offset(4,4) = "E5:H8"

Referenz auf einen Bereich setzen

So weisen Sie einer Bereichsvariablen einen Bereich zu: Deklarieren Sie eine Variable vom Typ Bereich und verwenden Sie dann den Befehl Set, um sie auf einen Bereich zu setzen. Bitte beachten Sie, dass Sie den SET-Befehl verwenden müssen, da RANGE ein Objekt ist:

12345678 ' Eine Range-Variable deklarierenDim myRange als Range' Setzen Sie die Variable auf den Bereich A1:D4Set myRange = Range("A1:D4")' druckt $A$1:$D$4MsgBox myRange.Address

Größe eines Bereichs ändern

Die Resize-Methode des Range-Objekts ändert die Dimension des Referenzbereichs:

1234567 Dim myRange als Range'GrößenänderungsbereichSet myRange = Range("A1:F4")' druckt $A$1:$E$10Debug.Print myRange.Resize(10, 5).Adresse

Die obere linke Zelle des Größenänderungsbereichs entspricht der oberen linken Zelle des ursprünglichen Bereichs

Größenänderungssyntax

Range.Resize(number_of_rows, number_of_columns)

OFFSET vs. Größenänderung

Offset ändert die Abmessungen des Bereichs nicht, sondern verschiebt ihn um die angegebene Anzahl von Zeilen und Spalten. Die Größenänderung ändert nicht die Position des ursprünglichen Bereichs, sondern ändert die Abmessungen auf die angegebene Anzahl von Zeilen und Spalten.

Alle Zellen im Blatt

Das Cells-Objekt verweist auf alle Zellen im Arbeitsblatt (1048576 Zeilen und 16384 Spalten).

12 'Alle Zellen in Arbeitsblättern löschenZellen.Löschen

GebrauchtSortiment

Die UsedRange-Eigenschaft gibt Ihnen den rechteckigen Bereich von der oberen linken verwendeten Zelle bis zur rechten unteren verwendeten Zelle des aktiven Arbeitsblatts.

1234567 Dim ws als ArbeitsblattSet ws = ActiveSheet' $B$2:$L$14 wenn L2 die erste Zelle mit einem beliebigen Wert ist' und L14 ist die letzte Zelle mit einem beliebigen Wert auf dem'aktives BlattDebug.Print ws.UsedRange.Address

AktuelleRegion

Die CurrentRegion-Eigenschaft gibt Ihnen den zusammenhängenden rechteckigen Bereich von der oberen linken Zelle bis zur rechten unteren verwendeten Zelle, die die referenzierte Zelle/den referenzierten Bereich enthält.

1234567891011 Dim myRange als RangeSet myRange = Range("D4:F6")' druckt $B$2:$L$14' Wenn es einen gefüllten Pfad von D4:F16 nach B2 UND L14 gibtDebug.Print myRange.CurrentRegion.Address' Sie können sich auch auf eine einzelne Startzelle beziehenSet myRange = Range("D4") ' Druckt $B$2:$L$14

Bereichseigenschaften

Sie können Adresse, Zeilen-/Spaltennummer einer Zelle und Anzahl der Zeilen/Spalten in einem Bereich wie unten angegeben abrufen:

123456789101112131415161718192021 Dim myRange als RangeSet myRange = Range("A1:F10")' druckt $A$1:$F$10Debug.Print myRange.AddressSet myRange = Range("F10")' Druckt 10 für Zeile 10Debug.Print myRange.Row' Druckt 6 für Spalte FDebug.Print myRange.ColumnSet myRange = Range("E1:F5")' Gibt 5 für die Anzahl der Zeilen im Bereich ausDebug.Print myRange.Rows.Count' Gibt 2 für die Anzahl der Spalten im Bereich ausDebug.Print myRange.Columns.Count

Letzte Zelle im Tabellenblatt

Sie können verwenden Zeilen.Anzahl und Spalten.Anzahl Eigenschaften mit Zellen Objekt, um die letzte Zelle auf dem Blatt zu erhalten:

1234567891011 'Drucken Sie die letzte Zeilennummer'Drucke 1048576Debug.Print "Zeilen im Blatt: " & Rows.Count' Drucken Sie die letzte Spaltennummer'Drucke 16384Debug.Print "Spalten im Blatt: " & Columns.Count' Adresse der letzten Zelle ausgeben' druckt $XFD$1048576Debug.Print "Adresse der letzten Zelle im Tabellenblatt: " & Cells(Rows.Count, Columns.Count)

Zuletzt verwendete Zeilennummer in einer Spalte

Die END-Eigenschaft führt Sie zur letzten Zelle im Bereich und End(xlUp) führt Sie zur ersten verwendeten Zelle dieser Zelle.

123 Dim lastRow As LonglastRow = Cells(Rows.Count, "A").End(xlUp).Row

Zuletzt verwendete Spaltennummer in einer Zeile

123 Dim lastCol As LonglastCol = Cells(1, Columns.Count).End(xlToLeft).Column

Die END-Eigenschaft führt Sie zur letzten Zelle im Bereich, und End(xlToLeft) führt Sie nach links zur ersten verwendeten Zelle dieser Zelle.

Sie können auch die Eigenschaften xlDown und xlToRight verwenden, um zur ersten unteren oder rechten verwendeten Zelle der aktuellen Zelle zu navigieren.

Zelleneigenschaften

Allgemeine Eigenschaften

Hier ist Code zum Anzeigen häufig verwendeter Zelleigenschaften

12345678910111213141516171819202122 Zelle als Bereich dimmenZelle setzen = Range("A1")Zelle.AktivierenDebug.Print cell.Address'$$1 ausdruckenDebug.Print cell.Value'Druckt 456' Die AnschriftDebug.Print cell.Formula' Druckt =SUMME(C2:C3)' KommentarDebug.Print cell.Comment.Text' StilDebug.Print cell.Style'ZellenformatDebug.Print cell.DisplayFormat.NumberFormat

Zellenschriftart

Das Cell.Font-Objekt enthält Eigenschaften des Cell Font:

1234567891011121314151617181920 Zelle als Bereich dimmenZelle setzen = Range("A1")' Normal, Kursiv, Fett und Fett Kursivcell.Font.FontStyle = "Fett kursiv"' Gleich wiecell.Font.Bold = Truecell.Font.Italic = True' Schriftart auf Courier setzencell.Font.FontStyle = "Kurier"'Schriftfarbe einstellencell.Font.Color = vbBlue' odercell.Font.Color = RGB(255, 0, 0)'Schriftgröße einstellencell.Font.Size = 20

Kopieren und Einfügen

Alles einfügen

Bereiche/Zellen können von einem Ort zum anderen kopiert und eingefügt werden. Der folgende Code kopiert alle Eigenschaften des Quellbereichs in den Zielbereich (entspricht STRG-C und STRG-V)

1234567 'Einfache KopieBereich("A1:D20").KopierenWorksheets("Sheet2").Range("B10").Paste'oder' Vom aktuellen Blatt in das Blatt mit dem Namen 'Sheet2' kopierenRange("A1:D20").Kopierziel:=Worksheets("Sheet2").Range("B10")

Spezial einfügen

Ausgewählte Eigenschaften des Quellbereichs können mit der Option PASTESPECIAL zum Ziel kopiert werden:

123 ' Füge den Bereich nur als Werte einBereich("A1:D20").KopierenWorksheets("Sheet2").Range("B10").PasteSpecial Paste:=xlPasteValues

Hier sind die möglichen Optionen für die Option Einfügen:

12345678910111213 'Sondertypen einfügenxlPasteAllxlPasteAllExceptBordersxlPasteAllMergingConditionalFormatsxlPasteAllUsingSourceThemexlPasteColumnWidthsxlEinfügenKommentarexlPasteFormatsxlPasteFormelnxlPasteFormulasAndNumberFormatsxlPasteValidationxlPasteValuesxlPasteValuesAndNumberFormats

AutoFit-Inhalte

Die Größe der Zeilen und Spalten kann mit dem folgenden Code an den Inhalt angepasst werden:

12345 ' Ändern Sie die Größe der Zeilen 1 bis 5, um sie an den Inhalt anzupassenZeilen("1:5").AutoFit'Größe der Spalten A bis B an den Inhalt anpassenSpalten("A:B").AutoFit

Weitere Beispiele für Reichweiten

Es wird empfohlen, Macro Recorder zu verwenden, während Sie die erforderliche Aktion über die GUI ausführen. Es wird Ihnen helfen, die verschiedenen verfügbaren Optionen zu verstehen und zu verwenden.

Für jeden

Es ist einfacher, einen Bereich mit zu durchlaufen Für jeden konstruieren wie unten gezeigt:

123 Für jede Zelle im Bereich ("A1: B100")'Mach etwas mit der ZelleNächste Zelle

Bei jeder Iteration der Schleife wird eine Zelle des Bereichs der Variablen c zugewiesen und Anweisungen in der For-Schleife werden für diese Zelle ausgeführt. Die Schleife wird beendet, wenn alle Zellen verarbeitet wurden.

Sortieren

Sortieren ist eine Methode des Range-Objekts. Sie können einen Bereich sortieren, indem Sie Optionen für die Sortierung in Range.Sort angeben. Der folgende Code sortiert die Spalten A:C basierend auf dem Schlüssel in Zelle C2. Die Sortierreihenfolge kann xlAscending oder xlDescending sein. Header:= xlYes sollte verwendet werden, wenn die erste Zeile die Kopfzeile ist.

12 Columns("A:C").Sort key1:=Range("C2"), _order1:=xlAufsteigend, Header:=xlYes

Finden

Find ist auch eine Methode von Range Object. Es findet die erste Zelle, deren Inhalt den Suchkriterien entspricht, und gibt die Zelle als Range-Objekt zurück. Es kehrt zurück Nichts wenn es keine Übereinstimmung gibt.

Verwenden Nächstes finden -Methode (oder FindPrevious), um das nächste (vorherige) Vorkommen zu finden.

Der folgende Code ändert die Schriftart für alle Zellen im Bereich, die mit „John“ beginnen, in „Arial Black“:

12345 Für jedes c im Bereich("A1:A100")Wenn c wie "John*" Dannc.Font.Name = "Arial Black"Ende WennNächstes c

Der folgende Code ersetzt alle Vorkommen von „To Test“ bis „Passed“ im angegebenen Bereich:

12345678910 Mit Reichweite("a1:a500")Set c = .Find("Zu Testen", LookIn:=xlValues)Wenn nicht c nichts ist, dannerste Adresse = c.AdresseTunc.Wert = "Bestanden"Setze c = .FindNext(c)Schleife, während nicht c nichts ist und c.Adresse firstaddressEnde WennEnde mit

Beachten Sie, dass Sie einen Bereich angeben müssen, um FindNext zu verwenden. Außerdem müssen Sie eine Stoppbedingung angeben, sonst wird die Schleife für immer ausgeführt. Normalerweise wird die Adresse der ersten gefundenen Zelle in einer Variablen gespeichert und die Schleife wird gestoppt, wenn Sie diese Zelle wieder erreichen. Sie müssen auch prüfen, ob nichts gefunden wird, um die Schleife zu stoppen.

Bereichsadresse

Verwenden Sie Range.Address, um die Adresse im A1-Stil zu erhalten

123 MsgBox Range("A1:D10").Adresse' oderDebug.Print Range("A1:D10").Adresse

Verwenden Sie xlReferenceStyle (Standard ist xlA1), um die Adresse im R1C1-Stil zu erhalten

123 MsgBox Range("A1:D10").Address(ReferenceStyle:=xlR1C1)' oderDebug.Print Range("A1:D10").Address(ReferenceStyle:=xlR1C1)

Dies ist nützlich, wenn Sie in Variablen gespeicherte Bereiche bearbeiten und nur für bestimmte Adressen verarbeiten möchten.

Bereich zu Array

Es ist schneller und einfacher, einen Bereich in ein Array zu übertragen und die Werte dann zu verarbeiten. Sie sollten das Array als Variant deklarieren, um zu vermeiden, dass die Größe berechnet wird, die zum Auffüllen des Bereichs im Array erforderlich ist. Die Dimensionen des Arrays sind so eingestellt, dass sie der Anzahl der Werte im Bereich entsprechen.

123456789 Dim DirArray als Variante' Werte im Bereich im Array speichernDirArray = Range("a1:a5").Value' Schleife um die Werte zu verarbeitenFür jedes c in DirArrayDebug.Print cNächste

Array zu Bereich

Nach der Verarbeitung können Sie das Array in einen Bereich zurückschreiben. Um das Array im obigen Beispiel in einen Bereich zu schreiben, müssen Sie einen Bereich angeben, dessen Größe der Anzahl der Elemente im Array entspricht.

Verwenden Sie den folgenden Code, um das Array in den Bereich D1:D5 zu schreiben:

123 Range("D1:D5").Value = DirArrayRange("D1:H1").Value = Application.Transpose(DirArray)

Bitte beachten Sie, dass Sie das Array transponieren müssen, wenn Sie es in eine Zeile schreiben.

Summenbereich

12 SumOfRange = Application.WorksheetFunction.Sum(Range("A1:A10"))Debug.Print SumOfRange

Sie können viele in Excel verfügbare Funktionen in Ihrem VBA-Code verwenden, indem Sie Application.WorkSheetFunction angeben. vor dem Funktionsnamen wie im obigen Beispiel.

Zählbereich

1234567 ' Anzahl der Zellen mit Zahlen im Bereich zählenCountOfCells = Application.WorksheetFunction.Count(Range("A1:A10"))Debug.Print CountOfCells' Anzahl der nicht leeren Zellen im Bereich zählenCountOfNonBlankCells = Application.WorksheetFunction.CountA(Range("A1:A10"))Debug.Print CountOfNonBlankCells

Geschrieben von: Vinamra Chandra

Sie werden die Entwicklung der Website helfen, die Seite mit Ihren Freunden teilen

wave wave wave wave wave