Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA - Probleme mit Range.Value

Forumthread: VBA - Probleme mit Range.Value

VBA - Probleme mit Range.Value
02.12.2012 12:28:39
JörgS
Hallo,
ich bin absoluter Neuling was VBA angeht und schon beginnen die ersten Schwierigkeiten. Ich zerbreche mir den Kopf, warum klappt es mit einer einzelnen Zelle und warum nicht mit mehreren Zellen. Einfaches Beispiel (Summenbildung):
klappt:
Sub Macro19()
Dim x As Integer
Dim y As Integer
Dim z As Integer
x = Sheets("Tabelle2").Range("A2").Value
y = Sheets("Tabelle2").Range("B2").Value
z = x + y
Sheets("Tabelle2").Range("C2").Value = z
End Sub

klappt nicht:
Sub Macro20()
Dim x As Integer
Dim y As Integer
Dim z As Integer
x = Sheets("Tabelle2").Range("A2:A8").Value
y = Sheets("Tabelle2").Range("B2:B8").Value
z = x + y
Sheets("Tabelle2").Range("C2:C8").Value = z
End Sub

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - Probleme mit Range.Value
02.12.2012 12:33:44
Peter
Hallo Jörg,
mehrere Zellen kannst Du nicht in eine Integer-Variable speichern.
Du könntest mit Set vTemp = Sheets("Tabelle2").Range("A2:A8").Value
schreiben, wenn vTemp als Variant definiert wäre und das dann als Array auswerten.
Gruß Peter

AW: VBA - Probleme mit Range.Value
02.12.2012 13:25:24
JörgS
Hallo Peter,
Danke für deine schnelle Antwort. Das es mit mehreren Zellen als Typ "Integer" nicht möglich ist, habe ich jetzt verstanden, bloß mit der Eingabe Set vTemp (Dim vTemp As Variant) und mit der Array Auswertung noch nicht so richtig. Ist es möglich den Code kurz aufzuschreiben, wenn es nicht so viel Arbeit macht.
Gruß
Jörg

Anzeige
AW: VBA - Probleme mit Range.Value
02.12.2012 14:18:06
Peter
Hallo Jörg,
lass den Set-Befehl einmal weg und versuch es so:
Option Explicit
Public Sub Test()
Dim vTemp  As Variant
Dim iTemp  As Integer
vTemp = ThisWorkbook.Worksheets("Tabelle1").Range("A2:A8")
For iTemp = LBound(vTemp) To UBound(vTemp)
MsgBox vTemp(iTemp, 1)
Next iTemp
End Sub

Gruß Peter

Anzeige
Was soll das wdn? 1 Anzeige jeder 1zelnen ...
02.12.2012 15:01:09
Luc:-?
…Zelle, Peter?
Das hat doch gar nichts mit Datenfeldbildung zu tun! Und falls du meinst, statt MsgBox könnte ja ein Einlesebefehl in ein DFeld-Element stehen, dann hat das mit deiner ursprgl AW nichts mehr zu tun, weil dann das ganze DFeld auch als Integer vordefiniert sein dürfte/müsste und kein Variant mehr wäre. Es gibt da nämlich einen gewissen Unterschied zwischen einem DFeld vom Typ Variant (oder eben irgendeinem anderen) und einem Variant, also einer als Variant deklarierten Variable (auch bei Deklaration ohne Typ!), die alles beinhalten kann, auch ein Datenfeld beliebigen Untertyps. Darauf schien deine ursprgl AW hinauszulaufen.
Ein solches Datenfeld kann aber einfacher erzeugt wdn, nämlich mit WorksheetFunction.Transpose, ganz ohne Schleife. Natürl muss/kann da noch einiges beachtet wdn, aber das findet jeder schon selbst heraus.
Keiner von euch beiden, Peter und Hary, hat Jörg aber so richtig erklärt, warum nicht geht, was er vorhat. Das liegt daran, dass man ein Datenfeld bzw alle Werte eines Zellbereichs nicht einer als Einzelwert deklarierten Variable zuweisen kann. Das kann man nur mit Variant-Variablen machen. Sie hätte zumindest als Datenfeld deklariert wdn müssen und dann wäre eine Zuweisung auch nur einzelfeldweise möglich gewesen. Auch hätte die Übernahme eines Bereiches in eine Variant-Variable nicht automatisch zur Erzeugung eines echten Datenfeldes, für das LBound und UBound ausgewertet wdn kann, geführt, sondern die Variable hätte dann den Bereich repräsentiert, wahlweise als Objekt oder als Werte.
Gruß+schö1Ad, Luc :-?

Anzeige
AW: VBA - Probleme mit Range.Value
02.12.2012 12:43:25
hary
Hallo
Eine Moeglichkeit waere mit Formel einsetzen.
With Worksheets("Tabelle2")
.Range("C2:C8").FormulaLocal = "=A2+B2" 'Formel eintragen
.Range("C2:C8").Value = .Range("C2:C8").Value 'Formel durch Werte ersetzen
End With

gruss hary

Anzeige
AW: VBA - Probleme mit Range.Value
02.12.2012 13:27:26
JörgS
Hallo Hary,
hat mit der Lösung wunderbar geklappt. Danke nochmal.
Gruß
Jörg
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA: Probleme mit Range.Value in Excel lösen


Schritt-für-Schritt-Anleitung

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.
  2. Neues Modul erstellen: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" und wähle Einfügen > Modul.
  3. Code einfügen: Füge den folgenden Code in das Modul ein:
Sub Macro19()
    Dim x As Integer
    Dim y As Integer
    Dim z As Integer
    x = Sheets("Tabelle2").Range("A2").Value
    y = Sheets("Tabelle2").Range("B2").Value
    z = x + y
    Sheets("Tabelle2").Range("C2").Value = z
End Sub
  1. Code ausführen: Schließe den VBA-Editor und gehe zurück zu Excel. Drücke ALT + F8, wähle Macro19 und klicke auf Ausführen.

  2. Fehlerbehebung für mehrere Zellen: Um mit mehreren Zellen zu arbeiten, verwende den folgenden Code:

Sub Macro20()
    Dim vTemp As Variant
    Dim iTemp As Integer
    vTemp = Sheets("Tabelle2").Range("A2:A8").Value
    For iTemp = LBound(vTemp, 1) To UBound(vTemp, 1)
        Sheets("Tabelle2").Range("C2").Offset(iTemp - 1, 0).Value = vTemp(iTemp, 1) + Sheets("Tabelle2").Range("B" & (iTemp + 1)).Value
    Next iTemp
End Sub

Häufige Fehler und Lösungen

  • Fehler: "Typ nicht übereinstimmend"

    • Lösung: Stelle sicher, dass du für mehrere Zellen eine Variant-Variable verwendest, anstatt Integer.
  • Fehler: "Bereichszuweisung nicht möglich"

    • Lösung: Verwende vTemp = Sheets("Tabelle2").Range("A2:A8").Value, um die Werte als Array zu speichern.
  • Formel anstelle von Code verwenden: Wenn du Schwierigkeiten mit VBA hast, kannst du auch Formeln verwenden, um Werte zu berechnen. Beispiel:

With Worksheets("Tabelle2")
    .Range("C2:C8").FormulaLocal = "=A2+B2"
    .Range("C2:C8").Value = .Range("C2:C8").Value
End With

Alternative Methoden

  • WorksheetFunction: Nutze die Excel-Funktionen direkt in VBA, um Berechnungen durchzuführen. Zum Beispiel:
Dim result As Double
result = Application.WorksheetFunction.Sum(Sheets("Tabelle2").Range("A2:A8"))
  • Formeln einfügen: Setze Formeln in Zellen ein und ersetze sie anschließend durch Werte.

Praktische Beispiele

  1. Summenbildung mit mehreren Zellen:

    Sub SumRange()
    Dim result As Variant
    result = Application.Sum(Sheets("Tabelle2").Range("A2:A8"))
    Sheets("Tabelle2").Range("C2").Value = result
    End Sub
  2. Werte in ein Array lesen:

    Sub ReadValues()
    Dim values As Variant
    Dim i As Integer
    values = Sheets("Tabelle2").Range("A2:A8").Value
    For i = LBound(values, 1) To UBound(values, 1)
        Debug.Print values(i, 1)
    Next i
    End Sub

Tipps für Profis

  • Verwendung von Option Explicit: Dies hilft, Tippfehler in Variablennamen zu vermeiden und den Code klarer zu strukturieren.

  • Vermeide die Verwendung von Select und Activate: Arbeite direkt mit den Objekten, um die Performance zu verbessern.

  • Verwende Range.Value und Range.Formula: Achte darauf, beim Zuweisen von Werten den richtigen Typ zu verwenden (z.B. .Value für Werte, .Formula für Formeln).


FAQ: Häufige Fragen

1. Warum kann ich mehrere Zellen nicht in eine Integer-Variable speichern? Es liegt daran, dass Integer nur einen einzelnen Wert speichern kann. Für mehrere Zellen benötigst du eine Variant- oder Array-Variable.

2. Wie kann ich die Werte einer Range als Array lesen? Du kannst die Werte einer Range in eine Variant-Variable speichern. Beispiel: vTemp = Sheets("Tabelle2").Range("A2:A8").Value.

3. Was ist der Unterschied zwischen .Value und .Formula in VBA? .Value gibt den tatsächlichen Wert einer Zelle zurück, während .Formula die Formel zurückgibt, die in der Zelle eingegeben ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige