Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema ListBox
BildScreenshot zu ListBox ListBox-Seite mit Beispielarbeitsmappe aufrufen

Aus Matrix Spalten auslesen, die best. Wert haben


Betrifft: Aus Matrix Spalten auslesen, die best. Wert haben von: Heike
Geschrieben am: 25.09.2019 17:10:30

Hallo,
ich suche nach einer Lösung für ein spezielles Problem mit einer Kreuztabelle / Matrix
Die Matrix sieht exemplarisch so aus

Mitarbeiter | Ananas | Käse | Paprika | Tomaten | Chilli | Mais ...
Hugo         | X          |         |X          |              |         | X
Isolde        |             | X      |X          | X           |         |
Rosie         |             |         |            |              | X      |
.
.
.

Ich möchte nun ausgeben (idealerweise in einer Zelle getrennt durch ";") den Namen in der ersten Spalte einer Zeile und alle Spaltennamen, bei denen in der jeweiligen Zeile ein "X" steht, also so:
Hugo; Ananas; Paprika; Mais
Isolde; Käse; Paprika; Tomaten
Rosie; Chilli

Ich habe schon mit Index, Vergleich und Aggregat herumgespielt aber immer noch nicht die richtige Lösung gefunden. Bisher hatte ich immer die erste Spalte und den Spaltennamen des ersten/letzten "X", aber nicht aller anderen.

Mein erster Ansatz mit PowerQuery hat mir auch nicht weitergeholfen, allerdings bin ich in PowerQuery noch ganz schlecht.

Mein nächster Ansatz wäre nun mittels VBA ein Array zu befüllen (hab aber mit der Programmierung noch nicht begonnen).

Vielleicht hat ja einer von euch die zündende Idee (egal welcher Weg) für mich.

Dankeschön!

  

Betrifft: AW: Aus Matrix Spalten auslesen, die best. Wert haben von: Dieter Klemke
Geschrieben am: 25.09.2019 17:50:43

Hallo Heike,

ich mache das gern mit VBA.

Sub Zusammenfassen()
  Dim letzteSpalte As Long
  Dim letzteZeile As Long
  Dim spalte As Long
  Dim wb As Workbook
  Dim wsE As Worksheet
  Dim wsU As Worksheet
  Dim zeile As Long
  Dim zf As String
  
  Set wb = ThisWorkbook
  Set wsE = wb.Worksheets("Ergebnis")
  wsE.UsedRange.ClearContents
  Set wsU = wb.Worksheets("Ursprung")
  letzteSpalte = wsU.Cells(1, wsU.Columns.Count).End(xlToLeft).Column
  letzteZeile = wsU.Cells(wsU.Rows.Count, "A").End(xlUp).Row
  For zeile = 2 To letzteZeile
    zf = wsU.Cells(zeile, "A")
    For spalte = 2 To letzteSpalte
      If wsU.Cells(zeile, spalte) = "X" Then
        zf = zf & "; " & wsU.Cells(1, spalte)
      End If
    Next spalte
    wsE.Cells(zeile, "A") = zf
  Next zeile
End Sub
https://www.herber.de/bbs/user/132209.xlsm

Viele Grüße
Dieter


  

Betrifft: AW: Aus Matrix Spalten auslesen, die best. Wert haben von: Dieter Klemke
Geschrieben am: 25.09.2019 17:53:02

Hallo Heike,

ich mache das gern mit VBA.

Sub Zusammenfassen()
  Dim letzteSpalte As Long
  Dim letzteZeile As Long
  Dim spalte As Long
  Dim wb As Workbook
  Dim wsE As Worksheet
  Dim wsU As Worksheet
  Dim zeile As Long
  Dim zf As String
  
  Set wb = ThisWorkbook
  Set wsE = wb.Worksheets("Ergebnis")
  wsE.UsedRange.ClearContents
  Set wsU = wb.Worksheets("Ursprung")
  letzteSpalte = wsU.Cells(1, wsU.Columns.Count).End(xlToLeft).Column
  letzteZeile = wsU.Cells(wsU.Rows.Count, "A").End(xlUp).Row
  For zeile = 2 To letzteZeile
    zf = wsU.Cells(zeile, "A")
    For spalte = 2 To letzteSpalte
      If wsU.Cells(zeile, spalte) = "X" Then
        zf = zf & "; " & wsU.Cells(1, spalte)
      End If
    Next spalte
    wsE.Cells(zeile, "A") = zf
  Next zeile
End Sub
https://www.herber.de/bbs/user/132209.xlsm

Viele Grüße
Dieter


  

Betrifft: AW: Aus Matrix Spalten auslesen, die best. Wert haben von: Heike
Geschrieben am: 26.09.2019 21:29:39

Danke, klappt wunderbar!


Beiträge aus dem Excel-Forum zum Thema "Aus Matrix Spalten auslesen, die best. Wert haben"