Registriert seit: 09.05.2015
Version(en): 2013, Office 365
07.12.2015, 13:59
(Dieser Beitrag wurde zuletzt bearbeitet: 07.12.2015, 17:16 von Rabe.
Bearbeitungsgrund: Code-Darstellung eingeschaltet mit 5. Button von rechts
)
Hallo zusammen, sitze wieder mal an einer für mich kniffligen Aufgabe und hoffe auf Eure Hilfe. Ich habe eine Tabelle in der in Spalte 4 Abkürzungen stehen. Diese möchte ich nun in Spalte 6 übertragen bzw. den Langtext zu diesen Abkürzungen dort eintragen. Die Tabelle hat auch eine Überschrift-Zeile, die natürlich nicht verändert werden sollte. Aus dem Netz habe ich auch ein Beispiel gefunden...siehe unten...das schon mal in die Richtung geht, aber alle gefundenen Werte ersetzt. Wie müsste der Code geändert werden damit nur die Spalte 4 ausgelesen wird und das "Langwort in die Spalte 6 eingetragen wird...und das nur begrenzt in der aktuellen Tabelle? Code: Sub Multi_FindReplace() 'PURPOSE: Find & Replace a list of text/values throughout entire workbook 'SOURCE: www.TheSpreadsheetGuru.com/the-code-vault
Dim sht As Worksheet Dim fndList As Variant Dim rplcList As Variant Dim x As Long
fndList= Array("C", "U", "M") rplcList = Array("Canada", "United States", "Mexico")
'Loop through each item in Array lists For x = LBound(fndList) To UBound(fndList) 'Loop through each worksheet in ActiveWorkbook For Each sht In ActiveWorkbook.Worksheets sht.Cells.Replace What:=fndList(x), Replacement:=rplcList(x), _ LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _ SearchFormat:=False, ReplaceFormat:=False Next sht Next x End Sub
Vielen Dank für Eure Hilfe!
Registriert seit: 28.05.2014
Version(en): 2013 / 2016
Moin, gibt es einen Grund, dass du auf SVERWEIS() verzichtest? Ich bin zwar VBA-Fan, aber nur da, wo es mir sinnvoll erscheint.
Beste Grüße Günther
Excel-ist-sexy.de …schau doch mal rein! Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
Registriert seit: 09.05.2015
Version(en): 2013, Office 365
(07.12.2015, 14:03)GMG-CC schrieb: Moin, gibt es einen Grund, dass du auf SVERWEIS() verzichtest? Ich bin zwar VBA-Fan, aber nur da, wo es mir sinnvoll erscheint. Moin, würde das lieber mit VBA machen und keine Formeln ins Blatt schreiben. Trotzdem danke für den Hinweis.
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
07.12.2015, 14:55
(Dieser Beitrag wurde zuletzt bearbeitet: 07.12.2015, 14:55 von Kuwer.)
Hallo Erich,
ersetze Cells durch Columns(4):
sht.Columns(4).Replace What:=fndList(x), Replacement:=rplcList(x), _ LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _ SearchFormat:=False, ReplaceFormat:=False
Nachtrag: Nur für das aktuelle Sheet dann so:
'Loop through each item in Array lists For x = LBound(fndList) To UBound(fndList) 'Loop through each worksheet in ActiveSheet ActiveSheet.Columns(4).Replace What:=fndList(x), Replacement:=rplcList(x), _ LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _ SearchFormat:=False, ReplaceFormat:=False Next x
Gruß Uwe
Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:1 Nutzer sagt Danke an Kuwer für diesen Beitrag 28
• sharky51
Registriert seit: 09.05.2015
Version(en): 2013, Office 365
(07.12.2015, 14:55)Kuwer schrieb: Hallo Erich,
ersetze Cells durch Columns(4):
sht.Columns(4).Replace What:=fndList(x), Replacement:=rplcList(x), _ LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _ SearchFormat:=False, ReplaceFormat:=False
Nachtrag: Nur für das aktuelle Sheet dann so:
'Loop through each item in Array lists For x = LBound(fndList) To UBound(fndList) 'Loop through each worksheet in ActiveSheet ActiveSheet.Columns(4).Replace What:=fndList(x), Replacement:=rplcList(x), _ LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _ SearchFormat:=False, ReplaceFormat:=False Next x
Gruß Uwe Hallo Uwe, vielen Dank funktioniert schon recht gut. Ich möchte aber das "Langwort" in Spalte 6 haben. Spalte 4 mit dem Kürzel sollte unberührt bleiben. Und noch etwas ist mir aufgefallen...wenn ein Kürzel (von denen habe ich viele) aus mehreren Zeichen besteht dann funktioniert das nicht, bzw. der Code tut was er tun soll...er sucht nach allen Kriterien. wenn z.B. anstatt: fndList= Array("C", "U", "M") rplcList = Array("Canada", "United States", "Mexico") das hier vorgegeben wird: fndList= Array("C", " UC", "M") rplcList = Array("Canada", "United States", "Mexico") ..dann erhalte ich bei " UC" nicht "United States"...sondern "United States C" Gibt es da eine Möglichkeit das zu umgehen? Ich benötige leider bei den Kürzeln manchmal mehr als ein Zeichen und dann gibt es diesen Konflickt.
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
07.12.2015, 16:26
(Dieser Beitrag wurde zuletzt bearbeitet: 07.12.2015, 16:26 von Kuwer.)
Hallo Erich, teste mal so: Code: Sub LangnamenZuordnen() With Range("D2", Cells(Rows.Count, 4).End(xlUp)).SpecialCells(xlCellTypeConstants).Offset(, 2) .Formula = "=INDEX({""Canada"",""United States"",""Mexico""},MATCH(D2,{""C"",""UC"",""M""},0))" .Value = .Value .SpecialCells(xlCellTypeConstants, 16) = "" End With End Sub
Gruß Uwe
Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:1 Nutzer sagt Danke an Kuwer für diesen Beitrag 28
• sharky51
Registriert seit: 09.05.2015
Version(en): 2013, Office 365
(07.12.2015, 16:26)Kuwer schrieb: Hallo Erich,
teste mal so:
Code: Sub LangnamenZuordnen() With Range("D2", Cells(Rows.Count, 4).End(xlUp)).SpecialCells(xlCellTypeConstants).Offset(, 2) .Formula = "=INDEX({""Canada"",""United States"",""Mexico""},MATCH(D2,{""C"",""UC"",""M""},0))" .Value = .Value .SpecialCells(xlCellTypeConstants, 16) = "" End With End Sub
Gruß Uwe Hallo Uwe, danke....cool...funktioniert perfekt...klasse. So werde ich das übernehmen. Ich habe natürlich nicht nur 3 Kürzel sondern viel mehr, d.h. der Formel-String wird sehr lang. Siehst Du da ein Problem darin oder gibt es eine Möglichkeit ca. 20-30 Kürzel in anderer Weise aufzudröseln? Nochmals vielen Dank!
Registriert seit: 10.04.2014
Version(en): Office 2007, 2016, Win 10 64 bit
Hi Erich,
mal als Tipp zum Gebrauch des Forums, hier konkret die beiden Antwortbuttons. Du nimmst ständig den Direkt Antwort Button im Beitragsfenster und dabei wird jedesmal alles aus der Antwort zuvor zitiert, das ist aber nur dann interessant, wenn du dich dort auf konkrete Inhalte beziehen willst. Sonst füllt das alles nur unnötig und macht Beiträge unübersichtlich.
Nutze in allen anderen Fällen bitte den Antwortbutton unterhalb des Fensters, rechts neben Erledigt. Danke.
Mit freundlichen Grüßen :) Michael
Registriert seit: 10.04.2014
Version(en): 2016 + 365
Hi, (07.12.2015, 18:19)Zwergel schrieb: Du nimmst ständig den Direkt Antwort Button im Beitragsfenster und dabei wird jedesmal alles aus der Antwort zuvor zitiert, das ist aber nur dann interessant, wenn du dich dort auf konkrete Inhalte beziehen willst. Sonst füllt das alles nur unnötig und macht Beiträge unübersichtlich.
Nutze in allen anderen Fällen bitte den Antwortbutton unterhalb des Fensters, rechts neben Erledigt. Danke. oder kürze das Zitat auf die relevanten Teile. Das ist nämlich auch möglich!
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
Hi! Dann mache ich das doch direkt mal ... :17: (07.12.2015, 16:56)sharky51 schrieb: Ich habe natürlich nicht nur 3 Kürzel sondern viel mehr, d.h. der Formel-String wird sehr lang. Siehst Du da ein Problem darin oder gibt es eine Möglichkeit ca. 20-30 Kürzel in anderer Weise aufzudröseln? @Erich: Erstelle Dir eine Verweistabelle, greife im Code auf sie zu und schreibe sofort den Verweis in die Zelle. Dann brauchst Du auch nicht erst eine Formel in die Zelle schreiben und sie danach durch ihren Wert ersetzen. (Womit wir wieder bei Günthers Beitrag #2 wären, halt nur per Code und nicht per Formel) Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
|