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

Forumthread: Mit VBA nur Zellen mit Inhalt kopieren

Mit VBA nur Zellen mit Inhalt kopieren
30.03.2021 12:26:48
ponny
Hallo Zusammen,
dies ist leider noch ein Topic aus dem Jänner, zu welchem ich leider nicht früher dazu kam.
Mein Problem ist, dass ich Inhalte aus vorgegebenen Zellen [Ishikawa 1 - Fehler 1..100], (leider verbundene Zellen), mittels Button "Import" auf [Ishikawa2] in eine Spalte [Ishikawa 2- Spalte A40:A139] einfügen möchte.
Vor dem Import möchte ich die Zellen leeren, und anschließend neu mit den Inahlten aus Ishikawa 1 befüllen.
Es sollen jedoch nur Zellen mit Inhalt nach einander kopiert werden und leere Zellen ausgelassen werden.
Zudem soll die jeweilige Kategorie "Mensch", "Maschine", usw. daneben [Spalte B40:B139] eingefügt werden.
Ist dies gemacht, und wurde jede Zeile anschließend bewertet - dies klappt schon mal :), soll mittels der Selektion (funktioniert bereits auch durch doppelklicken, ausgewählte Fehler aus Spalte A und Ketegorie aus Spalte B, mittels dem Button "Export auf [Ishikawa2] in [Ishikawa 3 in Spalte A6:A.. und Q6:..] kopiert werden. (anfangs erst wieder alle Zellen leeren)
- Ist es überhaupt möglich den Inhalt von verbundenen Zellen in eine einzige Zelles mittels VBA zu kopieren?
- ='Ishikawa 1'!F49 .. würde zwar funktionieren, jedoch hätte ich dann leere Zeilen und bei Änderungen kann ich es nicht reseten.
Hat ihr jemand eine Idee?
Danke schon mal recht herzlich für eure Unterstützung.
VG ponny
PS: Datei im Anhang und KW: 123
https://www.herber.de/bbs/user/145205.xlsm

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mit VBA nur Zellen mit Inhalt kopieren
30.03.2021 13:30:35
fcs
Hallo pony,
ich hab schon eine Idee wie man es umsetzen kann - ist halt etwas mühselig für die 5 Kategorien den Versatz der Fehler Texte alle 5 Zeilen um eine Spalte nach links und abhängig der Kategorie mal unten, mal nach oben die Zeilen zu zählen.
- Ist es überhaupt möglich den Inhalt von verbundenen Zellen in eine einzige Zelles mittels VBA zu kopieren?
- ='Ishikawa 1'!F49 .. würde zwar funktionieren, jedoch hätte ich dann leere Zeilen und bei Änderungen kann ich es nicht reseten.

Kopieren funktioniert nicht, aber man kann die Inhalte aus den verbundene Zellen auslesen und in die Einzelzellen eintragen.
LG
Franz

Anzeige
AW: Mit VBA nur Zellen mit Inhalt kopieren
30.03.2021 13:57:55
ponny
Hallo Franz,
besser 1x mühselig als jedes mal händisch zu übertragen.
Aber schön zu hören, dass es mit verbundenen Zellen möglich ist :)
Das hilft mir schon mal weiter. Händische Masken automatisieren klingt immer einfacher als es ist.
BG und danke schon mal :)

AW: Mit VBA nur Zellen mit Inhalt kopieren
30.03.2021 16:02:37
fcs
Hallo ponny,
ich hab dir in der Datei die Makros zum Importieren aus "Ishikawa 1" und zum Exportieren nach "Ishikawa 3" überarbeitet.
https://www.herber.de/bbs/user/145212.xlsm
Am Start der Makros erfolgt jeweils eine Sicherheitsabfrage, damit nicht versehentlich Daten überschrieben bzw. gelöscht werden.
LG
Franz

Anzeige
Nachtrag - Mit VBA nur Zellen mit Inhalt kopieren
30.03.2021 16:17:11
fcs
Hallo ponny,
ich hatte im Export-Makro vergessen, die Kategorie in Spalte Q einzutragen.
Prüfe auf Blatt "Ishigara 3" mal den Inhalt von Zelle Q5. Hier steht per Formel immer "MENSCH" oder "HUMAN", je nach Spracheinstellung. Ist das so gewollt?
LG
Franz
Private Sub CB_Export5W_Click() 'Export nach Blatt "Ishikawa 3"
If MsgBox("Sollen die selektierten Fehler nach ""Ishikawa 3"" exportiert werden?", _
vbYesNo + vbQuestion, "E X P O R T   N A C H   I S H I K A W A   3") = vbNo Then Exit  _
Sub
Dim sRow As Long, tRow As Long
Application.ScreenUpdating = False
With Sheets("Ishikawa 3")
.Unprotect "123"
'Löschen der Daten - Inhalte der Zellen -  bevor diese neu importiert werden:
.Range("A6:Q25").ClearContents  'Eingaben 5 - Warum - Analyse
.Range("B29:Q48").ClearContents 'Eingaben Ergebnisse aus 5 - Warum-Analyse
tRow = 6 'ab dieser Zeile werden die Werte eingetragen
For sRow = 40 To 139
If Cells(sRow, 25) = "þ" Then
If tRow > 25 Then
MsgBox "In Blatt """ & .Name & """ sind alle Zeilen bis Zeile 25 ausgefüllt!"  _
& vbLf _
& "Bitte selektieren sie weniger Fehler und versuchen Sie es noch einmal.",  _
_
vbInformation + vbOKOnly, "E X P O R T   N A C H   I S H I K A W A   3"
Exit For
End If
.Cells(tRow, 1) = Cells(sRow, 1) ' Fehler 1-100
                .Cells(tRow, 17) = Cells(sRow, 2) ' Kategorie
tRow = tRow + 1
End If
Next sRow
.Protect "123"
End With
Application.ScreenUpdating = True
End Sub


Anzeige
AW: Nachtrag - Mit VBA nur Zellen mit Inhalt kopieren
30.03.2021 20:25:24
ponny
Hallo Franz,
super genial, danke.
Habe es gerade ins original File eingebettet und klappt einwandfrei.
Danke dir :))
Eine Frage hätte ich noch zum Sortieren.
Wenn ich Abwärts sortiere, auf der Ishikawa2 Tabelle, dann reiht er mir zuerst die n.a. auf und erst anschließend absteigend die restlichen Zeilen.
Selbst wenn ich als Wert nicht n.a. sondern "0" ausgebe, passiert dies so.
Was mache ich denn hier falsch?
Danke und viele Grüße
ponny

Anzeige
AW: Nachtrag - Mit VBA nur Zellen mit Inhalt kopieren
31.03.2021 17:48:25
fcs
Hallo ponny,
du darfst die 0 nicht in Anführungszeichen setzten!
=WENN(C40&lt&gt0;RUNDEN(MITTELWERT(C40:W40);1);0)
"0" ist Text und wird beim Sortieren abwärts vor den Zahlen einsortiert.
LG
Franz

AW: Nachtrag - Mit VBA nur Zellen mit Inhalt kopieren
01.04.2021 08:18:39
ponny
Hallo Franz,
bist der Beste :) danke :)
und ich war wohl schon Excel blind, das ich da nicht drauf gekommen war.
Danke nochmals, spitzen Hilfe :)
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Nur Zellen mit Inhalt kopieren: VBA-Anleitung für Excel


Schritt-für-Schritt-Anleitung

Um nur Zellen mit Inhalt aus einem Bereich in Excel zu kopieren, kannst du VBA verwenden. Hier ist eine einfache Anleitung, die dir hilft, dies zu erreichen:

  1. Öffne deine Excel-Datei und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu, indem du mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" klickst und "Einfügen" > "Modul" auswählst.

  3. Kopiere und füge den folgenden VBA-Code in das Modul ein:

    Private Sub CB_Import_Click()
       Dim sRow As Long, tRow As Long
       Application.ScreenUpdating = False
    
       ' Leere Zielbereich
       Sheets("Ishikawa 2").Range("A40:A139").ClearContents
    
       tRow = 40 ' Zielzeile
       For sRow = 1 To 100 ' Quelle von Ishikawa 1
           If Not IsEmpty(Sheets("Ishikawa 1").Cells(sRow, 1)) Then
               Sheets("Ishikawa 2").Cells(tRow, 1) = Sheets("Ishikawa 1").Cells(sRow, 1)
               Sheets("Ishikawa 2").Cells(tRow, 2) = "Kategorie" ' Beispielkategorie
               tRow = tRow + 1
           End If
       Next sRow
       Application.ScreenUpdating = True
    End Sub
  4. Schließe den VBA-Editor und füge einen Button in dein Excel-Dokument ein. Weise diesem Button das Makro CB_Import_Click zu.

  5. Klicke auf den Button, um die Zellen mit Inhalt zu importieren.


Häufige Fehler und Lösungen

  • Problem: Makro läuft nicht oder gibt Fehler aus.

    • Lösung: Überprüfe, ob die Arbeitsblätter "Ishikawa 1" und "Ishikawa 2" korrekt benannt sind. Achte auch darauf, dass die Zellen im Quellbereich tatsächlich Inhalte enthalten.
  • Problem: Verbundene Zellen werden nicht korrekt kopiert.

    • Lösung: VBA kann den Inhalt verbundener Zellen nicht direkt kopieren. Du musst den Inhalt der verbundenen Zellen zuerst in Einzelzellen aufteilen.

Alternative Methoden

Wenn du nicht mit VBA arbeiten möchtest, gibt es auch Excel-Funktionen, um leere Zellen zu umgehen:

  1. Du kannst die Funktion FILTER (verfügbar in Excel 365 und Excel 2021) verwenden:

    =FILTER(A1:A100, A1:A100<>"")

    Dies filtert alle leeren Zellen heraus.

  2. Eine weitere Möglichkeit ist die Verwendung von WENN und VERGLEICH, um nur die gewünschten Werte zu extrahieren.


Praktische Beispiele

Hier sind einige praktische Beispiele, die du verwenden kannst:

  1. Import von Fehlerkategorien:

    If Not IsEmpty(Sheets("Ishikawa 1").Cells(sRow, 1)) Then
       Sheets("Ishikawa 2").Cells(tRow, 1) = Sheets("Ishikawa 1").Cells(sRow, 1)
       Sheets("Ishikawa 2").Cells(tRow, 2) = Sheets("Ishikawa 1").Cells(sRow, 2) ' Übertrage Kategorie
    End If
  2. Export nach Ishikawa 3: Du kannst ein ähnliches Makro wie oben erstellen, um die Daten nach "Ishikawa 3" zu exportieren, indem du einfach die Ziel- und Quellblätter änderst.


Tipps für Profis

  • Achte darauf, die ScreenUpdating-Eigenschaft auf False zu setzen, um die Leistung zu verbessern.
  • Verwende Fehlerbehandlungsroutinen, um sicherzustellen, dass dein Makro auch bei unerwarteten Problemen weiterläuft.
  • Teste dein Makro in einer Kopie deiner Datei, um Datenverlust zu vermeiden.

FAQ: Häufige Fragen

1. Ist es möglich, den Inhalt von verbundenen Zellen in eine einzige Zelle zu kopieren?
Ja, jedoch musst du den Inhalt zuerst in Einzelzellen aufteilen, da VBA das direkte Kopieren von verbundenen Zellen nicht unterstützt.

2. Was mache ich, wenn ich beim Sortieren von Zahlen Probleme habe?
Stelle sicher, dass du die Zahl nicht in Anführungszeichen setzt, da dies die Zahl als Text behandelt und die Sortierung beeinflusst. Verwende einfach 0 statt "0".

3. Wie kann ich Makros in Excel aktivieren?
Gehe zu "Datei" > "Optionen" > "Trust Center" > "Einstellungen für das Trust Center" und aktiviere die Makros.

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