ich habe ein Problem, wenn in einer Zelle (Spalte I ab Zelle3) der Wert größer ist als 4 stellen,
soll dieser Wert ausgeschnieden und 2 spalten nach rechts verschoben werden,
geht das ?
Die Gesamtlänge ist 10.000 Zellen.
gruß kurt k
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.AddressLocal > "$I$3" Then
If IsNumeric(Target.Value) Then
If Len(Target.Value) - InStr(Target.Value, ",") > 4 Then
Selection.Cut
ActiveCell.Offset(0, 2).Activate
ActiveSheet.Paste
End If
End If
End If
End Sub
Sub Offset()
Dim r1 As Range
Set r1 = Range("A1:AA1000")
For Each c In r1
Dim Adr() As String
Adr = Split(c.AddressLocal, "$")
If Adr(1) >= "I" And Adr(2) > 3 Then
If IsNumeric(c.Value) Then
If Len(c.Value) - InStr(c.Value, ",") > 4 Then
Selection.Cut
ActiveCell.Offset(0, 2).Activate
ActiveSheet.Paste
End If
End If
End If
Next
End Sub
G | H | I | J | K | |
2 | alle | alle / kurz | lang | ||
3 | 1234567 | 1234567 | |||
4 | 123456 | 123456 | |||
5 | -234567 | -234567 | |||
6 | -23456 | -23456 | |||
7 | 12345 | 12345 | |||
8 | 0 | 0 | |||
9 | 123,567 | 123,567 | |||
10 | 123,56 | 123,56 | |||
11 | -234,6 | -234,6 | |||
12 | -234,67 | -234,67 | |||
13 | -12,3000% | -0,123 | |||
14 | -12,3400% | -0,1234 | |||
15 | abcdefg | abcdefg | |||
16 | abcdef | abcdef |
Private Sub cbStart_Click()
Dim lngZ As Long, arQ, arZ(), zz As Long
lngZ = Cells(Rows.Count, 9).End(xlUp).Row - 2 ' Anz. Zeilen ab Zeile 3
arQ = Cells(3, 9).Resize(lngZ) ' Quellspalte in Array (Sp. I=9)
ReDim arZ(1 To lngZ, 1 To 1) ' Zieldaten anlegen
For zz = 1 To lngZ
If Len(arQ(zz, 1)) > 6 Then ' wenn Länge > 6 ?
arZ(zz, 1) = arQ(zz, 1) ' Übertrag in Zieldaten
arQ(zz, 1) = Empty ' Löschen in Quelldaten
End If
Next zz
Cells(3, 9).Resize(lngZ, 1) = arQ ' Ausgabe in Quellspalte (I=9)
Cells(3, 11).Resize(lngZ, 1) = arZ ' Ausgabe in Zielspalte (K=11)
End Sub
Und hier eine BeiSpielMappe: https://www.herber.de/bbs/user/80459.xls
Um in Excel Werte in einer bestimmten Spalte zu verschieben, wenn sie eine bestimmte Länge überschreiten, kannst du das folgende VBA-Makro verwenden. Hier sind die Schritte:
Makro-Editor öffnen: Drücke ALT
+ F11
, um den VBA-Editor zu öffnen.
Neues Modul erstellen: Klicke im Menü auf Einfügen
und wähle Modul
.
Code einfügen: Kopiere und füge den folgenden Code in das Modul ein:
Sub Offset()
Dim r1 As Range
Set r1 = Range("I3:I10000") 'Bereich anpassen, falls notwendig
For Each c In r1
If Len(c.Value) > 6 Then 'Wert ist länger als 6 Stellen
c.Offset(0, 2).Value = c.Value 'Wert nach 2 Spalten nach rechts verschieben
c.Value = "" 'Zelle leeren
End If
Next
End Sub
Makro ausführen: Schließe den VBA-Editor und gehe zurück zu Excel. Drücke ALT
+ F8
, wähle Offset
aus und klicke auf Ausführen
.
Wenn du keine VBA-Lösungen verwenden möchtest, kannst du auch die Funktionen @IF
und LEER()
in Kombination mit Filter- und Sortierfunktionen nutzen, um die gewünschten Werte manuell zu verschieben.
=WENN(LÄNGE(I3)>6;I3;"")
in der Hilfsspalte.Hier ist ein Beispiel, wie du das Makro nutzen kannst:
Nach dem Ausführen des Makros sollten nur die Werte 1234567
und 12345678
in Spalte K verschoben werden, während Spalte I leer bleibt.
Workbook_Open
oder Worksheet_Change
Ereignis ein.1. Wie kann ich das Makro starten?
Du kannst das Makro über ALT
+ F8
starten und es auswählen.
2. Was passiert mit leeren Zellen?
Leere Zellen bleiben unverändert, da das Makro nur auf Zellen mit mehr als 6 Zeichen reagiert.
3. Kann ich das Makro für andere Spalten verwenden?
Ja, passe einfach die Bereiche im Code an, um die gewünschten Spalten zu bearbeiten.
4. Wie kann ich sicherstellen, dass Werte nicht gelöscht werden?
Überprüfe den Code, um sicherzustellen, dass du die Zellen nur nach rechts verschiebst und die Originalwerte nicht löschst, es sei denn, du möchtest das so.
Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden
Suche nach den besten AntwortenEntdecke unsere meistgeklickten Beiträge in der Google Suche
Top 100 Threads jetzt ansehen