Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1040to1044
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
Suche innerhalb der Tabelle1
15.01.2009 14:20:00
Wolfgang
Hallo,
den nachstehenden Code hat mir Sepp zur Verfügung gestellt. Er läuft auch wunderbar und bewirkt, dass doppelte Datensätze im Vergleich von Tabelle1 zu Tabelle 2 mit entspr. Hyperlink versehen werden. Wie müßte ich den Code verändern, wenn ich nun einen Abgleich nur innerhalb der Tabelle1 vornehmen möchte? Noch idealer wäre, wenn die Suche zwischen Tabelle1 und 2 sowie umgekehrt und dann in Tabelle1 und Tabelle2 getrennt (also Doppelte innerhalb der jeweiligen Tabelle) gestaltet werden könnte.
Danke schon jetzt für die Rückmeldungen.
Herzliche Grüße
Wolfgang

Sub compareRanges()
Dim objWsA As Worksheet, objWsB As Worksheet
Dim rngA As Range, rngB As Range
Dim strA As String, strB As String
Dim lngRow As Long, lngIndex As Long
Dim varRes As Variant
Set objWsA = Sheets("Tabelle1") 'Anpassen
Set objWsB = Sheets("Tabelle2") 'Anpassen
Set rngA = objWsA.Range("D2:E" & Application.Max(objWsA.Cells(Rows.Count, 5).End(xlUp).Row,  _
_
2))
Set rngB = objWsB.Range("D2:E" & Application.Max(objWsB.Cells(Rows.Count, 5).End(xlUp).Row,  _
_
2))
For lngIndex = 1 To rngB.Columns.Count
strB = strB + rngB.Parent.Name & "!" & rngB.Columns(lngIndex).Address & "&"
Next
strB = Left(strB, Len(strB) - 1)
For lngRow = 1 To rngA.Rows.Count
strA = ""
For lngIndex = 1 To rngA.Columns.Count
strA = strA + rngA.Parent.Name & "!" & rngA.Cells(lngRow, lngIndex).Address & "&"
Next
strA = Left(strA, Len(strA) - 1)
varRes = Evaluate("MATCH(" & strA & "," & strB & ",0)")
If IsNumeric(varRes) Then
rngA.Parent.Hyperlinks.Add _
Anchor:=rngA.Cells(lngRow, rngA.Columns.Count).Offset(0, 2), _
Address:="", _
SubAddress:=rngB.Parent.Name & "!" & rngB.Rows(varRes).Address, _
TextToDisplay:="Doppelt!"
End If
Next
Set objWsA = Nothing
Set objWsB = Nothing
Set rngA = Nothing
Set rngB = Nothing
End Sub


2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Suche innerhalb der Tabelle1
15.01.2009 16:54:29
Josef
Hallo Wolfgang,
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub compareRanges()
    Dim objWsA As Worksheet, objWsB As Worksheet
    Dim rngA As Range, rngB As Range
    Dim strA As String, strB As String, strSheet As String
    Dim lngRow As Long, lngIndex As Long
    Dim varRes As Variant
    
    Do
        strSheet = InputBox("Geben Sie den Namen der ersten Tabelle ein:", "Tabelle", "Tabellenname")
        If strSheet = "" Then Exit Sub
        If SheetExist(strSheet) Then Exit Do
    Loop
    
    Set objWsA = Sheets(strSheet)
    
    Do
        strSheet = InputBox("Geben Sie den Namen der zweiten Tabelle ein:", "Tabelle", "Tabellenname")
        If strSheet = "" Then Exit Sub
        If SheetExist(strSheet) Then Exit Do
    Loop
    
    Set objWsB = Sheets(strSheet)
    
    Set rngA = objWsA.Range("D2:E" & Application.Max(objWsA.Cells(Rows.Count, 5).End(xlUp).Row, 2))
    Set rngB = objWsB.Range("D2:E" & Application.Max(objWsB.Cells(Rows.Count, 5).End(xlUp).Row, 2))
    
    
    For lngIndex = 1 To rngB.Columns.Count
        strB = strB + rngB.Parent.Name & "!" & rngB.Columns(lngIndex).Address & "&"
    Next
    
    strB = Left(strB, Len(strB) - 1)
    
    For lngRow = 1 To rngA.Rows.Count
        strA = ""
        For lngIndex = 1 To rngA.Columns.Count
            strA = strA + rngA.Parent.Name & "!" & rngA.Cells(lngRow, lngIndex).Address & "&"
        Next
        strA = Left(strA, Len(strA) - 1)
        
        If objWsA Is objWsB Then
            varRes = Evaluate("SUM(N(" & strB & "=" & strA & "))")
            If varRes >= 2 Then
                varRes = Evaluate("MATCH(" & strA & "," & strB & ",0)")
            Else
                varRes = ""
            End If
        Else
            varRes = Evaluate("MATCH(" & strA & "," & strB & ",0)")
        End If
        
        
        If IsNumeric(varRes) Then
            rngA.Parent.Hyperlinks.Add _
                Anchor:=rngA.Cells(lngRow, rngA.Columns.Count).Offset(0, 2), _
                Address:="", _
                SubAddress:=rngB.Parent.Name & "!" & rngB.Rows(varRes).Address, _
                TextToDisplay:="Doppelt!"
        End If
    Next
    
    Set objWsA = Nothing
    Set objWsB = Nothing
    Set rngA = Nothing
    Set rngB = Nothing
End Sub

Private Function SheetExist(ByVal sheetName As String, Optional WbName As String) As Boolean
    Dim wks As Worksheet
    On Error GoTo ERRORHANDLER
    If WbName = "" Then WbName = ThisWorkbook.Name
    For Each wks In Workbooks(WbName).Worksheets
        If wks.Name = sheetName Then SheetExist = True: Exit Function
    Next
    ERRORHANDLER:
    SheetExist = False
End Function

Gruß Sepp

Anzeige
Super! - Danke Sepp!!
15.01.2009 20:46:07
Wolfgang
Hallo Sepp,
erneut recht recht herzlichen Dank für Deine Rückmeldung und die erneuten Ausarbeitungen. Ich habe sie direkt "eingebaut" und auch dieser Code läuft wieder super. Den ursprünglichen Code habe ich dabei übrigens beibehalten, weil ich hierüber schon die Suche der beiden Tabellen untereinander gestalte. Über Deine Idee mit der InputBox ist nun aber alles sehr flexibel und frei gestaltbar. Hab auch hierfür recht herzlichen Dank !
Gruß - Wolfgang

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige