Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Zeilenvergleich VBA Excel 2003 ?
#31
Hallo,

dann lösche eins der Next!
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#32
(07.03.2015, 14:43)BoskoBiati schrieb: Hallo,

dann lösche eins der Next!

habe ich natürlich versucht - jedoch wird alles nur eine Zeile nach unten verschoben - mehr nicht!

Wenn ein Profi schon damit Probleme hat - wie soll ich als Anfänger klarkommen :32:

Angelina
Antworten Top
#33
Hallo,

erstens bin ich kein Profi, zweitens habe ich das nicht getestet, da ich auch noch was anderes zu tun habe. Du kannst doch im VBA-Editor den Code schrittweise durchlaufen lassen und sehen, was er macht!


Code:
Option Explicit

Private Sub CommandButton1_Click()

Dim rng As Range
Dim loZeile As Long
Dim loSpalte As Long
Dim loZeile2 As Long
Dim loZiel As Long
Dim loCo As Long
Dim loLetzte As Long
Dim loEnd As Long
Dim arrFeld
For loCo = 65535 To 1 Step -1
If Application.WorksheetFunction.Count(Range("DW" & loCo & ":FS" & loCo)) > 0 Then
  loLetzte = loCo
  Exit For
End If
Next
loZiel = loLetzte + 2
Application.ScreenUpdating = False
Set rng = Range("DW1")
For loZeile = 0 To loLetzte - 1
    For loSpalte = 0 To 48
        If rng.Offset(loZeile, loSpalte) <> "" Then
            If Application.WorksheetFunction.CountIf(Range(rng.Offset(loZeile + 1, 0), rng.Offset(loZeile + 1, 48)), rng.Offset(loZeile, loSpalte)) > 0 Then rng.Offset(loZiel, loSpalte) = rng.Offset(loZeile, loSpalte)
        End If
    Next
    loZiel = loZiel + 1

Next
For loCo = 100 To 1 Step -1
If Application.WorksheetFunction.Count(Range("DW" & loCo & ":FS" & loCo)) > 0 Then
  loEnd = loCo
  Exit For
End If
Next
loCo = loEnd - loLetzte - 2
arrFeld = Range("DW" & loLetzte + 3 & ":FS" & loEnd)
Range("DW" & loLetzte & ":FS" & loEnd).ClearContents
Range("DW1:FS" & loCo) = arrFeld

Application.ScreenUpdating = True
 
End Sub
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
[-] Folgende(r) 1 Nutzer sagt Danke an BoskoBiati für diesen Beitrag:
  • Angelina
Antworten Top
#34
Hi Angelina,

(07.03.2015, 15:15)Angelina schrieb: habe ich natürlich versucht - jedoch wird alles nur eine Zeile nach unten verschoben - mehr nicht!

wenn der Code g'scheit eingerückt wird, dann sieht man, daß insgesamt und genau dort ein "Next" zuviel ist, wo zwei direkt untereinander stehen (wo jetzt die Leerzeile ist).
Das hilfreiche Einrücken kann auch ein Anfänger wie Du machen. Immer alles innerhalb For - Next oder If - EndIf nach rechts einrücken. Dann ist auch ganz einfach erkennbar, welches Next zu welchem For gehört, usw.
Mit dem unter der dicken Linie klickbaren Tool (VBA/HTML - CodeConverter für Office-Foren) kann sowohl die Darstellung, als auch die Einrückung automatisch auf Knopfdruck erledigt werden.

Hier der Code von Edgar noch mal (jetzt eingerückt):
Option Explicit

Private Sub CommandButton1_Click()
   
   Dim rng As Range
   Dim loZeile As Long
   Dim loSpalte As Long
   Dim loZeile2 As Long
   Dim loZiel As Long
   Dim loCo As Long
   Dim loLetzte As Long
   Dim loEnd As Long
   Dim arrFeld
   
   For loCo = 65535 To 1 Step -1
      If Application.WorksheetFunction.Count(Range("DW" & loCo & ":FS" & loCo)) > 0 Then
         loLetzte = loCo
         Exit For
      End If
   Next
   loZiel = loLetzte + 2
   Application.ScreenUpdating = False
   Set rng = Range("DW1")
   For loZeile = 0 To loLetzte - 1
      For loSpalte = 0 To 48
         If rng.Offset(loZeile, loSpalte) <> "" Then
            If Application.WorksheetFunction.CountIf(Range(rng.Offset(loZeile + 1, 0), rng.Offset(loZeile + 1, 48)), rng.Offset(loZeile, loSpalte)) > 0 Then rng.Offset(loZiel, loSpalte) = rng.Offset(loZeile, loSpalte)
         End If
      Next
      loZiel = loZiel + 1
      
   Next
   For loCo = 100 To 1 Step -1
      If Application.WorksheetFunction.Count(Range("DW" & loCo & ":FS" & loCo)) > 0 Then
         loEnd = loCo
         Exit For
      End If
   Next
   loCo = loEnd - loLetzte - 2
   arrFeld = Range("DW" & loLetzte + 3 & ":FS" & loEnd)
   Range("DW" & loLetzte & ":FS" & loEnd).ClearContents
   Range("DW1:FS" & loCo) = arrFeld
   
   Application.ScreenUpdating = True
   
End Sub


VBA/HTML - CodeConverter für Office-Foren, AddIn für Excel/Word 2000-2013 - komplett in VBA geschrieben von Lukas Mosimann. Projektbetreuung durch mumpel

Code erstellt und getestet in Office 14

[-] Folgende(r) 1 Nutzer sagt Danke an Rabe für diesen Beitrag:
  • Angelina
Antworten Top
#35
Hallo Zusammen,

ich habe es mir angewöhnt, Next mit der zugehörigen Variable anzugeben. So sind eventuelle Fehler leichter erkennbar.
Das richtige Einrücken ist natürlich Grundvoraussetzung für einen gut lesbaren/nachvollziehbaren Code.

Zitat: For loZeile = 0 To loLetzte - 1
     For loSpalte = 0 To 48
     
     Next loSpalte
 Next loZeile

Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • Angelina
Antworten Top
#36
@ BoskoBiati,
vielen lieben Dank nochmals für deine große Hilfe - bitte entschuldige nochmals mein teilweise vorhandenes Verständnis für VBA.
Ich bin sehr dankbar

@ Rabe,
danke auch dir für den Hinweis, das Tool ist wirklich hilfreich - danke dafür

@ Kuwer
danke für die Info "Next mit der zugehörigen Variable" das ist eine gute Idee


Nochmals danke an euch :98:

sehr gutes Forum :18: 

LG
Angelina
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste