Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
368to372
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
368to372
368to372
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Zellen einfügen

Zellen einfügen
28.01.2004 09:03:30
Mich@
Hallo Excel-Profis,
Bei dem Makro, das ich gerade schreibe, tritt folgendes Problem auf:
In Spalten A-E werden Werte eingefügt. In Spalte F ist die Referenz.
Wenn der Wert in der Spalte C mehr als 1 von dem in Spalte F abweicht, sollen Spalten A-E
- gelöscht werden, wenn der Wert kleiner ist (Dieser Teil des Makros funktioniert, daher ' vorangestellt)
- !!! um 1 Zeile nach unten verschoben werden, wenn der Wert größer ist !!!
Ein anschließendes Einfügen von i = i - 1 oder i = i + 1 brachte auch keine Lösung (daher jetzt auch mit ' )


Sub Zwischenablagencheck()
Dim i%, r
Dim xlRange As Excel.Range
For i = 1 To 46
r = ActiveSheet.Cells(i, 7).Value
'If ActiveSheet.Cells(i, 3).Value < (r - 1) Then
'Set xlRange = ActiveSheet.Range _
(ActiveSheet.Cells(i, 1), ActiveSheet.Cells(i, 6))
'xlRange.Select
'Selection.Delete Shift:=xlUp
'End If
If ActiveSheet.Cells(i, 3).Value > (r + 1) Then
Set xlRange = ActiveSheet.Range _
(ActiveSheet.Cells(i, 1), ActiveSheet.Cells(i, 6))
xlRange.Select
Selection.Insert Shift:=xlDown
'i = i + 1
End If
Next i
End Sub

Für schnelle Hilfe (und auch langsame) wäre ich sehr dankbar!
Gruß, Mich@

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zellen einfügen
28.01.2004 09:48:16
Roland Hochhäuser
Hallo Mich@,
versuch das mal:
Option Explicit

Sub Zwischenablagencheck()
Dim i As Byte
For i = 1 To 46
If Cells(i, 3).Value < Cells(i, 7).Value - 1 Then Range(Cells(i, 1), Cells(i, 6)).Delete Shift:=xlUp
If Cells(i, 3).Value > Cells(i, 7).Value + 1 Then Range(Cells(i, 1), Cells(i, 6)).Cells.Insert Shift:=xlDown
Next
End Sub

Gruß
Roland
AW: Zellen einfügen
28.01.2004 13:02:20
Mich@
Hallo Roland,
wenn ich das Makro ausführe, sind die Spalten 1-6 vollständig um 46 Zeilen nach unten gerückt (also bis die "Referenzspalte" keine Werte mehr enthält).
Das ist auch der Fehler, der bei meinem kritischen, zweiten Makroteil auftritt.
Muss i vielleicht nach vorgenommener Korrektur um 1 zurückgesetzt werden?!? Und wenn ja, wie (i = i - 1 produziert auch diesen Fehler [s. 1. Beitrag])?!?
Trotzdem schonmal besten Dank für die Mühe,
Mich@
Anzeige
AW: Zellen einfügen
28.01.2004 14:34:29
Roland Hochhäuser
Hallo Mich@,
bringt das das gewünschte Ergebnis?

Sub Zwischenablagencheck()
Dim i As Integer, k As Integer
k = 0
For i = 1 To 46
If Not IsEmpty(Cells(i + k, 7).Value) Then
If Cells(i + k, 3).Value < Cells(i + k, 7).Value - 1 Then Range(Cells(i + k, 1), Cells(i + k, 6)).Delete Shift:=xlUp
If Cells(i + k, 3).Value > Cells(i + k, 7).Value + 1 Then
Range(Cells(i + k, 1), Cells(i + k, 6)).Cells.Insert Shift:=xlDown
k = k + 1
End If
End If
Next
End Sub

Gruß
Roland
AW: Zellen einfügen
28.01.2004 14:42:20
Mich@
Hallo nochmal,
Leider tut's noch nicht so recht, denn jetzt fügt er vor jeder Zeile eine Leerzeile ein (passiert auch bei meinem Makro, wenn ich "i = i + 1" eingebe).
Das muss doch lösbar sein, oder?!?
Gruß,
Mich@
Anzeige
AW: Zellen einfügen
28.01.2004 14:57:55
Roland Hochhäuser
. . . denn jetzt fügt er vor jeder Zeile eine Leerzeile ein
Das kann ich nicht nachvollziehen
Gruß Roland
AW: Zellen einfügen
28.01.2004 15:45:22
Mich@
Also, er fügt in den Spalten 1-6 (nicht in der Referenzspalte!) Leerzellen ein - allerdings für alle Werte.
Sobald die Referenzspalte (ab Zeile 46) dann leer ist, sind die Spalten 1-6 ohne Leerzellen dazwischen. Schematisch:
|__|__|__|__|__|__|R1|
|A1|B1|C1|D1|E1|F1|R2|
|__|__|__|__|__|__|R3|
|A2|B2|C2|D2|E2|F2|R4|
|__|__|__|__|__|__|R5|
|A3|B3|C3|D3|E3|F3|__|
|A4|B4|C4|D4|E4|F4|__|
|A5|B5|C5|D5|E5|F5|__|
Gibt's vielleicht 'ne Lösung in der Richtung, dass die Referenzdaten auf ein andere Worksheet geschrieben wird, sodass man was mit EntireRow.Insert arbeiten kann?
Oder stimmt was mit dem Zellenformat nicht (obwohl das vorher standardisiert wird)?
'ne Idee?
MfG, Mich@
Anzeige
AW: Zellen einfügen
28.01.2004 16:06:12
Roland Hochhäuser
Hallo Mich@,
ich befürchte, wir haben bisher aneinander vorbei geredet. Ich habe den Job bisher so verstanden:
- wenn der Wert aus Spalte 3 um mehr als 1 kleiner ist als der Wert aus der gleichen Zeile in Spalte 7, dann lösche die Zeile bis einschließlich Spalte 6, lasse aber ab Spalte 7 alles stehen
- wenn der Wert aus Spalte 3 um mehr als 1 größer ist als der Wert aus der gleichen Zeile in Spalte 7, dann verschiebe die komplette Zeile bis einschließlich Spalte 6 um eins nach unten, lasse aber ab Spalte 7 alles stehen
- wenn keine oder Abweichung =< 1, dann mache nichts
Dies erledigt das Makro.
Wie ist der Job??
Gruß
Roland
Anzeige
AW: Zellen einfügen
28.01.2004 16:26:23
Mich@
Hallo Roland,
also, Spalte 7 steht als Referenz:
|__|__|__|__|__|__|R1|
|__|__|__|__|__|__|R2|
|__|__|__|__|__|__|R3|
|__|__|__|__|__|__|R4|
|__|__|__|__|__|__|R5|

Dann füge ich die Daten ein, es können (müssen) aber ein oder mehrere Werte fehlen oder zuviel sein:
|A1|B1|C1|D1|E1|F1|R1|
|A2|B2|C2|D2|E2|F2|R2|
|A3|B3|C3|D3|E3|F3|R3|
|A4|B4|C4|D4|E4|F4|R4|
|AX|BX|CX|DX|EX|FX|R5|
|A5|B5|C5|D5|E5|F5|__|
In diesem Fall müsste AX-FX gelöscht werden und A5-F5 (und nachfolgende Zeilen) nach oben.

|A1|B1|C1|D1|E1|F1|R1|
|A2|B2|C2|D2|E2|F2|R2|
|A4|B4|C4|D4|E4|F4|R3|
|A5|B5|C5|D5|E5|F5|R4|
|__|__|__|__|__|__|R5|
In diesem Fall müsste A4-F4 nach unten verschoben werden bzw. leere Zellen oberhalb eingefügt werden.

Ist's vielleicht schlauer, die Referenzspalte "auszulagern" (andere Workbook/Worksheet)?
MfG, Mich@
Anzeige
AW: Zellen einfügen
28.01.2004 17:04:13
Roland Hochhäuser
Hallo Mich@,
ich steig beim besten Willen nicht durch, was du willst, lade doch einfach mal ein Sheet hoch, in dem einmal die unsortierten Daten stehn und in einem anderen Blatt das von dir gewünschte Ergebnis. Ich schau es mir dann an.
Gruß
Roland
AHA!!
28.01.2004 18:50:48
Roland Hochhäuser
so konnte das nicht funktionieren; mach mal Spasseshalber

Sub MalSchaunWasDaWirklichDrinIst()
Dim i As Integer
For i = 1 To 46
MsgBox Cells(i, 3).Value
MsgBox Cells(i, 7).Value
Next
End Sub

Siehst du was? *fg*
Roland
Anzeige
AW: AHA!!
28.01.2004 19:00:00
Mich@
Hallo nochmal,
ja, er gibt mir die Werte korrekt aus. Das heißt?!?... Stehe wohl auf dem Schlauch...
Gruß, Mich@
AW: AHA!!
28.01.2004 19:31:17
Roland Hochhäuser
sorry natürlich so:
MsgBox Cells(i, 3).Value => dort erhalte ich 91.84
MsgBox Cells(i, 7).Value => auch dort erhalte ich 91.84
MsgBox Cells(i, 7).Value - 1 => hier aber erhalte ich 9183
MsgBox Cells(i, 7).Value + 1 => und hier erhalte ich 9185
wie sieht es bei dir aus?
Gruß Roland
AW: AHA!!
28.01.2004 19:53:14
Mich@
WOW!
Die selbe Chose bei mir - Also liegt's am Zahlenformat?!? Ich formatiere vorher den Bereich extra mit NumberFormat "0.00", um 2 Dezimalstellen zu bekommen...
Anzeige
AW: AHA!!
28.01.2004 21:36:28
Roland Hochhäuser

Sub ZweiterVersuch()
Hallo mich@,
Dim i As Byte
For i = 1 To 46
If Cells(i, 3).Value * 1 < Cells(i, 7).Value - 10 Then Range(Cells(i, 1), Cells(i, 6)).Delete Shift:=xlUp
If Cells(i, 3).Value * 1 > Cells(i, 7).Value + 10 Then Range(Cells(i, 1), Cells(i, 6)).Cells.Insert Shift:=xlDown
Next
End Sub

geht es so bei dir?
Roland
AW: AHA!!
29.01.2004 08:20:10
Mich@
Allerbesten Dank!!!
Es läuft wie geplant!!!
Vielen Dank für die Mühe (Hätt' nicht gedacht, dass es so ein Marathon werden würde).
'ne ruhige Woche und dann ein wohlverdientes Wochenende wünscht
Mich@
Anzeige
OT: Dir auch ein schönes Wochenende
29.01.2004 09:55:30
Roland Hochhäuser
. . . und vor der nächsten Anfrage bitte die Zellformatierung checken :-)
Gruß
Roland

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige