Anzeige
Archiv - Navigation
812to816
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
812to816
812to816
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Danke Andi & Uwe

Danke Andi & Uwe
25.10.2006 13:37:23
abu
Hallo Zusammen,
habe letzte Woche bereits diese Anfrage gestartet und ganz tolle Hilfe von Andi und Uwe erhalten. Leider konnte ich mich an der Runde nicht mehr beteiligen und so haben beide Lösungen ausgemacht mit den ich leider nicht zurecht kommen (Danke euch beiden!) und hier nochmal fragen muß... Hier noch mal kurz das Problem und der bisherige Ansatz, anschließend meine Fragen:
Problem:
In Zelle A1 steht:
kuechenrollenhalter online kauf
In Zelle A2 steht:
http://www.xxx.de/xxxTracking?tid=157053C157S157052CL30PPC&url=[[http://www.xxxxx.de/bp/search.htm?qu=939730J&landmark=Entry&wkz=87&iwl=975&typ=SEM&anbieter=xxx&aktion=Keyword&version=ohne&promo=kuechenrollenhalter+online+kauf]]&kw=[[kuechenrollenhalter]]xyz
Mein Code soll das daraus machen:
http://www.xxx.de/xxxTracking?tid=157053C157S157052CL30PPC&url=[[http://www.xxxxx.de/bp/search.htm?qu=939730J&landmark=Entry&wkz=87&iwl=975&typ=SEM&anbieter=xxx&aktion=Keyword&version=ohne&promo=kuechenrollenhalter+online+kauf]]&kw=[[kuechenrollenhalter+online+kauf]]xyz
Also finde die ersten 2 "]]" von rechts gesehen, dann fang an zu löschen bis "[[" kommt, dann schreibe zwischen "[[]]" den Wert aus A1 und ersetze jedes Leerzeichen durch "+".
Springe in die nächste Zeile, mache das gleiche bis Zelle An keinen Wert hat.
Lösungsansätze:
Ich erlaube mir hier Andi's Antwort vorzugreifen, ohne sie entbehrlich werden zu lassen:
&ltpre&gt
Sub t()
Dim a As Long
'For a = 1 To Range("A65536").End(xlUp).Row
a = 1
Cells(a + 1, 2) = Left(Cells(a, 2), InStrRev(Cells(a, 2), "[")) & Replace(Cells(a, 1), " ", "+") & Right(Cells(a, 2), Len(Cells(a, 2)) - (InStrRev(Cells(a, 2), "]") - 2))
'Next a
End Sub&lt/pre&gt
~f~
und die Ändrung in der &ltpre&gt
&ltpre&gt
Function (der Test für die Forderung "TAGs erhalt", führte zur weiteren Korrekturen:
~f~
&ltpre&gt
Function ReplaceTextBereich(strOrigi As String, strNew As String, _
Optional strTag0 As String = "[[", _
Optional strTag1 As String = "]]", _
Optional direction As Integer = -1) As String
Dim pos0 As Integer, pos1 As Integer, tpos As Integer, strTxtChg As String
pos0 = InStr(strOrigi, strTag0)
pos1 = InStr(strOrigi, strTag1)
If direction &lt 0 Then
Do
tpos = InStr(pos0 + Len(strTag0), strOrigi, strTag0)
If tpos &gt 0 Then pos0 = tpos
Loop Until tpos = 0
Do
tpos = InStr(pos1 + Len(strTag1), strOrigi, strTag1)
If tpos &gt 0 Then pos1 = tpos
Loop Until tpos = 0
End If
If pos0 &gt 0 And _
pos1 &gt 0 And _
pos0 &lt pos1 Then
strTxtChg = Mid(strOrigi, _
pos0, _
(pos1 - pos0) + Len(strTag1)) 'Tags bleiben erhalten
ReplaceTextBereich = Replace(strOrigi, _
strTxtChg, _
strTag0 & Replace(strNew, " ", "+") & strTag1)
Else
ReplaceTextBereich = strOrigi
End If
End Function&lt/pre&gt
Meine Fragen:
Ist es richtig wenn ich den Code einfach so hintereinander in den Editor schreibe?
Im Moment schreibt er das Ergebnis in Zelle B2, sollte aber in B1 landen also das alte ersetzen.
Wenn die Kommentarapostrophe weg mache sollte er doch einfach in die nächste Zeile gehen, findet er einen Wert, dann läuft die Schleife noch mal findet er nichts dann hört er auf... Er gibt aber immer eine Fehlermeldung raus bei Next A, warum?
Freue mich über jegliche Hilfe. Danke im Voraus.
LG
abu

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

Betreff
Datum
Anwender
Anzeige
AW: Danke Andi & Uwe
25.10.2006 14:21:40
Andi
Hi,
also ich verkomme immer noch a bisserl darin, was denn nun in welche Zeile geschrieben werden soll; letzte Woche hiess es zunächst, dass Spalte B mit dem Inhalt aus Spalte A verändert werden soll; dann sollte A2 mit dem Inhalt aus A1 verändert werden, und jetzt bietest Du zweierlei Möglichkeiten an, erst sagst Du wieder dass das Ergebnis nach A2 soll, und unten soll es dann nach B1.
Machbar sind natürlich alle Varianten, aber ich wüsste jetzt gerne, welche es denn nun sein soll; also:
- in welcher Zelle steht 'kuechenrollenhalter online kauf'
- in welcher Zelle steht 'abcd[[kuechenrollenhalter]]xyz
- in welcher Zelle soll stehen 'abcd[[kuechenrollenhalter+online+kauf]]xyz
und wie geht's dann weiter, also
- in welcher Zelle steht dann zb 'klorollenhalter offline ausgeliehen'
- in welche Zelle 'efgh[[klorollenhalter]]uvw'
- und in welcher soll dann stehen 'efgh[[klorollenhalter+offline+ausgeliehen]]uvw'
Schönen Gruß,
Andi
Anzeige
Besser formuliert
25.10.2006 15:35:22
abu
Hallo Andi,
schön das du wieder an Board bist, freut mich.
Sorry wenn ich mich immer so umständlich ausdrücke ich versuchs jetzt noch mal:
Die Zeilen sind folgendermaßen aufgebaut:
Zeile 1 sind Überschriften und in Zeile 2 fängt die Schose an:
in A2 stehen Kundennummern - soll unverändert bleiben
in B2 steht der Wert der nach dem löschen eingesetzt werden soll, Zelle B2 soll unverändert bleiben.
in C3 steht die lange Zeile mit den eckigen Klammern. Da soll erst drin gelöscht werden und anschließend der Wert mit dem Wert aus B2 ersetzt werden (incl. Leerzeichen weg und mit + Zeichen verbinden, also C3 wird als einzige Zelle geändert.
Dann folgen Zellen die aber so bleiben sollen.
Das ganze mit jeder Zeile solange bis An leer ist.
Hoffe das ganze ist jetzt klarer, ansonsten Frag bitte.
LG
abu
Anzeige
AW: Besser formuliert
25.10.2006 15:50:43
Andi
Hi,
ich muss also den Wert, der in die eckigen Klammern reingeschrieben werden soll, eine Zelle nach rechts und eine nach unten 'mitnehmen', oder?
Also von B2 nach C3
Im nächsten Datensatz dann von B3 nach C4, dann B4 nach C5, ...
Richtig?
Dann so:

Sub t()
Dim a As Long
For a = 2 To Range("A65536").End(xlUp).Row
Cells(a + 1, 3) = Left(Cells(a + 1, 3), InStrRev(Cells(a + 1, 3), "[")) & Replace(Cells(a, 2), " ", "+") & Right(Cells(a + 1, 3), Len(Cells(a + 1, 3)) - (InStrRev(Cells(a + 1, 3), "]") - 2))
Next a
End Sub

Schönen Gruß,
Andi
Anzeige
AW: Besser formuliert
25.10.2006 15:59:11
abu
ich bin auch echt ein Trottel.... 1000mal Entschuldigung.
Nein, nicht richtig ich habs wieder falsch geschrieben.
Jede Zeile muss für sich selber bearbeitet werden, also:
A2 bleibt, B2 bleibt (gibt aber den Wert für C2), in C2 wird gelöscht und der Wert aus B2 kommt rein. Dann nächste Zeil und das ganze von vorne.
Noch mal Sorry
Gruß abu
ps: was ist mit dem Rest, muss der Code auch dahinter stehen oder sind es nur die Zeile die du gerade erstellen willst und ich durch mein dämlich Angaben verzögere?
AW: Besser formuliert
25.10.2006 16:12:01
Andi
Hi,
hatte ich ja fast schon geahnt, dass das ein Tipfehler war... ;-))
Macht aber nix, die notwendige Änderung am Code ist minimal, jetz schaut er so aus:

Sub t()
Dim a As Long
For a = 2 To Range("A65536").End(xlUp).Row
Cells(a, 3) = Left(Cells(a, 3), InStrRev(Cells(a, 3), "[")) & Replace(Cells(a, 2), " ", "+") & Right(Cells(a, 3), Len(Cells(a, 3)) - (InStrRev(Cells(a, 3), "]") - 2))
Next a
End Sub

Dies, und nur dies, kopierst Du in ein Modul in Deiner Mappe, führst es aus, und fertig.
Schönen Gruß,
Andi
Anzeige
AW: Besser formuliert
25.10.2006 16:30:10
abu
Hallo Andi,
sieht Klasse aus. Ich denke wir (also du) hast es. 1000 mal Danke.
LG
abu
Gern geschehen...
25.10.2006 16:34:25
Andi
Freut mich, dass ich helfen konnte;
Schönen Gruß,
Andi

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige