Discussion:
Suchen/Ersetzen funktioniert nicht per VBA
(zu alt für eine Antwort)
Markus Löw
2005-03-15 20:29:17 UTC
Permalink
Hallo NG,
ich habe folgenden Code:

Columns("CE:CN").Select
Selection.Replace What:="0", Replacement:="", LookAt:=xlWhole, _
SearchOrder:=xlByRows, MatchCase:=False
Selection.Replace What:="#nv", Replacement:="", LookAt:=xlWhole, _
SearchOrder:=xlByRows, MatchCase:=False
Selection.Replace What:="00.01.1900", Replacement:="", LookAt:=xlWhole,
_
SearchOrder:=xlByRows, MatchCase:=False

Diesen Code habe ich beim Suchen/Ersetzen mit aufgenommen. Interessanerweise
funktioniert dies aber nicht, wenn ich den Code durchlaufen lasse.
Hat jemand eine Idee, woran dies liegt? Normalerweise lassen sich
aufgezeichnete Codes immer wieder gut replizieren. Wieso hier nicht, großes
????


Gruß Markus
Herbert Taferner
2005-03-16 10:11:56 UTC
Permalink
Hallo Markus,

möchtest du die Werte wirklich löschen
offensichtlich entstehen die Fehlerwerte ja durch irgendwelche Formeln
in diesen Zellen, wenn du diese Werte löschst dann sind ja auch die
ursprünglichen Formeln weg

normalerweise behandelt man solche Fehler bei der Wurzel
bzw. unterbindet sie in der Zelle wo sie auftreten
z. B. durch

=WENN(ISTFEHLER(alte_Formel);"";alte_Formel)

mfg Herbert
Markus Löw
2005-03-16 19:00:09 UTC
Permalink
Hallo Herbert,

das mit ISTFEHLER kenn ich, nur mein Problem ist, daß ich eine Sheet mit
über 100 (einhundert) Spalten auf 10 verschiedenen Quellen füllen muß.
Ich habe schon einen Großteil dieser Verknüpfung jetzt per Makrorekorder
aufgezeichnet a la:

Range("b1").Select
'ActiveCell.FormulaR1C1 = _
"=VLOOKUP(RC[-1],'[Liste2.xls]Übersicht_Gesamt'!C3:C9,2,0)"

Das Ding jetzt jetzt wieder umzubauen, na ja, im Notfall muß das ja sein.

Ich hab mich heute daran versucht, die VLOOKUP-Routine per VBA-Code
hinzubekommen, nur irgendwie funktz nicht:

Dim Startzelle
Dim Suchkriterium :
Dim Suchkriterium1
Dim Suchkriterium2
Dim Spaltenindex
Dim Matrix_Datei
Dim Matrix_Mappe
Dim Matrix
Dim Matrix_von
Dim Matrix_bis
Dim Formel

Startzelle = "B1"
Suchkriterium1 = "RC["
Suckkriterium2 = -1
Suchkriterium = Suchkriterium1 & Suchkriterium2 & "]"
Matrix_Datei = "'[" & "Liste2.xls" & "]'"
Matrix_Mappe = "Übersicht_Gesamt" & "'"
Matrix = Matrix_Datei & Matrix_Mappe
Matrix_von = "C3"
Matrix_bis = "C9"
Spaltenindex = 2

Formel = "=VLOOKUP (" & _
Suchkriterium & "," & _
Matrix & "!" & _
Matrix_von & ":" & _
Matrix_bis & "," & _
Spaltenindex & ",0)"


Range("b1").Select
ActiveCell.FormulaR1C1 = Formel ' soll
"=VLOOKUP(RC[-1],'[Liste2.xls]Übersicht_Gesamt'!C3:C9,2,0)" rauskommen :-))

Per For Next soll dann der Spaltenindex immer bei jeder Schleife auf
Spaltenindex+1 gesetzt werden

Im Localfenster spukt er mich zwar den String aus, verarbeitet wird er aber
nicht.

Mein Ziel ist, eine Routine zu entwicklen, in der ich ähnlich wie bei dem
Funktionsassistent
- Suchkriterium ( z.B B1)
- Matrix (nur Spalten z.B. D:Z)
- Spaltenindex

und jetzt kommtŽs
- Anzahl Wiederholungseinträge nach rechts

eingeben kann und dann der Rest per Code automatisch gefüllt wird.

Interessantes Problem, gell?

Hab in der NG oder Google bisher hierfür noch nicht einmal einen
Lösungsansatz gefunden.

Vielen Dank trotzdem für deine immer schnelle Hilfe

Gruß Markus
Post by Herbert Taferner
Hallo Markus,
möchtest du die Werte wirklich löschen
offensichtlich entstehen die Fehlerwerte ja durch irgendwelche Formeln
in diesen Zellen, wenn du diese Werte löschst dann sind ja auch die
ursprünglichen Formeln weg
normalerweise behandelt man solche Fehler bei der Wurzel
bzw. unterbindet sie in der Zelle wo sie auftreten
z. B. durch
=WENN(ISTFEHLER(alte_Formel);"";alte_Formel)
mfg Herbert
Thomas Ramel
2005-03-16 19:14:02 UTC
Permalink
Grüezi Markus

Markus Löw schrieb am 16.03.2005
Post by Markus Löw
Mein Ziel ist, eine Routine zu entwicklen, in der ich ähnlich wie bei dem
Funktionsassistent
- Suchkriterium ( z.B B1)
- Matrix (nur Spalten z.B. D:Z)
- Spaltenindex
und jetzt kommt´s
- Anzahl Wiederholungseinträge nach rechts
eingeben kann und dann der Rest per Code automatisch gefüllt wird.
Interessantes Problem, gell?
Hab in der NG oder Google bisher hierfür noch nicht einmal einen
Lösungsansatz gefunden.
Was aus deinen Ausführungen nicht hervorgeht ist:

Willst du eine Sub mit Übergabe-Parameter erstellen?

Oder soll es eine Function geben, die Du dann im Tabellenlbatt in einer
Zelle verwendest?

Wenn das Zweite zutrifft, muss ich dich leider enttäuschen!

Eine aus einer Zelle heraus sufgerufene function muss so aufgebaut sein,
dass sie einen Rückgabewert liefert. Auch sollte sie auf keine anderen
Zellen und Bereiche zugreifen als ihr via die Parameter übergeben werden.

Insbesondere kann/darf sie keine anderen Zellen verändern, Formate vergeben
oder gar Werte/Formeln eintragen - all das ist untersagt, weil dadurch
letzlich dine klassische Endlos-Schleife im Berechnungsbaum entstehen
würde.



| [Fullquote von 40tude-Dialog[1] entsorgt]



Mit freundlichen Grüssen
Thomas Ramel


Fussnote(n):
------------
[1] Programm: http://www.40tude.com/dialog/
Anleitung: http://www.gaehn.org/software/40tude-dialog/tutorial/
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2000 SP-3]
Markus Löw
2005-03-16 20:31:45 UTC
Permalink
Schönen guten Abend Thomas.

Die Idee dahinter ist, daß über eine Userform oder über eine INPUT-Box die
Variablen gefüllt werden.
Ich möchte einfach die Variblen, welche ich hier im Code direkt gefüllt
haben

Startzelle = "B1"
Suchkriterium1 = "RC["
Suckkriterium2 = -1
Suchkriterium = Suchkriterium1 & Suchkriterium2 & "]"
Matrix_Datei = "'[" & "Liste2.xls" & "]'"
Matrix_Mappe = "Übersicht_Gesamt" & "'"
Matrix = Matrix_Datei & Matrix_Mappe
Matrix_von = "C3"
Matrix_bis = "C9"
Spaltenindex = 2

über ne INPUT-Box etc füllen und den Code dann ablaufen lassen.

Gruß Markus



"Thomas Ramel" <***@MVPs.org> schrieb im Newsbeitrag news:1ean5m2uw4kfp$.q02wpjei9x53$***@40tude.net...
Grüezi Markus

Was aus deinen Ausführungen nicht hervorgeht ist:

Willst du eine Sub mit Übergabe-Parameter erstellen?

Oder soll es eine Function geben, die Du dann im Tabellenlbatt in einer
Zelle verwendest?

Wenn das Zweite zutrifft, muss ich dich leider enttäuschen!

Eine aus einer Zelle heraus sufgerufene function muss so aufgebaut sein,
dass sie einen Rückgabewert liefert. Auch sollte sie auf keine anderen
Zellen und Bereiche zugreifen als ihr via die Parameter übergeben werden.

Insbesondere kann/darf sie keine anderen Zellen verändern, Formate vergeben
oder gar Werte/Formeln eintragen - all das ist untersagt, weil dadurch
letzlich dine klassische Endlos-Schleife im Berechnungsbaum entstehen
würde.



| [Fullquote von 40tude-Dialog[1] entsorgt]



Mit freundlichen Grüssen
Thomas Ramel


Fussnote(n):
------------
[1] Programm: http://www.40tude.com/dialog/
Anleitung: http://www.gaehn.org/software/40tude-dialog/tutorial/
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2000 SP-3]
Herbert Taferner
2005-03-16 21:13:37 UTC
Permalink
Hallo Markus,

versuche einmal da ein wenig weiter,
das sollte diese Formel ergeben

=SVERWEIS($A$1;[Liste2.xls]Übersicht_Gesamt!C3:E9;2;0)

und wie hier von B1 dann 5 Zeilen weiter nach unten eintragen

'-------------------------------
Sub probelauf()
'Startzeile,Startspalte,Suchzeile,Suchspalte,Datei,Blatt,
'Matrix,Spaltenindex,Wahr/Falsch,AnzahlZ
Eintrag ("1,2,1,1,Liste2.xls,Übersicht_Gesamt,C3:E9,2,0,5")

End Sub
Sub Eintrag(Testx As String)
Dim Tx As Variant
Dim i As Long
Dim lg As Long
Dim Suche As String
Dim Formel As String
Tx = Split(Testx, ",")

For i = 0 To CInt(Tx(9) - 1)

Suche = Cells(CInt(Tx(2)) + i, _
CInt(Tx(3))).Address

Formel = "=SVERWEIS(" & Suche & ";" & _
"[" & Tx(4) & "]" & Tx(5) & "!" & _
Tx(6) & ";" & Tx(7) & ";" & Tx(8) & ")"

Cells(CInt(Tx(0)) + i, CInt(Tx(1)) + 1). _
FormulaLocal = Formel

Next i
End Sub
'--------------------------

mfg Herbert
Herbert Taferner
2005-03-16 21:46:48 UTC
Permalink
Hallo Markus,

oder mit Inputbox
das ist aber nur eine Spielerei ohne Plausibilitätsprüfung
und dadurch mögliche Fehler und deren Auswertung

bzw. die Zeilen und Spaltenwerte sollten auch
auf Long statt Integer gewandelt werden

'----------------------------
Sub Eintrag()
Dim Testx As String
Dim Tx As Variant
Dim i As Long
Dim lg As Long
Dim Suche As String
Dim Formel As String

Testx = InputBox("Startzeile,Startspalte,Suchzeile," & vbCrLf & _
"Suchspalte,Datei,Blatt,Matrix," & vbCrLf & _
"SpaltenIndex,Wahr/Falsch,AnzahlZ" & vbCrLf & _
"1,2,1,1,Liste2.xls,Übersicht_Gesamt,C3:E9,2,0,5", _
"Geben sie die Werte ein")

Tx = Split(Testx, ",")
With ActiveSheet
For i = 0 To CLng(Tx(9) - 1)

Suche = .Cells(CLng(Tx(2)) + i, _
CLng(Tx(3))).Address

Formel = "=sverweis(" & Suche & ";" & _
"[" & Tx(4) & "]" & Tx(5) & "!" & _
Tx(6) & ";" & Tx(7) & ";" & Tx(8) & ")"

.Cells(CLng(Tx(0)) + i, CLng(Tx(1)) + 1). _
FormulaLocal = Formel

Next i
End With
End Sub
'------------------------------

mfg Herbert
Herbert Taferner
2005-03-16 23:00:31 UTC
Permalink
Hallo Markus,

oder mit einer zweiten Schleife den Spaltenindex erhöhen
und Formel auch nach rechts erweitern um x Spalten
mit letzten Parameter

'----------------------------
Sub Eintrag()
Dim Testx As String
Dim Tx As Variant
Dim i As Long, j As Long
Dim lg As Long
Dim Suche As String
Dim Formel As String
Testx = _
InputBox("Startzeile,Startspalte,Suchzeile,Suchspalte,Datei," & vbCrLf & _
"AnzahlZ,Blatt,Matrix,SpaltenIndex," & vbCrLf & _
"Wahr/Falsch,Spaltenindex weiter" & vbCrLf & vbCrLf & _
"1,2,1,1,Datei.xls,Tabelle1,C3:E9,2,0,5,3", _
"Geben sie die Werte ein")
If Testx = "" Then Exit Sub
Tx = Split(Testx, ",")
With ActiveSheet
For j = 0 To CLng(Tx(10) )
For i = 0 To CLng(Tx(9) - 1)

Suche = .Cells(CLng(Tx(2)) + i, _
CLng(Tx(3))).Address

Formel = "=sverweis(" & Suche & ";" & _
"[" & Tx(4) & "]" & Tx(5) & "!" & _
Tx(6) & ";" & CLng(Tx(7)) + j & _
";" & Tx(8) & ")"

.Cells(CLng(Tx(0)) + i, CLng(Tx(1)) + j). _
FormulaLocal = Formel

Next i
Next j
End With
End Sub
'---------------------------

mfg Herbert
Markus Löw
2005-03-17 19:12:11 UTC
Permalink
Hallo Herbert,
werde mich am Wochenende damit beschäftigen. Ergebnis poste ich dann.
Vielen Dank für deine wahrhaft unermüdliche Hilfe.

Vielen herzlichen Dank

Markus
Post by Herbert Taferner
Hallo Markus,
oder mit einer zweiten Schleife den Spaltenindex erhöhen
und Formel auch nach rechts erweitern um x Spalten
mit letzten Parameter
'----------------------------
Sub Eintrag()
Dim Testx As String
Dim Tx As Variant
Dim i As Long, j As Long
Dim lg As Long
Dim Suche As String
Dim Formel As String
Testx = _
InputBox("Startzeile,Startspalte,Suchzeile,Suchspalte,Datei," & vbCrLf & _
"AnzahlZ,Blatt,Matrix,SpaltenIndex," & vbCrLf & _
"Wahr/Falsch,Spaltenindex weiter" & vbCrLf & vbCrLf & _
"1,2,1,1,Datei.xls,Tabelle1,C3:E9,2,0,5,3", _
"Geben sie die Werte ein")
If Testx = "" Then Exit Sub
Tx = Split(Testx, ",")
With ActiveSheet
For j = 0 To CLng(Tx(10) )
For i = 0 To CLng(Tx(9) - 1)
Suche = .Cells(CLng(Tx(2)) + i, _
CLng(Tx(3))).Address
Formel = "=sverweis(" & Suche & ";" & _
"[" & Tx(4) & "]" & Tx(5) & "!" & _
Tx(6) & ";" & CLng(Tx(7)) + j & _
";" & Tx(8) & ")"
.Cells(CLng(Tx(0)) + i, CLng(Tx(1)) + j). _
FormulaLocal = Formel
Next i
Next j
End With
End Sub
'---------------------------
mfg Herbert
Herbert Taferner
2005-03-17 19:31:24 UTC
Permalink
Hallo Markus,
Post by Markus Löw
werde mich am Wochenende damit beschäftigen. Ergebnis poste ich dann.
Vielen Dank für deine wahrhaft unermüdliche Hilfe.
Vielen herzlichen Dank
Bitte gern !

mfg Herbert

Loading...