Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Excel Suchfunktion
#11
Hi,

(23.02.2017, 10:50)BoskoBiati schrieb:
Code:
Sobald ich in Spalte C mehr Zeilen habe als in Spalte A, ist die Zuordnung falsch!

kann ich nicht nachvollziehen. Da solltest Du mal eine realistische Datei zeigen!

so geht das nicht:

Tabelle1
ABCD
1Name neuBedingungName altName neu
2ALDI Frankfurtaldi*frankfurtALDI GMBH + CO. FRANKFURT / ALDI SUED SAGT DANKEALDI Frankfurt
3ALDI Darmstadtaldi*darmstadtALDI GMBH + CO. KG//DARMSTADT/DE / ALDI SUED SAGT DANKEALDI Darmstadt
4LIDLlidlDANKE, IHR LIDL//Neustadt a/DE / DANKE, IHR LIDLLIDL
5REWE Frankfurtrewe*ffmREWE FrankfurtREWE Frankfurt
6REWE Frankfurtrewe*frankfurtREWE Ffm-GriesheimREWE Frankfurt
7ALDI GMBH + CO. FRANKFURT / ALDI SUED SAGT DANKE#WERT!
8ALDI GMBH + CO. KG//DARMSTADT/DE / ALDI SUED SAGT DANKE#WERT!
9DANKE, IHR LIDL//Neustadt a/DE / DANKE, IHR LIDL#WERT!
10REWE Frankfurt#WERT!
11REWE Ffm-Griesheim#WERT!

verwendete Formeln
Zelle Formel Bereich N/A
D2: D11=INDEX(A:A;VERGLEICH("*"&Tabelle3[@Bedingung]&"*";C:C;0))
Excel-Inn.de
Hajo-Excel.de
XHTML-Tabelle zur Darstellung in Foren, einschl. der neuen Funktionen ab Version 2007
Add-In-Version 19.08 einschl. 64 Bit

Antworten Top
#12
Halle zusammen,

Man braucht hier Vba

Ob es mit einer Arrayformel geht, kann ich nicht beurteilen.
Der TE hat zwei Tabellen.
Eine Datentabelle und eine Vergleichstabelle. Es wird geprüft, ob in einem Wert der Datentabelle eines der Werte der Vergleichstabelle enthält.
Gruß Atilla
Antworten Top
#13
Hallo zusammen,

hier eine VBA Lösung:


Code:
Sub Inhalte_tauschen()
 Dim lngZ As Long, i As Long, j As Long

 Dim SuchenNach
 Dim ErsetzenDurch
 Dim feldErsetzen

  lngZ = Cells(Rows.Count, 3).End(xlUp).Row
  SuchenNach = Range("B2:B6")
  ErsetzenDurch = Range("A2:A6")
  feldErsetzen = Range("C2:C" & lngZ)
 
  For i = 1 To lngZ - 1
    For j = LBound(SuchenNach) To UBound(SuchenNach)
      If Not IsError(Application.Search(SuchenNach(j, 1), feldErsetzen(i, 1))) Then
        feldErsetzen(i, 1) = ErsetzenDurch(j, 1)
      End If
    Next j
  Next i
 
  Range("D2:D" & lngZ) = feldErsetzen
 
End Sub
Gruß Atilla
Antworten Top
#14
(23.02.2017, 10:50)BoskoBiati schrieb: Hallo,



Code:
Sobald ich in Spalte C mehr Zeilen habe als in Spalte A, ist die Zuordnung falsch!

kann ich nicht nachvollziehen. Da solltest Du mal eine realistische Datei zeigen!


.xlsx   Mappe2.xlsx (Größe: 14,08 KB / Downloads: 4)
In Spalte E findest du das Ergebnis deiner Formel und in Spalte F das gewünschte Ergebnis der verschachtelten Formel. Danke! :)
Antworten Top
#15
(23.02.2017, 13:27)atilla schrieb: Hallo zusammen,

hier eine VBA Lösung:


Code:
Sub Inhalte_tauschen()
 Dim lngZ As Long, i As Long, j As Long

 Dim SuchenNach
 Dim ErsetzenDurch
 Dim feldErsetzen

  lngZ = Cells(Rows.Count, 3).End(xlUp).Row
  SuchenNach = Range("B2:B6")
  ErsetzenDurch = Range("A2:A6")
  feldErsetzen = Range("C2:C" & lngZ)
 
  For i = 1 To lngZ - 1
    For j = LBound(SuchenNach) To UBound(SuchenNach)
      If Not IsError(Application.Search(SuchenNach(j, 1), feldErsetzen(i, 1))) Then
        feldErsetzen(i, 1) = ErsetzenDurch(j, 1)
      End If
    Next j
  Next i
 
  Range("D2:D" & lngZ) = feldErsetzen
 
End Sub

Hallo atilla,
danke für deine Lösung!
Kann ich die VBA Formeln denn irgendwie so gestalten, dass sie sich nicht auf bestimmte Zellen/Bereiche beziehen, sondern immer auf die gesamte erste Spalte der linken Tabelle (egal wie viel Zeilen sie lang ist)?
Antworten Top
#16
Hallo,

ja das ist möglich.

Unten der Code ist auf die zuletzt eingestellte Datei angepasst und ist dynamisch.
Außerdem habe noch eingebaut, dass bei keiner möglichen Ersetzung "Kein Ersatz" in die Zelle geschrieben wird.


Code:
Sub Inhalte_tauschen()
 Dim boVar As Boolean
 Dim lngZ As Long, i As Long, j As Long
 Dim lngZSuch As Long

 Dim SuchenNach
 Dim ErsetzenDurch
 Dim feldErsetzen
 
 lngZSuch = Cells(Rows.Count, 1).End(xlUp).Row
 lngZ = Cells(Rows.Count, 4).End(xlUp).Row
 SuchenNach = Range("B2:B" & lngZSuch)
 ErsetzenDurch = Range("A2:A" & lngZSuch)
 feldErsetzen = Range("D2:D" & lngZ)

 For i = 1 To lngZ - 1
   For j = LBound(SuchenNach) To UBound(SuchenNach)
     If Not IsError(Application.Search(SuchenNach(j, 1), feldErsetzen(i, 1))) Then
       feldErsetzen(i, 1) = ErsetzenDurch(j, 1)
       boVar = True
     End If
     If boVar = False Then
       feldErsetzen(i, 1) = "Kein Ersatz!"
     End If
   Next j
 Next i
 
 Range("F2:F" & lngZ) = feldErsetzen
 
End Sub
Gruß Atilla
Antworten Top
#17
Hi,

(23.02.2017, 13:32)clippers41 schrieb: Kann ich die VBA Formeln denn irgendwie so gestalten, dass sie sich nicht auf bestimmte Zellen/Bereiche beziehen, sondern immer auf die gesamte erste Spalte der linken Tabelle (egal wie viel Zeilen sie lang ist)?

so kannst Du die letzte belegte Zeile in A feststellen:
lngZ_A = Cells(Rows.Count, 1).End(xlUp).Row

dann:
lngZ = Cells(Rows.Count, 3).End(xlUp).Row
SuchenNach = Range("B2:B" &lngZ_A)
ErsetzenDurch = Range("A2:A" &lngZ_A)
feldErsetzen = Range("C2:C" & lngZ)
Antworten Top
#18
Hallo,

kleine Korrektur "Kein Ersatz" muss etwas später sein im Code und muss noch etwas kontrollierter genutzt werden.


Code:
Sub Inhalte_tauschen()
  Dim boVar As Boolean
  Dim lngZ As Long, i As Long, j As Long
  Dim lngZSuch As Long

  Dim SuchenNach
  Dim ErsetzenDurch
  Dim feldErsetzen
 
  lngZSuch = Cells(Rows.Count, 1).End(xlUp).Row
  lngZ = Cells(Rows.Count, 4).End(xlUp).Row
  SuchenNach = Range("B2:B" & lngZSuch)
  ErsetzenDurch = Range("A2:A" & lngZSuch)
  feldErsetzen = Range("D2:D" & lngZ)
 
  For i = 1 To lngZ - 1
    boVar = False
    For j = LBound(SuchenNach) To UBound(SuchenNach)
      If Not IsError(Application.Search(SuchenNach(j, 1), feldErsetzen(i, 1))) Then
        feldErsetzen(i, 1) = ErsetzenDurch(j, 1)
        boVar = True
      End If
    Next j
    If boVar = False Then
      feldErsetzen(i, 1) = "Kein Ersatz!"
    End If
  Next i
 
  Range("F2:F" & lngZ) = feldErsetzen
 
End Sub
Gruß Atilla
[-] Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:
  • clippers41
Antworten Top
#19
Mein Code wurde etwas verändert und schaut nun so aus:

Code:
Sub Adressat_formatieren()
 Dim boVar As Boolean
 Dim lngZ As Long, i As Long, j As Long
 Dim lngZSuch As Long

 Dim SuchenNach
 Dim ErsetzenDurch
 Dim feldErsetzen
 
 lngZSuch = Cells(Rows.Count, 20).End(xlUp).Row
 lngZ = Cells(Rows.Count, 5).End(xlUp).Row
 SuchenNach = Range("T6:T" & lngZSuch)
 ErsetzenDurch = Range("U6:U" & lngZSuch)
 feldErsetzen = Range("E3:E" & lngZ)

 For i = 1 To lngZ - 1
   boVar = False
   For j = LBound(SuchenNach) To UBound(SuchenNach)
     If Not IsError(Application.Search(SuchenNach(j, 1), feldErsetzen(i, 1))) Then
       feldErsetzen(i, 1) = ErsetzenDurch(j, 1)
       boVar = True
     End If
   Next j
   If boVar = False Then
     feldErsetzen(i, 1) = ""
   End If
 Next i
 
 Range("N3:N" & lngZ) = feldErsetzen
 
End Sub


.xlsm   Mappe3.xlsm (Größe: 38,2 KB / Downloads: 4)
Beim Durchlauf der Routine bekomme ich die Meldung "Index außerhalb des gültigen Bereichs"..
Antworten Top
#20
Hallo,


da deine Daten ab Zeile 2 anfangen muss noch folgende Zeile angepasst werden:

For i = 1 To lngZ - '2 statt bisher 1
Gruß Atilla
Antworten Top


Gehe zu:


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