Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1200to1204
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
Inhaltsverzeichnis

WorksheetFunction Mid?

WorksheetFunction Mid?
Jörn
Hallo Zusammen,
gibt es eine Entsprechung der Funktion =Teil() als WorksheetFunction.
Hintergrund ist, daß ich mir über die "Teil-Funktion" Zellkoordinaten aus einem Zelltext extrahieren möchte, dann in eine Variable einlesen, um die Zellen anschließend ansteuern zu können.
Der Text hat immer den selben Aufbau: "B w $E$2 > $E$3"
so daß ich immer von der Adresse: 6. und 8. Zeichen (hier: E2) nach Zeichen 13/15 (E3) copy pasten kann.
Schmankerl wäre, wenn nach jedem Schleifendurchlauf das Makro für 6 Sekunden anhält und dann weiterläuft.
Private Sub CommandButton4_Click()
Dim lRow, i, j, m, n
lRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To lRow - 6
j = Range("A" & 6 + i).Address
m = WorksheetFunction.Mid(j, 6, 1) & Mid(j, 8, 1)
n = WorksheetFunction.Mid(j, 13, 1) & Mid(j, 15, 1)
Sheets(1).Range(m).Offset(6, 2).Copy
Sheets(1).Range(n).Offset(6, 2).Paste
Sheets(1).Range(m).Offset(6, 2) = ""
'stoppen für 6 Sekunden
End If
Next i
End Sub
Vielen Dank für Eure Ideen
In der Datei wird das Problem vielleicht klarer ...
https://www.herber.de/bbs/user/73525.xlsm
schöne Grüße
Jörn
AW: WorksheetFunction Mid?
13.02.2011 18:25:25
ing.grohn
Hallo Jörn,
mit dem Makrorecorder aufgenommen (in der Tabelle: =Teil("Text";3;2)):

ActiveCell.FormulaR1C1 = "=MID(RC[-1],3,2)"
vielleicht hilft das weiter.
(nicht alle Tabellenfunktionen haben eine Entsprechung in VBA)
Mit freundlichen Grüßen
Albrecht
AW: WorksheetFunction Mid?
13.02.2011 18:35:18
Peter
Hallo Jörn,
der Befehl heißt ganz schlicht Mid, ohne WorksheetFunction davor.
Du kannst Dir seinen Aufbau ja durch Markieren und dann F1 drücken anzeigen lassen.
Gruß Peter
AW: WorksheetFunction Mid?
13.02.2011 18:56:17
Jörn
Hallo,
Danke für Eure Rückmeldungen,
das Problem ist, daß das Ergebnis der Funktion in eine Variable gespeichert werden muss, und da bin ich im Forum nur auf diese Möglichkeit WorkbookFunction gestoßen. Wenn ich schreibe:
m = Mid(j, 6, 1) & Mid(j, 8, 1)
dann bekomme ich eine leere MsgBox. Das Ergebnis der Teilfunktion wird also nicht an die Variable m weitergereicht.
Zusätzlich funktioniert die Formel nicht, weil Variable j nicht erkannt wird obwohl beim Test mit MsgBox die Zelladresse richtig ausgegeben wird.
Range("r4").Formula = "= Mid(j, 6, 1) & Mid(j, 8, 1)"
Formula.Local habe ich auch schon probiert.
Vielen Dank für Eure Hilfen
Jörn
Anzeige
Sorry, Frage ist noch zu haben, Danke owT
13.02.2011 18:58:02
Jörn
AW: Sorry, Frage ist noch zu haben, Danke owT
13.02.2011 19:57:30
ing.grohn
Hallo Jörn,
probier doch mal folgendes aus:

Sub Test_Mid()
Dim j As String
Dim m As String
j = "das Excel-Forum bei Herber"
m = Mid(j, 6, 2) & Mid(j, 10, 2)
MsgBox m
'in Zelle A4 steht:das Excel-Forum bei Herber
Range("B4").Value = m
Range("C4").Formula = "=MID(RC[-2],6,2)" & "&MID(RC[-2],10,2)"
End Sub

Mit freundlichen Grüßen
Albrecht
AW: Sorry, Frage ist noch zu haben, Danke owT
13.02.2011 19:57:58
Josef

Hallo Jörn,
so?

Private Sub CommandButton4_Click()
  Dim rng As Range
  
  For Each rng In Range("A7:A" & Cells(Rows.Count, 1).End(xlUp).Row)
    If rng <> "" Then
      Range(Split(rng.Text, " ")(4)).Offset(6, 2) = Range(Split(rng.Text, " ")(2)).Offset(6, 2).Value
      Range(Split(rng.Text, " ")(2)).Offset(6, 2) = ""
      Sleep 3000 'Pause in Millisekunden!
    End If
  Next
  
End Sub


Gruß Sepp

Anzeige
AW: Sorry, Frage ist noch zu haben, Danke owT
13.02.2011 20:35:03
Jörn
Hallo Sepp,
der Code hat ausgezeichnet funktioniert, bis auf Sleep 3000. Da zeigt er mir: Fehler beim Kompilieren - Sub oder Function nicht definiert?
Wenn sie erlaubt ist, eine Verständnisfrage bitte (mit F1 bin ich nicht wesentlich weiter gekommen):
wenn ich den Text "B w E2 Pfeil E3" anhand der Leerzeichen trenne entstehen doch 5 Elemente:
B; w; E2; Pfeil und E3
warum wird E3 mit (4) angesprochen?
Vielen Dank für die abermals tolle Hilfe
Gruß und ungeschleimte Verbeugung
Jörn
AW: Sorry, Frage ist noch zu haben, Danke owT
13.02.2011 20:45:05
Josef

Hallo Jörn,
sorry die API-Funktion gehört natürlich auch dazu.
Option Explicit

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private rng As Range
Private lngOldColor As Long

Private Sub CommandButton4_Click()
  Dim rng As Range
  
  For Each rng In Range("A7:A" & Cells(Rows.Count, 1).End(xlUp).Row)
    If rng <> "" Then
      Range(Split(rng.Text, " ")(4)).Offset(6, 2) = Range(Split(rng.Text, " ")(2)).Offset(6, 2).Value
      Range(Split(rng.Text, " ")(2)).Offset(6, 2) = ""
      Sleep 3000 'Pause in Millisekunden!
    End If
  Next
  
End Sub

Split() gibt ein VariantArray zurück dessen Index bei 0 beginnt.

Gruß Sepp

Anzeige
Kommentare und Vorschlag
13.02.2011 20:01:27
Erich
Hi Jörn,
mit "Dim lRow, i, j, m, n" hast du die Namen (und den Typ) deiner Variablen recht lässig gewählt.
Manchmal rächt sich das.
j = Range("A" & 6 + i).Address
belegt für i=1 die (String-)Variable j mit der Adresse des Bereichs A7, also mit "$A$7".
Du willst in j aber nicht die Adresse von A7, sondern den Wert stehen haben, also etwa "B w $E$2 > $E$3"
Also müsstest du schreiben:
j = Range("A" & 6 + i).Value ' nicht .Address
In der Zeile
If Range("A" & 6 + i).Value = "" Then
fragst du ja dann richtigerweise den Wert der Zelle ab - und nicht deren Adresse.
Da j jetzt der Wert ist, kannst du nun einfach schreiben:
If j = "" Then
In der Zeile
m = WorksheetFunction.Mid(j, 6, 1) & Mid(j, 8, 1)
verwendest du einmal die Excelfkt. TEIL (als WorksheetFunction.Mid()) und einmal die VBA-Fkt. Mid(j, 8, 1).
Welchen Sinn hat das?
Dass m bislang immer der leere String wurde, lag an der falschen Belegung von j.
Der Text "$A$7" ist einfach nicht lang genug. Die 6. und 8. Stelle sind leer.
Probier es mal mit diesem Übersetzungsversuch:

Private Sub CommandButton4_Click()
Dim lngZ As Long, strZug As String
Dim strVon As String, strHin As String
For lngZ = 7 To Cells(Rows.Count, 1).End(xlUp).Row
strZug = Range("A" & lngZ).Value
If strZug = "" Then
MsgBox "Keine Partiedaten"
Else
strVon = Mid(strZug, 6, 1) & Mid(strZug, 8, 1)
strHin = Mid(strZug, 13, 1) & Mid(strZug, 15, 1)
Range(strHin).Offset(6, 2) = Range(strVon).Offset(6, 2)
Range(strVon).Offset(6, 2) = ""
End If
Next lngZ
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Kommentare und Vorschlag
13.02.2011 20:56:12
Jörn
Hallo Erich, Sepp, Gerd und Albert,
dieses Forum ist der absolute Hammer! Vielen, Vielen Dank für Eure tatkräftige Unterstützung!
Erich, Deine Erklärungen sind Gold wert. Das mit der "lässigen" Deklaration liegt an meinem noch nicht sehr weit gediehenen VBA KnowHow. Dein Code funktioniert super und ich kann jetzt auch bestens nachvollziehen, woran es bislang krankte
und auch die Frauenschalterlose Sleep-Function ist als Sahnehäuptchen (oder wie man mich hier im Forum mal verbessert hat: Schaumkrone) in den Code integriert.
Vielen herzlichen Dank und (bitte) weiter so
Jörn
Anzeige
AW: WorksheetFunction Mid?
13.02.2011 20:45:14
Gerd
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Hallo Jörn,
schreibe diese API - Funktion ins Modul ganz oben. Dann funktioniert "SLEEP" .
Eindimensionale Datenfelder beginnen mit Item 0 - es sei denn du stellst mit dem Frauenschalter,
Option Base 1 auf Untergrenze 1 um.
Gruß Gerd
AW: WorksheetFunction Mid?
13.02.2011 23:07:35
Reinhard
Hallo Gerd,
"Frauenschalter"? klingt irgendwie negativ gegenüber Frauen *find*
Pass halt auf dich auf, nicht daß eine vom womens lib clup mitliest, die kommen dann dann mit der Schere und es macht mal kurz Schnipp, du weißt schon wo sie abschneiden :-)
Wenn du nicht weißt wovon ich rede, macht nix, weiß ich auch oft selbst nicht *gg*, ich meine dieses:
http://translate.google.de/translate?hl=de&sl=en&u=http://en.wikipedia.org/wiki/Feminist_movement&ei=61NYTcGAJor3sganpOGlCw&sa=X&oi=translate&ct=result&resnum=1&ved=0CCkQ7gEwAA&prev=/search%3Fq%3Dwomens%2Blib%26num%3D100%26hl%3Dde%26prmd%3Divns
Wobei mir das viel zu theoretisch ist, ich merke mir das praktische, wenn du was gegen frauen machst kommen die mit der Schere oder messer :-)
Gruß
Reinhard, der nicht wirklich davon überzeugt ist daß sein Beitrag dem Anfrager bei seinem Excelproblem weiterhilft.
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige