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

Zeilen in einem String Array löschen

Zeilen in einem String Array löschen
Swen
Hallo @ all,
Ich habe ein Array (string / Zwiedeminsional) MyArray()..
Aus diesem möchte ich gerne die ersten 30 Rows löschen habe aber keine idee wie ich das machen
kann möchte mir gerne eine Funktion bauen in der ich dann angeben kann wie das array heist und wie viele zeilen gelöscht werden sollen und von vorne oder hinten.
Function reduce_Array (strTempArray as string, intRowDel as integer , Optional blnTop as  _
boolean = true)
as string
End Function

So möchte ich zum beispiel die ersten 30 Rows löschen
MyArray = reduce_Array(MyArray,30,true)
So möchte ich zum beispiel die letzten 30 Rows löschen
MyArray = reduce_Array(MyArray,30,false)
Hat jemand von euch eine Idee?
Gruß
Swen
Evtl m. Redim Preserve -- Gruß owT
26.10.2010 20:24:02
Luc:-?
:-?
AW: Evtl m. Redim Preserve -- Gruß owT
26.10.2010 22:27:07
Swen
ich werde das ma versuchen....
was bedeutet owT?
gruß
swen
'_oT' = 'owT' = 'ohne weiteren Text' _oT
26.10.2010 23:09:10
NoNet
_oT = "ohne Text", also : Im Betreff ist bereits alles gesagt !
AW: '_oT' = 'owT' = 'ohne weiteren Text' _oT
27.10.2010 00:04:20
Swen
danke für die erklräung...
ich habe weiter versucht aber ich bekomme es nicht hin.... hast du
oder jemand anders ein beispiel wie das ausehen müsste für eine zweidimensionale
array variable....
************
Ich habe auch überlegt ob ich nicht
1. die array variable auf der row seite drehen kann
1 auf die letzte position, 2 auf die vorletzte position.... usw.
2.dann würde ich einfach das array (redim) kürzen um die letzten (30)
n zeilen
3. und dann nochmal die gekürzte variable drehen (so das ich in der ausgang position bin
aber ohne die ersten (30) n zeichen.
Was haltet ihr davon.... und hat jemand evtl. von euch eine idee wie das dann aussehen müsste..
danke
gruß
swen
Anzeige
AW: Zeilen in einem String Array löschen
27.10.2010 08:37:46
bst
Hi Swen,
dieses funktioniert (bei einem 1-dim Array) so ähnlich, reicht Dir das?
cu, Bernd
--
Option Explicit

Sub x()
    Dim ar As Variant
    
    ar = Array("1", "2", "3", "4", "5")
    
    Debug.Print Join(Slice(ar, 3), "")
    Debug.Print Join(Slice(ar, , 3), "")
    Debug.Print Join(Slice(ar, 1, 3), "")
    Debug.Print Join(Slice(ar, -1, 9), "")
End Sub

Function Slice(ar As Variant, Optional iUnten As Variant, Optional iOben As Variant) As Variant
    Dim arNeu As Variant, iMin As Long, iMax As Long, i As Long
    
    Slice = Array()
    If Not IsArray(ar) Then Exit Function
    
    If IsMissing(iUnten) Then iUnten = LBound(ar)
    If IsMissing(iOben) Then iOben = UBound(ar)
    
    iMin = Application.Max(LBound(ar), iUnten)
    iMax = Application.Min(UBound(ar), iOben)
    If iMax >= iMin Then
        Redim arNeu(0 To iMax - iMin)
        For i = 0 To iMax - iMin
            arNeu(i) = ar(iMin + i)
        Next
        Slice = arNeu
    End If
End Function

Anzeige
AW: Zeilen in einem String Array löschen
27.10.2010 19:22:32
Swen
Hallo Bernd,
danke aber ich komme damit noch nicht ganz klar.
Ich habe eine zwei deminsionales array in dem ich zeilen/reihen lkommt löschen möchst löschen möchte...
Und dann möchte ich ja in meinem main programm die neue array in dem array haben mit dem ich vorher gearbeitet habe (wenn möglich)
evtl so
MyArray = Slice(MyArray,30)
oder muss ich dann vorerste in eine zweite variablen zwischen speichern?
MyArray2=Slice(MyArray1,30)
gruß
swen
AW: Zeilen in einem String Array löschen
27.10.2010 22:53:08
Swen
Hi Bernd, Hi @ all,
ich habe es jetzt etwas abgeändert:
Funktion*****************************************************************
Public Function Slice(ar As Variant, _
Optional iUnten As Variant, _
Optional iOben As Variant) _
As String
Dim iMin As Long, _
iMax As Long, _
i As Long, _
i2 As Long, _
iMinSpalte As Long, _
iMaxSpalte As Long
If Not IsArray(ar) Then Exit Function
If IsMissing(iUnten) Then iUnten = LBound(ar, 1)
If IsMissing(iOben) Then iOben = UBound(ar, 1)
iMinSpalte = Application.Max(LBound(ar, 2))
iMaxSpalte = Application.Min(UBound(ar, 2))
iMin = Application.Max(LBound(ar, 1), iUnten)
iMax = Application.Min(UBound(ar, 1), iOben)
ReDim arNeu(iMax - iMin, iMaxSpalte - iMinSpalte) As Variant
If iMax >= iMin Then
ReDim arNeu(iMax - iMin, iMaxSpalte - iMinSpalte) As Variant
For i = 0 To iMax - iMin
For i2 = 0 To iMaxSpalte - iMinSpalte
arNeu(i, i2) = ar(iMin + i, i2)
Next i2
Next i
End If
End Function

******************************************************************************
Und diese Rufe ich wie folgt auf:
Aufruf *****************************************************************
Sub test()
Dim dChrom(4,4) As String
dChrom(0,0) = "test0/0"
dChrom(0,1) = "test0/1"
dChrom(0,2) = "test0/2"
dChrom(0,3) = "test0/3"
dChrom(1,0) = "test1/0"
dChrom(1,1) = "test1/1"
dChrom(1,2) = "test1/2"
dChrom(1,3) = "test1/3"
dChrom(2,0) = "test2/0"
dChrom(2,1) = "test2/1"
dChrom(2,2) = "test2/2"
dChrom(2,3) = "test2/3"
dChrom(3,0) = "test3/0"
dChrom(3,1) = "test3/1"
dChrom(3,2) = "test3/2"
dChrom(3,3) = "test3/3"
Dim dChromTemp() As String
dChromTemp =  Slice(dChrom, 2)
End Sub
aber er steigt immer bei
dchromTemp =  Slice(dChrom, 2)
aus.... Und ich verstehe nicht warum...
"Slice(dChrom, 2)" müsste doch das reduzierte array zurück geben
und das array "dChromTemp" ist noch nicht beschrieben und
mit Dim dChromTemp() As String angelegt....
Wo ist der denkfehler?
gruß
swen
Anzeige
AW: Zeilen in einem String Array löschen
bst
Hi Swen,
Slice liefert nichts zurück da die Zeile:
Slice = arNeu
fehlt. Außerdem darf der Rückgabe-Typ der Funktion kein String sein, du willst ja da ein Array of Strings zurückliefern.
cu, Bernd
AW: Zeilen in einem String Array löschen
bst
Abend Swen,
für ein 2-dim Array brauchst Du nur eine Schleife mehr.
Bei Bedarf könnte man analog zu den Zeilengrenzen (von-bis) ebenso Spaltengrenzen zufügen.
Und, Du kannst das sowohl an das alte als auch an ein neues Array zuweisen.
Schaue Dir die Zwischenergebnisse im Lokalfenster an.
HTH, Bernd
--
Option Explicit
Sub x_2()
Dim ar As Variant, arNeu As Variant
' Testdaten in A1:F5 schreiben und in ein Array lesen
With Range("A1:F5")
.Formula = "=ADDRESS(ROW(),COLUMN(),4,1)"
ar = .Value
End With
arNeu = Slice2(ar, 3)
Stop ' arNeu im Lokalfenster anschauen
arNeu = Slice2(ar, , 3)
Stop ' arNeu im Lokalfenster anschauen
ar = Slice2(ar, 2, 4)
Stop ' !!! ar im Lokalfenster anschauen !!!
arNeu = Slice2(ar, -1, 9)
Stop ' arNeu im Lokalfenster anschauen
End Sub

Function Slice2(ar As Variant, Optional iUnten As Variant, Optional iOben As Variant) As  _
Variant
Dim arNeu As Variant, iMin As Long, iMax As Long, i As Long, j As Long
Dim iMin2 As Long, iMax2 As Long
Slice2 = Array()
If Not IsArray(ar) Then Exit Function
If IsMissing(iUnten) Then iUnten = LBound(ar)
If IsMissing(iOben) Then iOben = UBound(ar)
iMin = Application.Max(LBound(ar), iUnten)
iMax = Application.Min(UBound(ar), iOben)
iMin2 = LBound(ar, 2)
iMax2 = UBound(ar, 2)
If iMax >= iMin Then
ReDim arNeu(1 To iMax - iMin + 1, iMin2 To iMax2)
For i = 1 To iMax - iMin + 1
For j = iMin2 To iMax2
arNeu(i, j) = ar(iMin + i - 1, j)
Next
Next
Slice2 = arNeu
End If
End Function

Anzeige
mit Api "... CopyMemoryPtr ..."
29.10.2010 12:24:53
Tino
Hallo,
habe Dir mal ein Beispiel aufgebaut, vielleicht hilft es Dir weiter.
Im Modul 'Modul2_' ist der Code zum löschen der Zeilen aus dem Array.
Im Modul 'Modul1_Beispiele' sind ein bar Beispiele zur Verwendung eingebaut.
Diesen Code habe ich unter xl2007 auf einem 32Bit Betriebssystem getestet.
https://www.herber.de/bbs/user/72088.xls
Gruß Tino

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige