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

Forumthread: Daten aus Zeile auslesen und in Spalte e

Daten aus Zeile auslesen und in Spalte e
29.04.2022 11:23:11
Detlef
Betreff: Daten aus Zeile auslesen (nur Zelleninhalte > blank) und in Spalte (anderes Tabellenblatt) eintragen (ohne Leerzeilen) (quasi transponieren)
https://www.herber.de/bbs/user/152754.xlsx
Grundlage ist folgende Tabelle:
Spalte A | Spalte B | Spalte C | Spalte D | Spalte E | ==> ca 50 Spalten
Zeile 1 | Text1 | Text2 | Text3 | Text4 |
Zeile 2 Person1| x | | n | |
Zeile 3 Person2| | | n | |
Zeile 4 Person3| x | x | n | x |
Zeile 5 Person4| x | | | |
Zeile 6 Person5| x | | n | M |
Zeile 7 Person6| x | | | |
noch weitere ca. 100 Personen
Ziel ist eine Extraktionsmöglichkeit (Zusammenfassung) pro Zeile (also pro Person) {es sollen nur die Daten angezeigt /ausgelesen werden, in denen Zellen ein Wert steht.
Ausgelesen soll aber der entsprechende Wert aus Zeile 1
Also folgende Tabelle
Für Person 1 ergibt sich folgende Zusammenfassung:
Text1
Text3
Für Person 2 würde (bei entsprechender Auswahl) folgende Zusammenfassung ergeben:
Text3
Für Person 3 würde (bei entsprechender Auswahl) folgende Zusammenfassung ergeben:
Text1
Text2
Text3
Text4
Für Person 4 würde (bei entsprechender Auswahl) folgende Zusammenfassung ergeben:
Text1
usw.
Es gibt sicherlich hierzu viele Möglichkeiten. Mit Verketten und einfügen des Sonderzeichens 'Zeichen(10) {Zeilenumbruch} und alles in eine Zelle
habe ich auch schon versucht. Aber bei 50 Spalten wird das zu lang und die Abfrage nach Leerzeilen (die dann nicht auftauchen sollen) ist zu komplex.
Da mehrere Personen an der Tabelle arbeiten werden und die Einträge 'X' oder so sich laufend ändert, muss es eine intuitive Anwendung werden.
Mit INDEX Funktion habe ich schon probiert, aber noch nicht weiter gekommen.
Die Frage ist jetzt, welche Methode ist am Besten?
==> Über VBA alle Daten einer Zeile auslesen (also Zellen finden, die einen Eintrag aufweisen und immer den Wert aus Zeile 1 zurückgeben und in ein neues (oder vorgegebenes Tabellenblatt übertragen und untereinander ohne Leerzeilen auflisten.
==> oder über Tabellenfunktionen
==> oder Formeln, die von Tabellen 1 nach Tabelle NN die entsprechenden Werte (sofort) auslesen / anzeigen.
Hat hier jemand solche Tabellenauswertung schon mal hinter sich oder als Beispiel parat. Im Archiv habe ich noch nichts entsprechendes gefunden.
Danke und VG
DH
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Daten aus Zeile auslesen und in Spalte e
29.04.2022 13:12:14
Fennek
Hallo,
als ersten Ansatz:

'weiteres Sheet("neu") anlegen
Sub T_1()
For i = 2 To 8
ls = Cells(i, Columns.Count).End(xlToLeft).Column
Range(Cells(i, 3), Cells(i, ls)).Copy
Sheets("neu").Cells(Rows.Count, 2).End(xlUp).Offset(1).PasteSpecial xlPasteAll, , True, True
Next i
End Sub
mfg
Anzeige
AW: Daten aus Zeile auslesen und in Spalte e
29.04.2022 13:53:13
UweD
Hallo
die Ausgangsdaten in der Musterdatei stimmen nicht mit der Darstellung hier im Text überein.
Ich bin hiervon ausgegangen
 ABCDEF
1 Text1Text2Text3Text4 
2Person1x n  
3Person2  n  
4Person3xxnx 
5Person4x    
6Person5x nM 
7Person6x    
8      
9      
10      
11      

in ein Normales Modul

Sub Personen()
Dim TB1 As Worksheet, TB2 As Worksheet, LR As Long, i As Long, LC As Integer, Z As Long
Dim SP As Integer, ZE As Integer, j As Integer
Set TB1 = Sheets("Ausgangdaten")
Set TB2 = Sheets("Zusammenfassung")
SP = 1 'Personen in Spalte A
ZE = 1
'Reset
TB2.UsedRange.Delete
With TB1
LR = .Cells(.Rows.Count, SP).End(xlUp).Row 'letzte Zeile der Spalte
LC = .Cells(1, .Columns.Count).End(xlToLeft).Column 'letzte Spalte einer Zeile
For i = 2 To LR
TB2.Cells(Z + 1, 1) = .Cells(i, SP)
Z = Z + 1
For j = 2 To LC
If .Cells(i, j)  "" Then
TB2.Cells(Z + 1, 1) = .Cells(1, j)
TB2.Cells(Z + 1, 1).Resize(1, 2).HorizontalAlignment = xlCenterAcrossSelection
Z = Z + 1
End If
Next j
Next i
End With
End Sub
 ABC
1Person1  
2Text1  
3Text3  
4Person2  
5Text3  
6Person3  
7Text1  
8Text2  
9Text3  
10Text4  
11Person4  
12Text1  
13Person5  
14Text1  
15Text3  
16Text4  
17Person6  
18Text1  
19   

LG UweD
Anzeige
AW: Daten aus Zeile auslesen und in Spalte e
29.04.2022 13:57:45
UweD
hatte ZE = Zeile mit Kopfdaten noch vergessen (um es variabel zu halten)

Sub Personen()
Dim TB1 As Worksheet, TB2 As Worksheet, LR As Long, i As Long, LC As Integer, Z As Long
Dim SP As Integer, ZE As Integer, j As Integer
Set TB1 = Sheets("Ausgangdaten")
Set TB2 = Sheets("Zusammenfassung")
SP = 1 'Personen in Spalte A
ZE = 1 'Zeile mit Kopfdaten / hier =1
'Reset
TB2.UsedRange.Delete
With TB1
LR = .Cells(.Rows.Count, SP).End(xlUp).Row 'letzte Zeile der Spalte
LC = .Cells(ZE, .Columns.Count).End(xlToLeft).Column 'letzte Spalte einer Zeile
For i = 2 To LR
TB2.Cells(Z + 1, 1) = .Cells(i, SP)
Z = Z + 1
For j = 2 To LC
If .Cells(i, j)  "" Then
TB2.Cells(Z + 1, 1) = .Cells(ZE, j)
TB2.Cells(Z + 1, 1).Resize(1, 2).HorizontalAlignment = xlCenterAcrossSelection
Z = Z + 1
End If
Next j
Next i
End With
End Sub

Anzeige
AW: Daten aus Zeile auslesen und in Spalte e
02.05.2022 09:02:15
Detlef
Hallo UweD,
hatte heute leider erst die Möglichkeit, deinen Vorschlag auszuprobieren. Die erste Idee ist schon mal sehr gut.
Jetzt habe ich noch folgende Frage/Anliegen:
Im Arbeitsblatt ZUSAMMENFASSUNG werden jetzt alle Datensätze der Spalte Personen ausgewertet.
Es ist jetzt noch (zusätzlich) der Bedarf des Anwendenden, nur von einer Bestimmten Person die Daten auszulesen.
Das heißt, im Tabellenblatt ZUSAMMENFASSUNG steht der Name der Person (oder Kurzeichen) {Inhalt der Spalte A}, die ausgewählte werden soll. (im Feld G6)
Die Zusammenfassung für die ausgewählte Person soll ab Zelle B15 beginnen.
Wäre das Umsetzbar?
Vielen Dank im voraus
Detlef H.
Anzeige
AW: Daten aus Zeile auslesen und in Spalte e
02.05.2022 11:50:30
UweD
Hallo nochmal
Wenn in G6 was drinsteht, dann nur diese Person. Sonst alle.

Sub Personen()
Dim TB1 As Worksheet, TB2 As Worksheet, LR As Long, i As Long, LC As Integer, Z As Long
Dim SP As Integer, ZE As Integer, j As Integer, St As Long, NName As String, RNG As Range
Set TB1 = Sheets("Ausgangdaten")
Set TB2 = Sheets("Zusammenfassung")
SP = 1 'Personen in Spalte A
ZE = 1 'Zeile mit Kopfdaten / hier =1
Z = 15 'Erste Zielzeile
Set RNG = TB2.Range("G6")
Application.ScreenUpdating = False
'Reset
TB2.Range("A:F").Clear
With TB1
LR = .Cells(.Rows.Count, SP).End(xlUp).Row 'letzte Zeile der Spalte
LC = .Cells(ZE, .Columns.Count).End(xlToLeft).Column 'letzte Spalte einer Zeile
NName = RNG.Value
If NName  "" Then 'Wenn Name vorgegeben wurde
St = WorksheetFunction.CountIf(.Columns(SP), NName) 'ist der Name vorhanden?
If St > 0 Then
St = WorksheetFunction.Match(NName, .Columns(SP), 0) 'in welcher Zeile
LR = St 'nur diese Zeile abarbeiten
Else
MsgBox NName & ": nicht vorhanden"
Exit Sub
End If
Else
St = 2
End If
For i = St To LR
TB2.Cells(Z, 2) = .Cells(i, SP)
Z = Z + 1
For j = 2 To LC
If .Cells(i, j)  "" Then
TB2.Cells(Z, 2) = .Cells(ZE, j)
TB2.Cells(Z, 2).Resize(1, 2).HorizontalAlignment = xlCenterAcrossSelection
Z = Z + 1
End If
Next j
Next i
End With
End Sub
LG UweD
Anzeige
AW: Daten aus Zeile auslesen und in Spalte e
02.05.2022 15:37:27
Detlef
Hallo Uwe, das sieht schon mal sehr gut aus mit der Selektion.
Da ich das Makro noch an das Original (Spalten und Zeilen sind z.T. etwas verschoben) anpassen muß, könnte
es sein , dass ich mich noch einmal melde, wenn es die einzlenen Prograamierschritte geht.
Vielen Dank noch einmal
Detlef H.
Anzeige
AW: Daten aus Zeile auslesen und in Spalte e
05.05.2022 13:31:04
Detlef
Hallo Uwe,
meine "erste" Aufgabe habe ich Dank deiner Hilfe bewältigen können. Jetzt kommt noch eine zweite Anforderung:
Eine Verknüpfung mit einer zweiten Tabelle, die quasi ähnlich aufgebaut ist.
- Ich habe das Makro für die Auswertung der Zeiten Tabelle schon fertig
- Ich stelle mir das so vor, dass an der Stelle, an der in der zweiten Schleife die Tabellenkopfbezeichnung {Text1} ausgelesen wird,
dieser Wert an das zweite Macro, das an der Stelle startet, übergeben wird, damit die Werte, die zu {Text1} gespeichert sind (Anzahl: Null bis unendlich viel),
wieder untereinander aufgelistet werden.
For j = 2 To LC
If .Cells(i, j) "" Then
TB2.Cells(Z, 2) = .Cells(ZE, j)
HIER (so stelle ich mir das vor) SOLL/KÖNNTE DASZWEITE MACRO AUFGEFUFEN WERDEN MIT ÜBERGABE DER VARIBLE;DIE GERADE GEFUNDEN WORDEN IST!
TB2.Cells(Z, 2).Resize(1, 2).HorizontalAlignment = xlCenterAcrossSelection
Z = Z + 1
End If
Dann beginnt ja die zweite Schleife, zum auslesen des Zeiten Eintrages {Text2}.
Ist das so verständlich beschrieben? Sonst muss ich noch wieder eine Beispieldatei hochladen.
Meine zweite Frage lautet: können Zellformatierungen {z.B. TB2.Cells(Z, 3).Resize(1, 2).HorizontalAlignment = xlLeft
TB2.Cells(Z, 3).Resize(1, 2).WrapText = False}
als ein Argument zusammengefasst werden?
Welche Bedeutung hat die Bereichsbezeichnung {Resize(1, 2). in diesem Fall?
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Daten aus Zeilen auslesen und in Spalte E übertragen


Schritt-für-Schritt-Anleitung

  1. Vorbereitung: Öffne die Excel-Datei mit den Ausgangsdaten. Stelle sicher, dass die erste Zeile die Kopfzeilen enthält.

  2. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen. Füge ein neues Modul hinzu (Einfügen > Modul).

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

    Sub Personen()
       Dim TB1 As Worksheet, TB2 As Worksheet, LR As Long, i As Long, LC As Integer, Z As Long
       Dim SP As Integer, ZE As Integer, j As Integer, St As Long, NName As String, RNG As Range
       Set TB1 = Sheets("Ausgangdaten")
       Set TB2 = Sheets("Zusammenfassung")
       SP = 1 ' Personen in Spalte A
       ZE = 1 ' Zeile mit Kopfdaten
       Z = 15 ' Erste Zielzeile
       Set RNG = TB2.Range("G6")
    
       Application.ScreenUpdating = False
       ' Reset
       TB2.Range("A:F").Clear
    
       With TB1
           LR = .Cells(.Rows.Count, SP).End(xlUp).Row ' letzte Zeile der Spalte
           LC = .Cells(ZE, .Columns.Count).End(xlToLeft).Column ' letzte Spalte einer Zeile
           NName = RNG.Value
           If NName <> "" Then ' Wenn Name vorgegeben wurde
               St = WorksheetFunction.CountIf(.Columns(SP), NName) ' ist der Name vorhanden?
               If St > 0 Then
                   St = WorksheetFunction.Match(NName, .Columns(SP), 0) ' in welcher Zeile
                   LR = St ' nur diese Zeile abarbeiten
               Else
                   MsgBox NName & ": nicht vorhanden"
                   Exit Sub
               End If
           Else
               St = 2
           End If
           For i = St To LR
               TB2.Cells(Z, 2) = .Cells(i, SP)
               Z = Z + 1
               For j = 2 To LC
                   If .Cells(i, j) <> "" Then
                       TB2.Cells(Z, 2) = .Cells(ZE, j)
                       TB2.Cells(Z, 2).Resize(1, 2).HorizontalAlignment = xlCenterAcrossSelection
                       Z = Z + 1
                   End If
               Next j
           Next i
       End With
    End Sub
  4. Makro ausführen: Schließe den VBA-Editor und führe das Makro über Entwicklertools > Makros aus.

  5. Ergebnisse prüfen: Überprüfe das Arbeitsblatt "Zusammenfassung", um sicherzustellen, dass die Daten aus der Zeile korrekt ausgelesen und ohne Leerzeilen aufgelistet wurden.


Häufige Fehler und Lösungen

  • Fehler: "Nicht vorhanden" Meldung: Überprüfe, ob der eingegebene Name in Zelle G6 korrekt ist und in der Spalte A der Ausgangstabelle existiert.

  • Daten erscheinen nicht: Stelle sicher, dass das Zielblatt ("Zusammenfassung") nicht geschützt ist und dass das Makro richtig ausgeführt wurde.

  • Makro funktioniert nicht: Stelle sicher, dass du die richtigen Berechtigungen hast, um Makros auszuführen, und dass die Sicherheitseinstellungen in Excel entsprechend konfiguriert sind.


Alternative Methoden

  • Formeln verwenden: Du kannst auch die Funktion FILTER (in Excel 365) verwenden, um Daten aus einer Zeile auszulesen und in eine Spalte zu übertragen. Beispiel:

    =FILTER(A2:D7, A2:A7="x")
  • Power Query: Eine weitere Möglichkeit ist, Power Query zu verwenden, um Daten aus einer Tabelle auszulesen und zu transformieren. Du kannst die Abfrage so einstellen, dass nur die relevanten Daten angezeigt werden.


Praktische Beispiele

  • Beispiel 1: Angenommen, du hast eine Liste von Teilnehmern in Spalte A und verschiedene Merkmale in den Spalten B bis E. Der obige VBA-Code ermöglicht es dir, nur die Merkmale der Teilnehmer auszulesen, die "x" in den entsprechenden Zellen haben.

  • Beispiel 2: Wenn du nur bestimmte Personen auslesen möchtest, trage den Namen in Zelle G6 ein. Das Makro wird dann nur die Daten für diese Person auflisten.


Tipps für Profis

  • Nutze Fehlerbehandlung in deinem VBA-Code, um sicherzustellen, dass das Makro auch dann funktioniert, wenn unerwartete Eingaben auftreten.

  • Du kannst den Code erweitern, um Datenvalidierung hinzuzufügen, um sicherzustellen, dass nur die gewünschten Werte in Zelle G6 eingegeben werden.

  • Überlege, ob du Daten automatisiert aktualisieren möchtest. Du kannst das Makro so einstellen, dass es beim Öffnen der Datei automatisch ausgeführt wird.


FAQ: Häufige Fragen

1. Frage
Wie kann ich die Daten aus einer bestimmten Zeile auslesen?
Antwort: Du kannst die Cells-Eigenschaft in VBA verwenden, um gezielt auf die Zeile zuzugreifen, z.B. Cells(2, 1) für die erste Zelle in der zweiten Zeile.

2. Frage
Kann ich die Daten auch in eine andere Datei exportieren?
Antwort: Ja, du kannst die Methode Workbooks.Open verwenden, um eine andere Datei zu öffnen und dann die Daten entsprechend zu übertragen.

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