Registriert seit: 05.01.2015
Version(en): 2013
21.02.2015, 10:55
(Dieser Beitrag wurde zuletzt bearbeitet: 21.02.2015, 11:21 von JustAStudent.)
Guten Morgen Liebe Excel Freunde,
Ich habe 2160 Zeilen und 4096 Spalten (die 4096. Spalte ist die Spalte "FAN").
In jedem Feld steht ein ganzzahliger Wert und die Werte gehen von 0 - 65355.
Nun möchte ich alle Zahlen in den Feldern durch 64 teilen, ohne Rest. Da es insgesamt ca 8,8 Millionen Felder sind, wäre eine Ressourcensparende Methode wünschenswert.
ich bedanke mich im Voraus und freue mich auf Hilfe,
Gruß,
JustAStudent
Registriert seit: 13.04.2014
Version(en): 365
Hallo,
1. sollen die Zahlen an Ort und Stelle dividiert werden???
2. "ohne Rest", sollen alle Ergebnisse ganzzahlig sein???
Gruß
Edgar
Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Registriert seit: 05.01.2015
Version(en): 2013
Danke für deine schnelle Antwort.
1. Ja die zahlen sollen optimalerweise an Ort und Stelle dividiert werden.
2. Alle Ergebnisse sollen ganzzahlig sein
Registriert seit: 12.04.2014
21.02.2015, 13:56
(Dieser Beitrag wurde zuletzt bearbeitet: 21.02.2015, 13:56 von aloys78.)
Hallo,
anbei ein Makrovorschlag:
- liest Tabelle1 nach Array (ca 3 Sek)
- teilt alle Zahlen durch 64 (< 1 Sek)
- speichert Ergebnis nach Tabelle1 zurück (ca 27 Sek)
Gruß
Aloys
Code:
Sub Test3() 'Daten aus Tab1 nach Array, Division durchführen und Ergebnis aus Array nach Tab1 zurück
Dim r As Long, c As Long
Dim arr()
Dim szeit As Single
szeit = Timer
arr = Range(Cells(1, 1), Cells(2160, 4096))
MsgBox "Phase 1 (Laden Array aus Tab 1) " & Timer - szeit
szeit = Timer
For c = 1 To 4096
For r = 1 To 2160
arr(r, c) = CLng((arr(r, c) / 64))
Next r
Next c
MsgBox "Phase 2 (dividieren) " & Timer - szeit
szeit = Timer
Application.ScreenUpdating = False
Range(Cells(1, 1), Cells(2160, 4096)) = arr
Application.ScreenUpdating = True
MsgBox "Phase 3 (Speichern Array in Tab 2 " & Timer - szeit
End Sub
Registriert seit: 01.11.2014
Version(en): 2007, 2010
Hi,
hier ein zweiter Ansatz (Laufzeit 20 Sekunden)
Code:
Sub TabelleInArrayDividierenUndZurück()
Dim Quelle As Variant
Dim Zeile As Long
Dim Spalte As Long
Debug.Print Now
Quelle = Tabelle1.Range("A1:FAN2160")
For Spalte = 1 To 4096
For Zeile = 1 To 2160
Quelle(Zeile, Spalte) = Int(Quelle(Zeile, Spalte) / 64)
Next Zeile
Next Spalte
Tabelle1.Range("A1:FAN2160") = Quelle
Debug.Print Now
End Sub
Gruß
Max
Registriert seit: 05.01.2015
Version(en): 2013
Erst mal vielen Dank :17: ich erhalte unterschiedliche Werte bei den beiden Funktionen. Und Ich das Gefühl, dass die Werte gerundet werden. Das soll nicht passieren. So sollte ich z.B. für die Zahlen 0 - 63 die Zahl 0 erhalten, für 64 - 127 die Zahl 1 usw.
Gruß,
JustAStudent
Registriert seit: 01.11.2014
Version(en): 2007, 2010
21.02.2015, 16:58
(Dieser Beitrag wurde zuletzt bearbeitet: 21.02.2015, 17:03 von Max.)
Hi,
Du schreibst oben ganzzahliges Ergebnis.
INT ist das VBA-Pendant zur Funktion GANZZAHL.
EDIT:
Rest der ursprünglichen Antwort gelöscht.
Also willst Du grundsätzlich abrunden?
Gruß
Max
Registriert seit: 05.01.2015
Version(en): 2013
Ja ich will abrunden, das hatte ich eigentlich mit Ohne Rest gemeint :19: Sorry für das Missverständnis
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo,
Int() und Fix() runden ab!
Gruß Uwe
Registriert seit: 05.01.2015
Version(en): 2013
Was genau muss ich abändern? Bin leider ein ziemlicher Noob in sowas.