Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1880to1884
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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
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.
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

323 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige