Microsoft Excel

Herbers Excel/VBA-Archiv

Erweiterung eines Makros wg. Einlesen von Daten | Herbers Excel-Forum


Betrifft: Erweiterung eines Makros wg. Einlesen von Daten von: Eddie
Geschrieben am: 14.10.2008 08:20:04

Guten Morgen, kann man das Makro


  Sub tt()
  Dim Zei As Long, Werte, W As Integer, Spa As Long
  For Zei = 30 To Range("A" & Rows.Count).End(xlUp).Row
     If InStr(Cells(Zei, 1), Chr(124)) > 0 Then
        Werte = Split(Cells(Zei, 1), Chr(124))
        For W = LBound(Werte) To UBound(Werte)
           If Len(Werte(W)) > 0 Then
              Spa = Spa + 1
              Cells(Zei, Spa) = Trim(Werte(W))
           End If
        Next W
        Spa = 0
     End If
  Next Zei
  End Sub



so erweitern, das er eine Zeile mit ------ (z.B. mehr als 15 '-' Zeichen in einer Zeile) löscht ??

Dieses Makro teilt mir einen in Excel einkopierten Text in einzelne Spalten auf

Bsp. Daten:


case id|| i02 | 025 | 045 | 044 | nu || _A | _B | _E | _D | _C | _G | _F | _L | _M | _J | _K |  _
i01 | i02 | i13 || remarks/comment
------------------------------------------------------------------------------------------------ _
--------------------
1 || 000 | F | T | F | - || F | T | F | F | F | T | T | T | T | F | T | 000 | T | F || 



Dürfte ja nur ne suchschleife nach dem '-' seien, und wenn dieses Zeichen mehr als 15 mal hintereinander auftaucht, dann lösche die Zeile ??

gruß Eddie

  

Betrifft: AW: Erweiterung eines Makros wg. Einlesen von Daten von: JogyB
Geschrieben am: 14.10.2008 09:08:58

Jetzt mal ohne Eingabe der Anzahl:

Sub tt()
  Dim Zei As Long, Werte, W As Integer, Spa As Long
  ' For-Schleife von hinten nach vorne,
  ' da sich sonst noch abzuarbeitende Zeilennummern verändern
  For Zei = Range("A" & Rows.Count).End(xlUp).Row To 30 Step -1
     If InStr(Cells(Zei, 1), Chr(124)) > 0 Then
        ' Splittet mit 16 "-" als Trennzeichen auf
        ' Wenn aufsplitten gelingt, dann waren 16 aufeinanderfolgende "-" vorhanden
        If UBound(Split(Cells(Zei, 1), "----------------")) > 0 Then
            Rows(Zei).Delete
        End If
        Werte = Split(Cells(Zei, 1), Chr(124))
        For W = LBound(Werte) To UBound(Werte)
           If Len(Werte(W)) > 0 Then
              Spa = Spa + 1
              Cells(Zei, Spa) = Trim(Werte(W))
           End If
        Next W
        Spa = 0
     End If
  Next Zei
End Sub


Gruss, Jogy


  

Betrifft: AW: Erweiterung eines Makros wg. Einlesen von Daten von: JogyB
Geschrieben am: 14.10.2008 10:04:24

Hat so nicht funktioniert... ist immer das Problem, wenn man Code ungetestet herausgibt

Sub tt()
  Dim Zei As Long, Werte, W As Integer, Spa As Long
  ' For-Schleife von hinten nach vorne,
  ' da sich sonst noch abzuarbeitende Zeilennummern verändern
  For Zei = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1
    ' Splittet mit 16 "-" als Trennzeichen auf
    ' Wenn aufsplitten gelingt, dann waren 16 aufeinanderfolgende "-" vorhanden
    If UBound(Split(Cells(Zei, 1), "----------------")) > 0 Then
        Rows(Zei).Delete
    ElseIf InStr(Cells(Zei, 1), Chr(124)) > 0 Then
        Werte = Split(Cells(Zei, 1), Chr(124))
        For W = LBound(Werte) To UBound(Werte)
           If Len(Werte(W)) > 0 Then
              Spa = Spa + 1
              Cells(Zei, Spa) = Trim(Werte(W))
           End If
        Next W
        Spa = 0
    End If
  Next Zei
End Sub



Gruss, Jogy


  

Betrifft: Danke Jogy von: Eddie
Geschrieben am: 14.10.2008 13:14:05

Hat alles geklappt

gruß Eddie


  

Betrifft: @ Jogy ... doch noch etwas gefunden von: Eddie
Geschrieben am: 14.10.2008 13:20:40

Hallo Jogy

Ich habe noch etwas ... und zwar war in meiner Version von den Spalten Teilen die Fkt. drin, das alle Zellen die Text-Formatierung haben .. weil ich auch Daten habe wie 01 oder 000

vielleicht kannst du das noch mit einbauen ??

gruß Eddie


  

Betrifft: AW: @ Jogy ... doch noch etwas gefunden von: JogyB
Geschrieben am: 14.10.2008 13:28:24

Sub tt()
  Dim Zei As Long, Werte, W As Integer, Spa As Long
  ' For-Schleife von hinten nach vorne,
  ' da sich sonst noch abzuarbeitende Zeilennummern verändern
  For Zei = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1
    ' Splittet mit 16 "-" als Trennzeichen auf
    ' Wenn aufsplitten gelingt, dann waren 16 aufeinanderfolgende "-" vorhanden
    If UBound(Split(Cells(Zei, 1), "----------------")) > 0 Then
        Rows(Zei).Delete
    ElseIf InStr(Cells(Zei, 1), Chr(124)) > 0 Then
        Werte = Split(Cells(Zei, 1), Chr(124))
        For W = LBound(Werte) To UBound(Werte)
           If Len(Werte(W)) > 0 Then
              Spa = Spa + 1
              Cells(Zei, Spa).NumberFormat = "@"
              Cells(Zei, Spa) = Trim(Werte(W))
           End If
        Next W
        Spa = 0
    End If
  Next Zei
End Sub


Sollte das Gewünschte erledigen.

Gruss, Jogy


  

Betrifft: AW: Erweiterung eines Makros wg. Einlesen von Daten von: Rudi Maintaire
Geschrieben am: 14.10.2008 09:14:56

Hallo,

If InStr(Cells(Zei, 1), Chr(124)) > 0 And Instr(Cells(Zei, 1), String(15, "-")) = 0 Then



Gruß
Rudi


  

Betrifft: klappt leider noch nicht... von: Eddie
Geschrieben am: 14.10.2008 09:36:58

irgendwie funkt. das nicht ... es wird NICHT die Zeile, die 15 oder mehr '-' Zeichen hat gelöscht ... sie bleibt immer noch drin stehen nach dem aufsplitten

Das Problem kann sein, das die 15 '-' Zeichen ja alle in einer Zelle stehen *grübel*

habe nur

If InStr(Cells(Zei, 1), Chr(124)) > 0 Then

mit deiner Ausgetauscht

gruß Eddie


  

Betrifft: AW: Erweiterung eines Makros wg. Einlesen von Daten von: eres
Geschrieben am: 14.10.2008 09:16:31

Hi Eddie,

ungetester Gedanke:
Erweitere doch If InStr(Cells(Zei, 1), Chr(124)) > 0 Then durch If InStr(Cells(Zei, 1), Chr(124)) > 0 and InStr(Cells(Zei, 1), "-") < 15 Then

Dann dürften die Zeilen mit 15 oder mehr "-" nicht eingelesen werden (?)

Gruß

erwin


Beiträge aus den Excel-Beispielen zum Thema "Erweiterung eines Makros wg. Einlesen von Daten"