Index|Vergleich nur andersrum
#1
Hallo zusammen,

ich habe gerade ein Problem, bei dem ich nicht weiterkomme. Ich würde gerne die Zeilen und Spaltenüberschriften auslesen, wo jeweils ein x gegeben ist und auflisten lassen. Jedoch finde ich keinen Ansatz dafür. Folgendes Problem:

Code:
    1    2    3    4    5
a                    
b        x            
c                    
d                    
e                    
f                    x

was muss ich tun, damit mir irgendwie angezeigt wird, dass bspw. ein Verbindung zu b2 und f5 gegeben ist? ich würde in diesem Fall gerne die 5 und das f ermitteln. Aber wie geht das?

Über jeden Tipp wäre ich froh.

Besten Dank.

Viele Grüße
Antworten Top
#2
Hallo,

was ist wenn mehrere x da stehen?
Woher soll Excel wissen, welches x du auslesen willst?

Gruß Sigi
Antworten Top
#3
Hola,

Code:
=INDEX($B$1:$F$1;AGGREGAT(15;6;SPALTE(B1:F1)-1/(B2:F7="x");ZEILE(A1)))&INDEX($A$2:$A$7;AGGREGAT(15;6;ZEILE($A$2:$A$7)-1/($B$2:$F$7="x");ZEILE(A1)))
Gruß,
steve1da
Antworten Top
#4
Hallo Steve,

Deine Formel funktioniert nur korrekt, wenn die Zeilen und Spalten der Kreuze gleichermaßen aufsteigend sortiert sind, da Du die Zeilen und Spalten unabhängig ermittelst. Das Ergebnis stimmt z. B. nicht mehr wenn die Kreuze in 5a und 3f sind.

=INDEX($1:$1;REST(AGGREGAT(15;6;(ZEILE($A$2:$A$7)+SPALTE($B$1:$F$1)%%)/($B$2:$F$7="x");ZEILE(A1));1)*10000)&INDEX($A:$A;GANZZAHL(AGGREGAT(15;6;(ZEILE($A$2:$A$7)+SPALTE($B$1:$F$1)%%)/($B$2:$F$7="x");ZEILE(A1))))
Gruß
Michael
Antworten Top
#5
@Michael: du hast völlig Recht, danke!
Antworten Top
#6
Hallo steve1da,

besten Dank für deine Rückmeldung. das macht (fast) genau das was es soll. gibt es auch eine Möglichkeit eine Auflistung vorzunehmen, die mehrere Kreuzangaben zulässt? Sprich in Zeile b stehen bei 2 und bei der 5 ein x.also dann b -> 2,5.

Geht das auch irgendwie?

Viele Grüße und Megadank für deinen Input.

@Steuerfuzzi

Besten Dank für den Hinweis. Habe deine Formel ebenfalls ausprobiert. das alles was ich bisher erhalten habe läuft schon recht gut. Jedoch muss jedes Kreuz in der jeweiligen Zeile aufgezeigt werden. Dachte das passiert auch automatisch, aber irgendwie nicht. Ist es überhaupt möglich alles Spalten sich auflisten zu zeigen. Bspw. wenn in b bei jeder Zahl 1-5 ein Kreuz wäre. Würde das irgendwie umsetzbar sein das alles aufzulisten? 

Nochmals herzlichen Dank für euren Support
Antworten Top
#7
Um alles auflisten zu können muss die Formel so weit nach unten gezogen werden, dass alle Vorkommnisse abgedeckt sind. Ein paar Zeilen mehr schaden nicht und den Fehler kann man mit WENNFEHLER "ausblenden".
=WENNFEHLER(INDEX($1:$1;REST(AGGREGAT(15;6;(ZEILE($A$2:$A$7)+SPALTE($B$1:$F$1)%%)/($B$2:$F$7="x");ZEILE(A1));1)*10000)&INDEX($A:$A;GANZZAHL(AGGREGAT(15;6;(ZEILE($A$2:$A$7)+SPALTE($B$1:$F$1)%%)/($B$2:$F$7="x");ZEILE(A1))));"")
Gruß
Michael
Antworten Top
#8
Hi,

dein Excel ist leider zu alt. Bei aktuellem Excel wäre es
=TEXTVERKETTEN(", ";WAHR;WENN(B2:F7="x";A2:A7&B1:F1;""))
In A2:A7 sind deine Buchstaben, in B1:F1 deine Zahlen und in B2:F7 deine "x".
Ausgabe als z.B. "b2, c4, c5, e5"

Mit meiner selbst definierten Funktion TextVerketten2 statt TEXTVERKETTEN und der Eingabe als Matrix-Formel (Abschluss mit Strg-Shift-Enter) geht's auch mit deiner Version.
{=TextVerketten2(", ";WAHR;WENN(B2:F7="x";A2:A7&B1:F1;""))}
Code:
Function TextVerketten2(TrennZeichen As String, LeereIgnorieren As Variant, _
                      ParamArray Texte() As Variant) As Variant
'entspricht TextVerketten von Excel2016, kommt mit Fehlern besser klar
Dim Bereich As Variant
Dim EinzelText As Variant
Dim erg As String
Dim i As Long, k As Long
Dim iMax As Long, kMax As Long
If IsMissing(LeereIgnorieren) Then LeereIgnorieren = True
For Each Bereich In Texte
    EinzelText = FeldFüllen(Bereich)
    iMax = UBound(EinzelText, 1)
    kMax = UBound(EinzelText, 2)
    For i = 1 To iMax
        For k = 1 To kMax
            If IsError(EinzelText(i, k)) Then
                erg = erg & "!!" & TrennZeichen
            Else
                If Not (LeereIgnorieren And EinzelText(i, k) = "") Then
                    erg = erg & EinzelText(i, k) & TrennZeichen
                End If
            End If
        Next k
    Next i
Next Bereich
If Len(erg) Then
    erg = Left(erg, Len(erg) - Len(TrennZeichen))
End If
TextVerketten2 = erg
End Function

Function FeldFüllen(Eingabe As Variant) As Variant
'erzeugt aus Eingabe ein zweidimensionales Feld
Dim Ausgabe As Variant
Dim Bereich As Range
Dim i As Long
If TypeName(Eingabe) = "Range" Then
    Set Bereich = Intersect(Eingabe.Worksheet.UsedRange, Eingabe)
    If Bereich Is Nothing Then
        ReDim Ausgabe(1, 1)
        Ausgabe(1, 1) = CVErr(xlErrNA)
        FeldFüllen = Ausgabe
        Exit Function
    End If
    If Bereich.CountLarge > 1 Then
        FeldFüllen = Bereich
        Exit Function
    End If
End If
If IsArray(Eingabe) Then
    On Error Resume Next
        Ausgabe = Eingabe(1, 1) 'Test, ob Eingabe zwei Dimensionen hat
    On Error GoTo 0
    If Not IsEmpty(Ausgabe) Then    'vorige Zuweisung hat geklappt: zwei Dimensionen sind bereits da
        FeldFüllen = Eingabe
        Exit Function
    End If
    ReDim Ausgabe(1 To UBound(Eingabe), 1 To 1)
    For i = 1 To UBound(Eingabe)    'eindimensionales Feld in zwei Dimensionen kopieren
        Ausgabe(i, 1) = Eingabe(i)
    Next i
    FeldFüllen = Ausgabe
    Exit Function
End If
ReDim Ausgabe(1 To 1, 1 To 1)
Ausgabe(1, 1) = Eingabe
FeldFüllen = Ausgabe
End Function
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top
#9
In K1:  =F_snb(A1:F8;"x")

Im algemeinem Makromodul:
Code:
Function F_snb(sn, c00)
  For Each it In sn
    If it = c00 Then c01 = c01 & " " & sn(it.Row, 1) & sn(1, it.Column)
  Next

  F_snb = Trim(c01)
End Function

Fertig
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#10
@HKindler: Super! dein Makro hat es gebracht. So hat es funktioniert. BESTEN DANK!

Eine abschließende Frage habe ich aber (leider) noch. Wie müsste das Makro angepasst werden, dass nur die Zahl aufgezählt wird? Also ohne zusätzlichen Buchstaben davor. Das lässt sich doch etwas besser lesen dann.

@snb: auch an dich ein Dank für den Support. Teste ich auch gleich mal aus.

Viele Grüße
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste