Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1192to1196
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

Array

Array
Frank
Hallo Zusammen und ein schönes Neues Jahr,
ich habe eine Schleife in der ich einen String zerlege und Teilergebnisse in zwei Spalten schreibe.
Dies funktioniert auch benötigt aber sehr lange.
Jetzt hatte ich mir überlegt dies vielleicht in ein Array zu schreiben und dann erst zu übergeben.
und nun zu meinen Fragen.
1. würde es mit einem Array schneller gehen?
wenn ja
2. wie stelle ich das an?(habe keinerlei Array Erfahrung)
Vielen Dank
Frank
Hier noch der Code aus der Schleife For k = 2 To CellCount strText = EX.Cells(k, 10).Value IntString = InStrRev(strText, "/") strText = VBA.Right(strText, Len(strText) - IntString) If strText "" Then strText = VBA.Right(strText, Len(strText) - 1) strText1 = strText If IntString = 20 Then strText1 = VBA.Left(strText, Len(strText) - 13) strText = VBA.Right(strText, Len(strText) - 4) End If If IntString > 20 Then intString1 = Len(strText) If Len(strText) = 14 Then strText1 = VBA.Left(strText, Len(strText) - (IntString - 9)) Else strText1 = VBA.Left(strText, Len(strText) - (IntString - 11)) End If End If If IntString

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Array
06.01.2011 10:20:41
ransi
HAllo
1. würde es mit einem Array schneller gehen?
Auf jeden Fall.
ICh habe versucht deinen Code nachzuvollziehen.
HAbs leider nicht geschafft.
Was soll der Code leisten, bzw. wie soll diese Stringzerlegung funktionieren ?
ransi
AW: Array
06.01.2011 10:40:34
Frank
Hallo ransi,
in einen Tabellenblatt stehen in Spalte k Strings mit unterschiedlichem Inhalt und Länge
z.B. P1PM100LIPS3006227446000010ZFM1C0 / US00XXXXXXXXXXX oder
P1PM100LIPS3006222375000010ZFM6C0 / wenn der String so aussihet soll nichts passieren
Die anderen Strings zerlege ich mir so, dass ich zwei Teilergebnisse erhalte
strtext = XXXXXXXXXXX (Faxnummer)
strText1 = US (Ländercode)
und diese Ergebnisse würde ich gerne in ein Array schreiben
und anschließend in zwei spalten auf dem gleichen Tabellenblatt ausgeben.
Vielen Dank schon mal
Frank
Anzeige
AW: Array
06.01.2011 11:02:37
ransi
HAllo
Versuch mal sowas:
Tabelle2

 JKL
1 US\d{2}US\d+$
2P1PM100LIPS3006227446000010ZFM1C0 / US001234345678899083US001234345678899083
3P1PM100LIPS3006222375000010ZFM6C0 /  
4   

Formeln der Tabelle
ZelleFormel
K2=extract_irgendwas(J2;$K$1)
L2=WECHSELN(extract_irgendwas(J2;$L$1); $K$2;"")
K3=extract_irgendwas(J3;$K$1)
L3=WECHSELN(extract_irgendwas(J3;$L$1); $K$2;"")


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Und dazu diesen Code in ein Modul:
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit




Public Function extract_irgendwas(zelle As Range, myPattern As Range)
    Dim Regex
    Dim M As Object
    extract_irgendwas = ""
    Set Regex = CreateObject("vbscript.Regexp")
    With Regex
        .Pattern = myPattern.Text
        Set M = .Execute(zelle.Text)
        If M.Count Then extract_irgendwas = M(0).Value
    End With
End Function


?
ransi
Anzeige
AW: Array
06.01.2011 11:05:48
Frank
Hallo ransi,
vielen Dank erst mal für deine Antwort.
Mit Formeln kann ich in der Tabelle nicht arbeiten.
Der Inhalt dieser Tabelle kommt aus SAP und die würde ich gerne sofort weiterverarbeiten.
Gruß
Frank
AW: Array
06.01.2011 11:25:58
ransi
HAllo Frank
DAnn evtl. so ?
Option Explicit

Public Sub machs()
    Dim arr
    Dim out
    With Sheets("Tabelle2")
        arr = Intersect(.Range("K2").CurrentRegion, .Columns(11)) 'Anpassen
        Redim out(1 To UBound(arr), 1 To 2)
        Dim L As Long
        For L = LBound(arr) To UBound(arr)
            out(L, 1) = extract_irgendwas(arr(L, 1), "US\d{2}")
            out(L, 2) = "'" & Replace(extract_irgendwas(arr(L, 1), "US\d+$"), out(L, 1), "")
        Next
        .Range("L1").Resize(UBound(out), UBound(out, 2)) = out 'Anpassen
    End With
End Sub





Public Function extract_irgendwas(ByVal wert As String, myPattern As String)
    Dim Regex
    Dim M As Object
    extract_irgendwas = ""
    Set Regex = CreateObject("vbscript.Regexp")
    With Regex
        .Pattern = myPattern
        Set M = .Execute(wert)
        If M.Count Then extract_irgendwas = M(0).Value
    End With
End Function


ransi
Anzeige
AW: Array
06.01.2011 12:13:43
Frank
Hallo ransi,
danke für die Antwort.
Ich würde es nur gerne nachvollziehen können.(glaube dazu fehlt mir das Verständnis)
Ich habe es geschaft mein Array mit Daten zu füllen.
dies geht aber nur wenn ich das Array vorher mit einer festen größe deklariere(Feld1(25000,2)
Die Anzahl der Datensätze die ich habe ist aber Variabel. Wie bekomme ich das hin?
Die Variable in dem Fall k hole ich aus einem Cellcount.
Die andere Frage die sich mir stellt ist die, wie ich es schaffe das gesamtte array in einem Rutsch ( also in zwei Spalten) direkt zu übergeben.
Danke
Frank
Anzeige
Beispiel + Erklärung
06.01.2011 10:22:28
Tino
Hallo,
wie wäre es mit einer Beispieldatei und einer Erklärung wie Du die Aufteilung haben möchtest?
Gruß Tino
AW: Beispiel + Erklärung
06.01.2011 10:43:50
Frank
Hallo Tino,
reichen die Erklärungen und Besispiele die ich an ransi geschrieben habe?
Gruß
Frank
so habe ich es verstanden
06.01.2011 11:15:42
Tino
Hallo,
vielleicht meinst Du es ja so,
Deinen Code bekomme ich so nicht zum laufen um das Ergebnis zu prüfen.
https://www.herber.de/bbs/user/72936.xls
Es müsste aber auch einfach mit Text in Spalte funktionieren.
Gruß Tino
AW: so habe ich es verstanden
06.01.2011 11:28:07
Frank
Hallo Tino,
danke schon mal.
So in etwa dachte ich es mir nur möchte ich die US00XXXXXXXXXXX z.B. noch so abschneiden,
dass ich den Ländercode (in diesem Fall US) in eine Variable schreibe. Dann die Zahlenfolge um die Ländervorwahl ( hier 001) bereinige und dann den Rest (XXXXXXXXXX) in eine zweite Variable schreibe.
Dies beiden Variablen möchte ich dann in das Array schreiben und an anderer Stelle auf dem Blatt wieder ausgeben.
Vielen Dank
Frank
Anzeige
AW: Array
06.01.2011 11:22:53
Frank
wenn ich ein Array definiere. sagen wir Feld1() as string
und die Teilstrings dann übergebe
Feld1(k,0) = strText
Feld1(k,1) = strText1
erhalte ich die Meldung
"Index außerhalb des gültigen Bereichs"
Hat natürlich zur Folge , dass ich nichts ausgeben kann.
Dies würde ich dann so machen:
For i = UBound(Feld1) To k
EX.Cells(k, 9).Value = Feld1((i), 0)
EX.Cells(k, 10).Value = Feld1((i), 1)
Next i
Bin für jeden Tip dankbar
Danke
Frank
Anzeige
AW: Array
06.01.2011 12:16:00
Gerd
Hallo Frank!
Sub b()
Dim Feld()
ReDim Feld(CellCount - K, 1)
Feld1(K, 0) = strText
Feld1(K, 1) = strText1
End Sub
Ist aber überflüssig, nachdem Ransi dir das schon gelöst hat.
Gruß Gerd
Rumgeeiere
06.01.2011 12:07:42
Rudi
Hallo,
lad doch einfach mal eine Beispielmappe mit vorher-nachher hoch. Und nicht nur 1 Datensatz!
Gruß
Rudi
AW: Rumgeeiere
06.01.2011 13:02:18
Rudi
Hallo,
liest aus H und schreibt nach I:J
Sub ttt()
Dim arrDaten, arrTmp, i As Integer
arrDaten = Range(Cells(2, 8), Cells(Rows.Count, 8).End(xlUp))
ReDim Preserve arrDaten(1 To UBound(arrDaten), 1 To 2)
For i = 1 To UBound(arrDaten)
arrTmp = Split(arrDaten(i, 1), " / ")
If UBound(arrTmp) > 0 Then
arrDaten(i, 1) = Left(arrTmp(1), 2)
arrDaten(i, 2) = Mid(arrTmp(1), 3) + 0
Else
arrDaten(i, 1) = ""
arrDaten(i, 2) = ""
End If
Next
Cells(2, 9).Resize(UBound(arrDaten), 2) = arrDaten
End Sub

Gruß
Rudi
AW: Rumgeeiere
06.01.2011 13:20:22
Frank
Hallo Rudi,
das ist ja mal saugeil. Funzt bestens.
Tausend dank
Frank
Anzeige
kleiner Nachtrag
06.01.2011 14:20:54
Frank
Das funzt ja super. Wie sieht es aber aus wenn die Ländervorwahl statt 3- entweder 4- oder sogar 5-stellig ist?
Danke und Gruß
Frank
AW: kleiner Nachtrag
06.01.2011 14:35:37
Rudi
Hallo,
dazu brauchst du eine Liste der Vorwahlen (oder deren Länge). Wie soll man sonst erkennen, was Vorwahl und was Nummer ist?
Das Prog schmeißt übrigens nur die führenden Nullen raus.
Gruß
Rudi

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige