Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Einträge per VBA untereinander

Einträge per VBA untereinander
20.10.2015 11:54:14
Snewi
Hallo,
ich möchte gerne Daten aus einem bestimmten Bereich untereinander schreiben lassen per VBA!
von Bereich B4 : H15 nur die Nummern in Spalte B wo Spalte H einen Wert hat!
von Bereich B20 : H31 nur die Nummern in Spalte B wo Spalte H einen Wert hat!
alles untereinander in J und K nur die Werte ohne Formeln!
Wie geht das am einfachsten?
Gruß
https://www.herber.de/bbs/user/100899.xlsx

Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Einträge per VBA untereinander
20.10.2015 12:13:03
Daniel
Hi
naja, 0 ist auch ein Wert!
deiner Beschreibung nach kannst du einfach alles kopieren und einfügen.
ansonsten halt so:
dim Zelle as Long
dim Zeile as Long
Zeile = 4
for each Zelle in Range("H4:H15,H20:H31").specialcells(xlcelltypeformulas, 1)
if Zelle.value  0 then
Cells(Zeile, 10).value = Zelle.offset(0, -6).value
Cells(Zeile, 11).valeu = Zelle.value
end if
Zeile = Zeile + 1
next
Gruß Daniel

Anzeige
AW: Einträge per VBA untereinander
20.10.2015 12:26:10
Snewi
Es kommt der Fehler:
Steuervariable für for each muss vom Typ Variant oder Object sein!
Gruss

AW: Einträge per VBA untereinander
20.10.2015 12:26:50
Daniel
ups sorry
dim Zelle as Range
Gruß Daniel

AW: Einträge per VBA untereinander
20.10.2015 12:57:29
Snewi
Klappt soweit! Danke! Wie bekomme ich denn die Einträge direkt untereinander!
Gruß

Anzeige
AW: Einträge per VBA untereinander
20.10.2015 13:03:05
Daniel
nimm das Zeile = Zeile + 1 noch in den IF-Block mit auf.
Gruß Daniel

AW: Einträge per VBA untereinander
22.10.2015 09:42:26
Snewi
Hab da noch ein kleines Problem! Kann es sein das ich bei Range zu viele Bereiche angegeben habe?
For Each Zelle In Worksheets("SM").Range("I7:I18, R7:R18, I24:I35, R24:R35, I41:I52, R41:R52, I58:I69, R58:R69, I75:I86, R75:R86, I92:I103, R92:R103, I109:I120, R109:R120, I126:I137, R126:R137, I143:I154, R143:R154, I160:I171, R160:R171, I177:I188, R177:R188, I194:I205, R194:R205, I211:I222, R211:R222, I228:I239, R228:R239, I245:I256, R245:R256, I262:I273, R262:R273, I279:I290, R279:R290").SpecialCells(xlCellTypeFormulas, 1)
Wie kann ich das trotzdem ausführen?
Gruß

Anzeige
AW: Einträge per VBA untereinander
22.10.2015 10:58:07
Snewi
Vielleicht irgendwie so ähmlich?

Set myRange = Range("I7:I18, R7:R18, I24:I35, R24:R35, I41:I52, R41:R52, I58:I69, R58:R69, I75: _
I86, R75:R86, I92:I103, R92:R103, I109:I120, R109:R120, I126:I137, R126:R137")
Set myRange = Union(myRange, Range("I143:I154, R143:R154, I160:I171, R160:R171, I177:I188, R177: _
R188, I194:I205, R194:R205, I211:I222, R211:R222"))
Set myRange = Union(myRange, Range("I228:I239, R228:R239, I245:I256, R245:R256, I262:I273, R262: _
R273, I279:I290, R279:R290"))
For Each Zelle In Worksheets("SM").Range(myRange).SpecialCells(xlCellTypeFormulas, 1)

Anzeige
AW: Einträge per VBA untereinander
22.10.2015 12:55:35
Daniel
Hi
ja, im Prinzip so.
der Addressstring in der Range-Funktion darf maximal 256 Zeichen lang sein, mehr kann der Compiler an dieser stelle nicht verarbeiten, auch wenn die Range ansich aus mehr einzelnen Bereichen bestehen kann.
(die Bereiche werden im Adressstring durch Kommas getrennt, bis Excel 2003 konnte eine Range aus maximal 8192 einzelnen Bereichen bestehen, diese Zahl wurde aber erhöht)
Daher muss man dann andere Methoden verwenden, um die Range zu definieren, wenn die 256 Zeichen im Addressstring nicht ausreichen.
Über die UNION-Methode die Range "stückchenweise" zu erweitern ist eine davon.
bei Regelmässigen Zellbereichen kann auch INTERSECT (Schnittmenge aus zwei Ranges) bei der Berschreibung des gesamten Zellbereichs helfen
beispielsweise für deinen Fall:
Set Zeilen = Range("7:18,24:35,41:52,58:69")
Set Spalten = Range("I:I,R:R")
set myRange = Intersect(Zeilen, Spalten)
Gruß Daniel

Anzeige
AW: Einträge per VBA untereinander
22.10.2015 14:15:08
Snewi
For Each Zelle In Worksheets("SM").Range(myRange).SpecialCells(xlCellTypeFormulas, 1)
hier ist noch irgendein Fehler! hsb ich das syntaxmässig überhaupt richtig?
Gruß

AW: Einträge per VBA untereinander
22.10.2015 14:17:51
Snewi
Alles sieht so aus:

Sub kopieren()
Dim Zelle As Range
Dim myRange As Range
Dim Zeile As Long
Dim Zeilen As Range
Dim Spalten As Range
Zeile = 5
Set Zeilen = Range("7:18,24:35,41:52,58:69,75:86,92:103,109:120,126:137,143:154,160:171,177:188, _
194:205,211:222,228:239,245:256,262:273,279:290,279:290")
Set Spalten = Range("I:I,R:R")
Set myRange = Intersect(Zeilen, Spalten)
For Each Zelle In Worksheets("SM").Range(myRange).SpecialCells(xlCellTypeFormulas, 1)
If Zelle.Value  0 Then
Cells(Zeile, 2).Value = Zelle.Offset(0, -8).Value
Cells(Zeile, 3).Value = Zelle.Offset(0, -7).Value
Cells(Zeile, 4).Value = Zelle.Value
Zeile = Zeile + 1
End If
Next
End Sub

Anzeige
AW: Einträge per VBA untereinander
22.10.2015 16:15:10
daniel
Hi
wenn dann so:
Set Zeilen = Worksheets("SM").Range("7:18,..;279:290")
Set Spalten = Worksheets("SM").Range("I:I,R:R")
Set myRange = Intersect(Zeilen, Spalten)
For Each Zelle in myRange.Specialcells(...)
wenn mit range-Variablen arbeitest, dann gibst du das Tabellenblatt nur bei der Zuweisung (Set = ...) an. Wenn du in der Folge mit der Rangevariable arbeitest, dann brauchst du kein Tabellenblatt mehr, weil immer gleiche Tabellenblatt verwendet wird wie bei der Zuweisung.
wenn du in deiner Systematik arbeiten wollest, dann so:
For Each Zelle In Worksheets("SM").Range(myRange.Address).SpecialCells(xlCellTypeFormulas, 1)
was aber Unsinn ist, weils nicht notwendig ist und auch die 256-Zeichenproblematik nicht löst, weil du hier ja wieder die Adresse der Zellen als Textstring angibst.
Gruß Daniel

Anzeige
AW: Einträge per VBA untereinander
23.10.2015 08:37:51
Snewi
klappt super so! Vielen Dank
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Einträge per VBA untereinander


Schritt-für-Schritt-Anleitung

Um Daten aus einem bestimmten Bereich in Excel untereinander zu schreiben, kannst Du folgendes VBA-Skript verwenden. Dieses Skript extrahiert die Werte aus bestimmten Zellen und fügt sie untereinander in eine andere Spalte ein.

  1. Öffne Excel und drücke Alt + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.
  2. Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.
  3. Kopiere und füge den folgenden Code ein:
Sub kopieren()
    Dim Zelle As Range
    Dim myRange As Range
    Dim Zeile As Long
    Dim Zeilen As Range
    Dim Spalten As Range

    Zeile = 5
    Set Zeilen = Range("7:18,24:35,41:52,58:69,75:86,92:103,109:120,126:137,143:154,160:171,177:188,194:205,211:222,228:239,245:256,262:273,279:290")
    Set Spalten = Range("I:I,R:R")
    Set myRange = Intersect(Zeilen, Spalten)

    For Each Zelle In Worksheets("SM").Range(myRange).SpecialCells(xlCellTypeFormulas, 1)
        If Zelle.Value <> 0 Then
            Cells(Zeile, 2).Value = Zelle.Offset(0, -8).Value
            Cells(Zeile, 3).Value = Zelle.Offset(0, -7).Value
            Cells(Zeile, 4).Value = Zelle.Value
            Zeile = Zeile + 1
        End If
    Next
End Sub
  1. Schließe den VBA-Editor und führe das Makro aus, um die Daten zu extrahieren.

Häufige Fehler und Lösungen

  • Fehler: Steuervariable für For Each muss vom Typ Variant oder Object sein.

    • Lösung: Ändere die Deklaration von Dim Zelle As Long zu Dim Zelle As Range.
  • Fehler bei der Range-Deklaration.

    • Wenn Du mehr als 256 Zeichen in einer Range-Anweisung verwendest, kann Excel dies nicht verarbeiten. Verwende die Union-Methode, um die Bereiche zu kombinieren.

Alternative Methoden

Wenn Du eine große Anzahl von Zellen verwalten möchtest, kannst Du auch die Union-Methode verwenden, um die Bereiche schrittweise zu definieren:

Set myRange = Union(Range("I7:I18, R7:R18"), Range("I24:I35, R24:R35"))

Das ermöglicht eine flexiblere Handhabung von Zellbereichen und verhindert das 256-Zeichen-Limit.


Praktische Beispiele

Beispiel 1: Einträge untereinander hinzufügen.

Falls Du nur bestimmte Werte untereinander schreiben möchtest, kannst Du den folgenden Code anpassen:

If Zelle.Value > 0 Then
    Cells(Zeile, 1).Value = Zelle.Value
    Zeile = Zeile + 1
End If

Beispiel 2: Daten in eine andere Tabelle kopieren.

Du kannst das Skript auch so anpassen, dass es Daten in eine andere Tabelle überträgt, indem Du den Tabellennamen in den Cells-Befehlen änderst.


Tipps für Profis

  • Nutze Option Explicit am Anfang Deines Moduls, um sicherzustellen, dass alle Variablen deklariert sind. Das hilft, Fehler zu vermeiden.
  • Verwende Application.ScreenUpdating = False, um das Flackern des Bildschirms während der Ausführung des Codes zu verhindern, und setze es am Ende wieder auf True.
  • Wenn Du häufig mit VBA arbeitest, speichere Deine Arbeitsmappe im .xlsm-Format, um die Makros zu erhalten.

FAQ: Häufige Fragen

1. Wie kann ich in einer Excel Zelle untereinander schreiben? Du kannst dies erreichen, indem Du ALT + ENTER drückst, während Du in eine Zelle schreibst.

2. Was ist der Vorteil des Untereinander Schreibens in Excel? Untereinander schreiben macht es einfacher, Daten übersichtlich zu präsentieren und zu analysieren, besonders wenn Du viele Werte hast.

3. Wie kann ich Fehler bei der VBA-Ausführung beheben? Überprüfe die Syntax Deines Codes und stelle sicher, dass alle Zellreferenzen korrekt sind. Verwende Debugging-Tools im VBA-Editor, um Fehler zu identifizieren.

4. Wie kann ich die Datenformatierung für untereinander geschriebene Werte ändern? Du kannst die Formatierung der Zellen mit VBA ändern, indem Du die NumberFormat-Eigenschaft verwendest. Beispiel: Cells(Zeile, 1).NumberFormat = "0.00".

5. Gibt es eine Möglichkeit, die Werte direkt in Word untereinander zu schreiben? Ja, in Word kannst Du die gleiche Technik verwenden, um Text in einer Zelle untereinander anzuordnen, indem Du ALT + ENTER verwendest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige