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

Forumthread: SVERWEIS mit mehreren Ergebnissen per VBA

SVERWEIS mit mehreren Ergebnissen per VBA
20.07.2006 11:48:57
Anton
Hallo Leute,
ich möchte zwei Tabellen mit SVERWEIS verknüpfen.
Dabei sind pro Suchwert mehrere Ergebnisse vorhanden.
Diese sollen spaltenweise angeordet werden (ich will sie nachher als Uhrzeit formatieren).
Folgendes habe ich inzwischen: Ein Makro (Function) und die dazugehörige Formel.
Die Ergebnisse werden jedoch duch komma getrennt in die selbe Zelle geschrieben.
Option Explicit
Public
Function SVERWEIS2(Kriterium As String, Bereich As Range, SuchSpalte As Integer, ErgebnissSpalte As Integer, Optional Trenner As String = ", ") As String 'Original von UDO Dim arrTmp Dim L As Long arrTmp = Bereich For L = 1 To UBound(arrTmp) If arrTmp(L, SuchSpalte) = Kriterium Then _ If InStr(1, SVERWEIS2, arrTmp(L, ErgebnissSpalte)) = 0 Then _ SVERWEIS2 = SVERWEIS2 & arrTmp(L, ErgebnissSpalte) & Trenner Next SVERWEIS2 = Left(SVERWEIS2, Len(SVERWEIS2) - Len(Trenner)) End Function
=sverweis2(A4;'[Export-tabelle-Access.xls]dbo_tblZeiterfassung'!$A:$C;1;2)
Ich vermute mal den Trenner muß ich anders definieren.....
Wer von Euch kann mir bitte mit VBA-Code weiterhelfen?
Es bedankt sich und sagt servus,
Anton
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: SVERWEIS mit mehreren Ergebnissen per VBA
ransi
Hallo Anton
Der Trenner hat damit nichts zu tun.
Den hatte ich damals nur mit reingebaut damit man wählen kann wie die Daten getrennt werden.
Habe die Funktion mal auf deine Bedürfnisse umgestrickt:
Jetzt werden auch doppelte erfasst.


Option Explicit
Public Function SVERWEIS2(Kriterium As String, Bereich As Range, SuchSpalte As Integer, _
ErgebnissSpalte As Integer, welcher_wert As LongAs String
'Original von UDO
    Dim arrTmp
    Dim arr()
    Dim L As Long
    Dim z
    z = 1
arrTmp = Bereich
For L = 1 To UBound(arrTmp)
    If arrTmp(L, SuchSpalte) = Kriterium Then
        ReDim Preserve arr(z)
        arr(z) = arrTmp(L, ErgebnissSpalte)
        z = z + 1
    End If
Next
SVERWEIS2 = arr(welcher_wert)
End Function


Der Aufruf geht dann so:
Tabelle1
 ABCDE
14OOZWO XJN0NY
2XJN0NY  HJ20D
33T28VU  7A89I
44VZ48P  UTS2Q
51DT8XR   
617M8QM   
71TMT4O   
83UOE0O   
93L4LZJ   
10XHJ20D   
11144XEZ   
1246L8E4   
1315LGJT   
141K22NP   
152AQPR3   
16X7A89I   
174U1HG1   
183M6B7S   
1910QCV6   
20XUTS2Q   
Formeln der Tabelle
E1 : =SVERWEIS2($D$1;$A$1:$B$20;1;2;ZEILE(A1))
E2 : =SVERWEIS2($D$1;$A$1:$B$20;1;2;ZEILE(A2))
E3 : =SVERWEIS2($D$1;$A$1:$B$20;1;2;ZEILE(A3))
E4 : =SVERWEIS2($D$1;$A$1:$B$20;1;2;ZEILE(A4))
 
Diagramm - Grafik - Excel Tabellen einfach im Web darstellen    Excel Jeanie HTML  3.0    Download  
ransi
Anzeige
bitte noch kommentieren
20.07.2006 14:28:21
Anton
Hallo Ransi,
Bitte kannst Du Deinen Code noch kommentieren.
Ich möchte mir den Code so umstricken können, dass die Ergebnisse in Spalten nebeneinander stehen.
Dir schon jetzt herzlichen Dank,
Servus,
Anton
AW: bitte noch kommentieren
ransi
hallo


Public Function SVERWEIS2(Kriterium As String, Bereich As Range, SuchSpalte As Integer, _
ErgebnissSpalte As Integer, welcher_wert As LongAs String
'Kriterium As String ist der Begriff der gesucht werden soll
'Bereich ist die Matrix
'Suchspalte ist die Spaltennummer in der Kriterium zu finden ist.
'In diesem Fall in der ersten Spalte von Bereich. Also 1.
'ErgebnissSpalte ist die Spaltennummer in der der passende Wert gesucht werden soll.
'In diesem Fall also inder Zweiten Spalte.
'Alle gefundenen Werte werden in ein Array eingelesen.
'Das passiert hier:
'################
'If arrTmp(L, SuchSpalte) = Kriterium Then
'        ReDim Preserve arr(z)
'        arr(z) = arrTmp(L, ErgebnissSpalte)
'        z = z + 1
'End If
'################
'Welcher_wert sagt einfach nur an welcher Stelle in arr sverweis2() den Wert holen soll.
    Dim arrTmp
    Dim arr()
    Dim L As Long
    Dim z
    z = 1
arrTmp = Bereich
For L = 1 To UBound(arrTmp)
    If arrTmp(L, SuchSpalte) = Kriterium Then
        ReDim Preserve arr(z)
        arr(z) = arrTmp(L, ErgebnissSpalte)
        z = z + 1
    End If
Next
SVERWEIS2 = arr(welcher_wert)
End Function


da brauchst du nichts mehr umbauen.
Das geht auch so:
Tabelle1
 ABCDEFGH
14OOZWO XJN0NYHJ20D7A89IUTS2Q
2XJN0NY  1234
33T28VU      
44VZ48P      
51DT8XR      
617M8QM      
71TMT4O      
83UOE0O      
93L4LZJ      
10XHJ20D      
11144XEZ      
1246L8E4      
1315LGJT      
141K22NP      
152AQPR3      
16X7A89I      
174U1HG1      
183M6B7S      
1910QCV6      
20XUTS2Q      
21        
Formeln der Tabelle
E1 : =sverweis2($D$1;$A:$B;1;2;SPALTE(A1))
F1 : =sverweis2($D$1;$A:$B;1;2;SPALTE(B1))
G1 : =sverweis2($D$1;$A:$B;1;2;SPALTE(C1))
H1 : =sverweis2($D$1;$A:$B;1;2;SPALTE(D1))
E2 : =SPALTE(A1)
F2 : =SPALTE(B1)
G2 : =SPALTE(C1)
H2 : =SPALTE(D1)
 
Diagramm - Grafik - Excel Tabellen einfach im Web darstellen    Excel Jeanie HTML  3.0    Download  
Spalte(A1) ist nur eine Variable die die Formel kopierbar macht.
Habs in zeile2 mal versucht klar zumachen.
ransi
Anzeige
AW: bitte noch kommentieren
20.07.2006 16:06:47
Anton
Hallo Ransi,
Herzlichen Dank.
Hier bei uns im Büro haben wir gerade 40°C erreicht... mein Hirn beginnt zu streiken.
Eine Frage habe ich trotzdem:
Warum diese Formeln kein anderes Format annehmen?
Es dankt und sagt Ciao,
Anton
AW: bitte noch kommentieren
ransi
Hallo
Public Function SVERWEIS2(Kriterium As String, Bereich As Range, SuchSpalte As Integer, _
ErgebnissSpalte As Integer, welcher_wert As Long) As String
Lass das "as string" mal weg.
könnte dann gehn.
ransi
Anzeige
noch offen
20.07.2006 14:45:12
Anton
Hallo Heiko,
erstmal sorry, dass ich Dich vielleicht nicht so gut verstehe, wie es sein sollte.
Du hast sicher Recht.
Also:
Die Ergebnisse kommen aus einer externen Datei: Export-tabelle....
und sollen
erstes Ergebnis in Spalte C
zweites Ergebnis in Spalte D
drittes Ergebnis in Spalte E
.... das kann bis zu 31 Ergebnisse geben. -immer in der selben Zeile-
Du scheinst die Formel aus Deinem Link bestens zu verstehen.
Ich leider nicht. Auch mit Excel-Hilfe kann ich mir den Zusammenhang nicht erklären.
Wenn Du es mir erklärst, begreife ich es vielleicht.
Freue mich auf Deine Antwort.
(Wunschgemäß habe ich "offen" angehakt)
Dank, Servus,
Anton
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

SVERWEIS mit mehreren Ergebnissen in Excel VBA


Schritt-für-Schritt-Anleitung

Um mit SVERWEIS in Excel mehrere Ergebnisse zu finden und diese nebeneinander anzuzeigen, kannst du ein VBA-Makro verwenden. Hier ist eine Schritt-für-Schritt-Anleitung:

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

  2. Klicke auf Einfügen und dann auf Modul, um ein neues Modul zu erstellen.

  3. Füge den folgenden VBA-Code ein:

    Option Explicit
    
    Public Function SVERWEIS2(Kriterium As String, Bereich As Range, SuchSpalte As Integer, ErgebnissSpalte As Integer, welcher_wert As Long) As String
       Dim arrTmp
       Dim arr() As String
       Dim L As Long
       Dim z As Long
       z = 1
       arrTmp = Bereich
       For L = 1 To UBound(arrTmp)
           If arrTmp(L, SuchSpalte) = Kriterium Then
               ReDim Preserve arr(z)
               arr(z) = arrTmp(L, ErgebnissSpalte)
               z = z + 1
           End If
       Next
       SVERWEIS2 = arr(welcher_wert)
    End Function
  4. Speichere dein Projekt und schließe den VBA-Editor.

  5. Verwende die Funktion in einer Zelle, z.B.:

    =SVERWEIS2(A1, B1:C20, 1, 2, SPALTE(A1))

    In diesem Beispiel wird das Ergebnis in der Zelle angezeigt, basierend auf dem Kriterium in Zelle A1.


Häufige Fehler und Lösungen

  • Fehler: #WERT!
    Dieser Fehler tritt auf, wenn das Kriterium nicht gefunden wird. Stelle sicher, dass der Suchwert korrekt ist.

  • Fehler: Überlauf
    Wenn du versuchst, mehr Ergebnisse als das Array aufnehmen kann, kann ein Überlauf auftreten. Achte darauf, dass der ReDim Preserve-Befehl korrekt verwendet wird.

  • Lösung: Formate
    Wenn die Ergebnisse nicht das richtige Format annehmen, überprüfe, ob die Zellen richtig formatiert sind (z.B. als Zahl oder Uhrzeit).


Alternative Methoden

Wenn du keine VBA-Lösung verwenden möchtest, kannst du auch folgende Methoden ausprobieren:

  • FILTER-Funktion: In neueren Excel-Versionen kannst du die FILTER-Funktion verwenden, um mehrere Ergebnisse zu filtern und anzuzeigen.

    =FILTER(Bereich, Suchkriterium=B1)
  • Kombination mit INDEX und AGGREGAT: Diese Methode kann auch verwendet werden, um mehrere Ergebnisse zu finden und anzuzeigen.


Praktische Beispiele

Hier ist ein Beispiel, wie du mehrere Ergebnisse nebeneinander anzeigst:

Angenommen, du hast die folgende Tabelle:

A B
1 Ergebnis1
1 Ergebnis2
2 Ergebnis3
1 Ergebnis4

Verwende die Formel in Zelle C1:

=SVERWEIS2(1; A:B; 1; 2; SPALTE(A1))

Ziehe die Formel nach rechts, um die Ergebnisse in den Spalten D und E anzuzeigen.


Tipps für Profis

  • Verwende dynamische Bereiche: Um sicherzustellen, dass dein VBA-Code immer die aktuellen Daten nutzt, erwäge die Verwendung von dynamischen Bereichen.

  • Dokumentiere deinen Code: Kommentiere deinen VBA-Code, um die Funktionsweise zu erklären. Das hilft dir, später Anpassungen vorzunehmen.

  • Teste umfassend: Überprüfe deinen Code mit verschiedenen Daten, um sicherzustellen, dass er zuverlässig funktioniert.


FAQ: Häufige Fragen

1. Wie kann ich mehrere Ergebnisse nebeneinander anzeigen?
Verwende die Funktion SVERWEIS2 in Kombination mit SPALTE, um die Ergebnisse in verschiedenen Spalten anzuzeigen.

2. Was ist der Unterschied zwischen SVERWEIS und INDEX/VERGLEICH?
SVERWEIS ist einfacher anzuwenden, hat jedoch Einschränkungen bei der Suche nach Werten in linken Spalten. INDEX/VERGLEICH ist flexibler und kann in beiden Richtungen suchen.

3. Welche Excel-Version benötige ich für diese Funktionen?
Die beschriebenen Funktionen und Methoden sollten in den meisten modernen Excel-Versionen, einschließlich Excel 2010 und höher, funktionieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige