Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Nicht zusammenhängender Spaltenbereich bearbeiten | Herbers Excel-Forum


Betrifft: Nicht zusammenhängender Spaltenbereich bearbeiten von: Peter
Geschrieben am: 09.08.2012 16:53:03

Guten Abend

Ich habe einen nicht zusammenhängenden Spaltenbereich. Nun möchte ich jede Zelle zwei Zellen rechts von diesem Bereich mit dem Zellinhalt zwei Zellen links davon abfüllen.

Mit nachfolgendem Code funktioniert das, allerdings etwas langsam.

Lässt sich das beschleunigen?

Gruss, Peter

Sub Test()
Dim rngZelle As Range
For Each rngZelle In Range("SpaltenBereichNichtZusammenhaengend")
  rngZelle.Offset(0, 2) = rngZelle.Offset(0, -2)
  Next rngZelle
End Sub

  

Betrifft: AW: Nicht zusammenhängender Spaltenbereich bearbeiten von: Ramses
Geschrieben am: 09.08.2012 17:27:22

Hallo

Was verstehst du unter "langsam" ?
Ändere mal den Code in

Sub Test()
Dim rngZelle As Range
For Each rngZelle In Range("SpaltenBereichNichtZusammenhaengend")
    rngZelle.Offset(0, 2) = rngZelle
Next rngZelle
End Sub

10000 Zellen werden dabei bei mir (normales laptop) in weniger als 4 Sekunden abgearbeitet.

Gruss Rainer


  

Betrifft: AW: Nicht zusammenhängender Spaltenbereich bearbeiten von: Matze,Matthias
Geschrieben am: 09.08.2012 17:31:28

Hallo Peter,
Das kann nicht gehn, wo ist den der Range defeniert? Welche Zellen sind das ?

Vor der Schleifenabfrage Application..EnableEvents = False
und vor End Sub wieder auf True setzen.
Matze


  

Betrifft: wieso kann das nicht gehen ? von: Matthias L
Geschrieben am: 09.08.2012 17:40:48

Hallo

Das geht doch ohne Probleme, nur wie er schreibt eben langsam.

Einfach Berechnung auf manuell und Bildschirmaktualisierung aus.
Am Ende wieder einschalten. Mit denm Events, hast Du ja schon geschrieben.
Wieso Rainer den Quellbereich ändert, obwohl Peter doch Offset(,-2) nach .Offset(,2) kopieren will
ist mir auch ein Rätsel ;-)

Gruß Matthias


  

Betrifft: AW: wieso kann das nicht gehen ? von: Ramses
Geschrieben am: 09.08.2012 18:11:34

Hallo

"...Wieso Rainer den Quellbereich ändert, obwohl Peter doch Offset(,-2) nach .Offset(,2) kopieren will
ist mir auch ein Rätsel ;-)..."

Vielleicht ist es ein Verständnisproblem meinerseits

""Nun möchte ich jede Zelle zwei Zellen rechts von diesem Bereich mit dem Zellinhalt zwei Zellen links davon abfüllen.""

Ich habe das so verstanden, dass der Inhalt der Zelle in die zweite Zelle rechts davon geschrieben werden soll

Gruss Rainer


  

Betrifft: AW: Nicht zusammenhängender Spaltenbereich bearbeiten von: Ramses
Geschrieben am: 09.08.2012 18:13:44

Hallo

"..Das kann nicht gehn, wo ist den der Range defeniert..."

Hier ist der Bereich definiert

In Range("SpaltenBereichNichtZusammenhaengend")

Das ist ein Namen innerhalb der Tabelle. Dort können alle Zellen innerhalb des Namens mit Range angesprochen werden.

Gruss Rainer


  

Betrifft: AW: Nicht zusammenhängender Spaltenbereich bearbeiten von: Matthias L
Geschrieben am: 09.08.2012 18:04:35

Hallo

Das Einzige auf was Du aufpassen solltest, Das Dein Bereich auf jeden Fall mind. in Spalte(3) liegt.
Auf der anderen Seite muß dann der Bereich ebenfalls mind 3 Spalten vor der letzten Spalte liegen
(ist in der Datei noch nicht! berücksichtig.)
Sonst gibt es einen VBA-Fehler.

Beispiel der Bereich wäre in Spalte(2)
.Offset(,-2) wäre nun die Spalte(0) - und das würde den Fehler auslösen

Schau mal in die Datei, obs so schneller geht:
https://www.herber.de/bbs/user/81354.xlsm

Gruß Matthias


  

Betrifft: Korrektur von: Matthias L
Geschrieben am: 09.08.2012 18:16:55

Hallo Peter

Hatte vergessen wieder auf True zu stellen!
Ersetze bitte mal den Code in der Datei:

Option Explicit

Sub Test()
Dim rngZelle As Range
Dim MyCalculation
 
 With Application
  MyCalculation = .Calculation 'merken
 .EnableEvents = False
 .ScreenUpdating = False
 .Calculation = xlCalculationManual
 End With
 
 For Each rngZelle In Range("SpaltenBereichNichtZusammenhaengend")
  If rngZelle.Column > 2 And rngZelle.Column < 16382 Then rngZelle.Offset(0, 2) = rngZelle. _
Offset(0, -2)
 Next rngZelle

 With Application
 .EnableEvents = True
 .ScreenUpdating = True
 .Calculation = MyCalculation
 End With
End Sub

Gruß Matthias


  

Betrifft: überarbeiteter Code mit Fehlerbehandlung ... von: Matthias L
Geschrieben am: 09.08.2012 18:43:18

Hallo

Option Explicit
Sub Test()
Dim rngZelle As Range
Dim MyCalculation
Dim MyBool As Boolean
On Error GoTo ErrExit
With Application
 MyCalculation = .Calculation 'merken
.EnableEvents = False
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
With Range("SpaltenBereichNichtZusammenhaengend")
 If .Column > 2 And .Column < 16383 Then MyBool = True
End With
If MyBool Then
   For Each rngZelle In Range("SpaltenBereichNichtZusammenhaengend")
       rngZelle.Offset(, 2) = rngZelle.Offset(, -2)
   Next rngZelle
End If
ErrExit:
 With Application
 .EnableEvents = True
 .ScreenUpdating = True
 .Calculation = MyCalculation
 If Not MyBool Then MsgBox "Es ist ein Fehler aufgetreten", vbCritical
 End With
End Sub
Gruß Matthias


  

Betrifft: AW: Nicht zusammenhängender Spaltenbereich bearbeiten von: Peter
Geschrieben am: 09.08.2012 21:33:05

Hallo Matthias und alle Helfer
Das ist prima.
Mein Geschwindigkeitsproblem hing wohl damit zusammen, dass die Events nicht ausgeschaltet waren und die Datei hat zudem eine bestimmte Grösse.
Viele Dank.

Gruss, Peter


Beiträge aus den Excel-Beispielen zum Thema "Nicht zusammenhängender Spaltenbereich bearbeiten"