Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1960to1964
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
Inhaltsverzeichnis

viele Zellen überprüfen und (if) durch 10 teilen (Makro)

viele Zellen überprüfen und (if) durch 10 teilen (Makro)
25.01.2024 21:23:44
Frank Dreier
Hallo Leute,

ich brauche eigentlich nur ein Makro was die Zellen von D1:G4000 überprüft ob hier Werte über 100 enthalten sind und nur dann sollen diese betroffenen Zellen /10 geteilt werden.

Hier mein "Bester" Ansatz (ich weiß allerdings nicht wie ich hier die If-Anweisung einbauen soll):

For Each Rng In Range("D1:G4000").Cells
Rng.Value = Rng.Value / 10
Next Rng


Mit Range habe ich auch probiert, kriege die Abfrage aber nur für eine Zelle hin:
If Range("D500") > 100 Then
Cells(500, 4).Value = Cells(500, 4).Value / 10
End If


Mit einer reifen If-Abfrage-Schleife von wirklich jeder einzelnen Zelle wäre das natürlich möglich, aber ich glaube das ist viel zu langsam, oder? (das wären in dem Beispiel hier ja schon 16000 Schleifen von D1 bis G4000) Ich teste gerne die Ideen von Euch und lasse Euch dann die Ergebnisse hier wissen was am schnellsten ist.

Oder muss man hier altbacken mit Formeln in Excel direkt arbeiten (z.B. in Spalte H: wenn(D1>100;D1/10;D1) und runterkopieren? Das wollte ich eigentlich vermeiden. Hat jemand eine gute Makro-Idee zur Überprüfung von vielen Zellen?

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: viele Zellen überprüfen und (if) durch 10 teilen (Makro)
25.01.2024 21:53:11
Uduuh
Hallo,
For Each Rng In Range("D1:G4000").Cells

If Rng >100 Then Rng = Rng / 10
Next Rng

Gruß aus'm Pott
Udo
AW: viele Zellen überprüfen und (if) durch 10 teilen (Makro)
25.01.2024 22:00:13
Uduuh
Hallo,
falls im Bereich nur Konstante Werte stehen:
Sub durch10()

Dim a, i As Long, j As Long
a = Range("A1:D4000")
For i = 1 To 4000
For j = 1 To 4
If IsNumeric(a(i, j)) Then
If a(i, j) > 100 Then a(i, j) = a(i, j) / 10
End If
Next j
Next i
Range("A1:D4000") = a
End Sub

Gruß aus'm Pott
Udo
Anzeige
Danke Udo! Hier die Zeitergebnisse, Überraschung!
26.01.2024 03:09:18
Frank Dreier
Hallo Udo,

Grüße zurück in den Pott :) -

Die erste Variante (da musste noch Value eingefügt werden, wunderte mich warum es nicht ging):

For Each Rng In Range("D1:G45000").Cells
If Rng >100 Then Rng.Value = Rng.Value / 10
Next Rng

Ergebnis: 0.68 (mit 3% >100 Werten) bzw. 0.44 Sekunden

Deine Version mit Abfrage jeder einzelnen Zelle:

Sub durch10()
Dim a, i As Long, j As Long
a = Range("D1:G45000")
For i = 1 To 45000
For j = 1 To 4
If IsNumeric(a(i, j)) Then
If a(i, j) > 100 Then a(i, j) = a(i, j) / 10
End If
Next j
Next i
Range("D1:G45000") = a
End Sub


Ergebnis: 0.34 (mit 3% >100 Werten) bzw. 0.34 Sekunden

Fazit: Die Abfrage jeder einzelnen Zelle in einer Schleife mit Range ist tatsächlich am schnellsten. Das hätte ich nie gedacht. Vielen Dank für Deine Hilfe!
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige