Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.04.2024 18:57:33
17.04.2024 16:56:58
Anzeige
Archiv - Navigation
1776to1780
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

VBA Zahl 3 in Array 0,0,1,0 umwandeln

VBA Zahl 3 in Array 0,0,1,0 umwandeln
28.08.2020 15:00:30
Johann
Hallo zusammen,
es ist Ewigkeiten her, dass ich hier Fragen gestellt habe. Aber dieses Forum ist und bleibt in guter Erinnerung.
Ich habe ein neues Projekt gestartet, womit ich überwiegend all die Tätigkeiten im Excelblatt über die Array Funktion in VBA ausführen möchte.
Momentan happert es am folgenden Vorgehen:
Im Bereich A2:D4 stehen Zahlen, die ich in eine Art Binärcode umwandeln möchte.
Dabei soll die eigentliche Zahl an derselbigen Position eine 0,99 darstellen und alle anderen 0,01.
Dabei steht die kleinste und die größte Zahl für die Range (also 1 und 9 in dem Beispiel.. daher die komplette Aufstellung von 1,2,3,4,5,6,7,8,9).
(Die tatsächliche Range ist bei weitem höher und liegt bei 10.000 Zeilen und Spalten mit Zahlen gefüllt, aber das mache ich mir dann)
So würde es am Beispiel aussehen, wenn ich es blos mit Formeln erledigen würde:
Userbild
Der Bereich F2:N4 müsste in einem Array auftauchen, damit ich mit dem weiter rechnen kann.
Zum Testen würde es auch reichen, wenn die Werte in einem neuen Tabellblatt eingefügt werden.
Wer hat Ideen oder Ansätze? Würde mich über Eure Hilfestellung gerne freuen.
VG

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Zahl 3 in Array 0,0,1,0 umwandeln
28.08.2020 15:19:47
Daniel
Hi
probiers mal mit dieser Formel in F2:
=Wenn(IstZahl(Vergleich(F$1;$A2:$D2;0));0,99;0,01)
das machts vielleicht einfacher, die Formel an größere Tabellen anzupassen und macht die VBA-Programmierung obsolet.
Gruß Daniel
AW: VBA Zahl 3 in Array 0,0,1,0 umwandeln
28.08.2020 16:36:15
Johann
Danke Daniel
Ich habe jedoch eine große Datenmenge zu verarbeiten, daher benötige ich das in VBA, damit das ganze im Arbeitsspeicher berechnet wird. Sonst dauert zeitlich zu lange.
AW: VBA Zahl 3 in Array 0,0,1,0 umwandeln
28.08.2020 16:55:46
EtoPHG
Hallo Johann,
Wie kann man bei einer solch trivialen Aufgabenstellung auf VBA beharren?
Deine Angaben sind voller Widersprüche.
0,1,0 mag ja noch ein Binärcode sein, WAHR und FALSCH wären das auch. Aber was 0.99 bzw. 0.01 für einen Zweck erfüllen sollen, bleibt ein Rätsel.
Array ist keine Funktion sondern ein Art der Datenspeicherung.
Vielleicht hast du mal aufgeschnappt, dass das Verarbeiten von Array in VBA schneller ist als gewisse XL-Formeln. Das trifft aber v.a. komplizierte Formeln, die ebenfalls ganze Bereiche berücksichtigen und nicht triviale Formeln wie hier. Auch bei 10Tsnden von Datenzeilen wäre für eine Hilfsspalte mit =MAX(Quellbereich) die Basis für den Zielbereich, in dem dann nur noch eine einfache = Operation einen Wahrheitswert (1) oder (0) liefern würde.
Ich verspreche Dir: Mit VBA wirst du 1000x langsamer sein!
Gruess Hansueli
Anzeige
AW: VBA Zahl 3 in Array 0,0,1,0 umwandeln
28.08.2020 17:21:29
Daniel
mit solchen Pauschalaussagen wäre ich vorsichtig.
das kommt immer darauf an, wie gut man das programmiert und manchmal hängt es auch von der Excelversion und der Datenmenge ab.
Das muss man einfach ausprobieren.
ich habe das Beispiel mal für beide Lösungen mit 10.000 und 100.000 Zeilen durchprobiert.
bei 10.000 Zeilen sind beide Varianten ähnlich schnell (0,18 sec Array zu 0,34 sec Formel).
bei 100.000 Zeilen braucht die Array-Lösung wie erwartet 10x länger (c.a. 1,8 sec), während die Formellösung plötzlich auf 12 sec hoch geht.
hier scheint Excel noch ein Organisationsproblem zu haben, wenn bestimmte Datenmengen überschritten werden.
All das gilt es zu berücksichtigen.
Gruß Daniel
Anzeige
AW: VBA Zahl 3 in Array 0,0,1,0 umwandeln
28.08.2020 17:08:56
Daniel
HI
naja, statt Formel dann über die Arrays schleifen und die Werte vergleichen:
das ist der Code für eine reine VBA-Lösung mit Rückschreiben der Werte
dim arr1, arr2, arr3
dim z as Long
dim s as Long
dim s1 as Long
arr1 = Range("A2:D4").value
arr2 = Range("F1:N1").value
redim arr3(1 to ubound(arr1, 1), 1 to ubound(arr2, 2))
for z = 1 to ubound(arr1, 1)
for s = 1 to ubound(arr2, 2)
for s1 = 1 to ubound(arr1, 2)
arr3(z, s) = 0.01
if arr1(z, s1) = arr2(1, s) then
arr3(z, s) = 0.99
Exit for
end if
next s1
next s
next z
range("F2").Resize(ubound(arr3, 1), ubound(arr3, 2)) = arr3
das wäre die Formellösung per VBA
with Range("F2:N4")
.FormulaR1C1 = "=IF(ISNUMBER(MATCH(R1C,RC1:RC4,0)),0.99,0.01)"
.Formula = .Value
end with

kannst ja mal beides an deine Datenmenge anpassen und die Laufzeit vergleichen.
wenn Variante 1 nicht deutlich schneller ist, würde ich Variante 2 bevorzugen.
Gruß Daniel
Anzeige
AW: VBA Zahl 3 in Array 0,0,1,0 umwandeln
28.08.2020 17:31:07
onur
Hier noch eine Lösung. Da du eine pseudo-binäre Lösung brauchst, habe ich einfach ein Boolean-Array genommen.
https://www.herber.de/bbs/user/139894.xlsm

352 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige