Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Verschachtelte Wenn-Formel als Array
#1
Hallo liebe Freunde

Ich wäre euch sehr dankbar, wenn ihr mir weiterhelfen könntet.

In meiner Mappe erfasse ich für die Arbeit (Gipser-/Malergeschäft) verschiedene Masse, welche ich dann diversen Positionen (welche sich in den Spalten befinden) zuteilen muss.
Hierfür habe ich 2 sheets, einmal die Erfassung, einfmal die Auswertung.

Je nachdem ob ich in der jeweiligen Zeile/Spalte ein "x" gemacht habe, soll er mir den Wert auf Basis der Einheit in die gleiche x-Zelladresse des Sheets "Erfassung" schreiben.
Diese "Einheit" kann m2, St, gl, H_A oder andere sein, weshalb die Formel recht lange ist. --> Es ist schwer zu erklären, deshalb die Mappe im Anhang.

Mein Wunsch ist nun folgender:
Die Formeln, welche ich im 2. Sheet in den gesamten Zeilen/Spalten-Bereich einfüge, tun ihren Dienst... Aber bei angenommen 100 Zeilen und 50 Spalten habe ich 5000 x eine komplizierte, elendlange Formel drinnen was sich auf die Performance niederschlägt und auch in der Dateigrösse...

Kann mir jemand helfen, die Berechnung als VBA-Array zu lösen und lediglich das Ergebnis/Wert in die jeweilige Zelle zu schreiben?

Leider sind Arrays nach wie vor eine nebelbedeckte Landkarte für mich...

Vielen lieben Dank im voraus!

Christian


Angehängte Dateien
.xlsx   Mappe1.xlsx (Größe: 24,17 KB / Downloads: 14)
Antwortento top
#2
Hi,

warum so kompliziert?

Mein Vorschlag:


.xlsx   Aufmaß.xlsx (Größe: 22,53 KB / Downloads: 8)
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antwortento top
#3
Hallo Edgar

Danke für dein Bemühen und das du dich meiner annimmst... Smile

Ja, dein Vorschlag ist etwas besser als mein ursprünglicher, da du die Formel auf die Leistungseinheit anpasst. Meine ist ja ne lange "Universalformel".
Mittels VBA und der Leistungseinheit als Select-Case-Bedingung könnte ich das schon so machen...

Trotzdem - und stört mich an unseren beiden Varianten - sind es immer noch (mitunter) tausende, unnötige Formeln, welche die Mappe mit sich rumschleppen muss... Sad

Ganz ehrlich - Formeln sind cool! Aber so ein VBA-Array bei vielen Daten.... das ist der Olymp der Programmierung und einfach nur GEIL !!! Smile) Muss jetzt endlich Arrays verstehen lernen...

Trotzdem Danke, Edgar!

Gruss Christian
Antwortento top
#4
Hi,

VBA ist gegenüber der Variante mit einfachen Formeln nicht unbedingt schneller. Zudem brauchst Du die Formeln nicht extra anstoßen, wie Du das bei VBA machen musst. ARRAY-Formeln sind auch in VBA nicht unbedingt der Performance zuträglich.
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antwortento top
#5
Hi Christian,

mal so zur Anregung:
schreib doch mal als Vorbereitung in das Blatt "Auswertung" ein paar Formeln rein. Das sind die Formeln für die einzelnen Positionen. Aber ohne Anführungszeichen, bitte.

K4: "=H4"
L4: "=F4*H4"
M4: "=F4*G4*H4"
N4: "=H4"
O4: "=H4"
P4: "=F4*H4"
Q4: "=F4*H4"
R4: "=G4*H4"

Hoffe, die Formeln stimmen. Sie stehen nur einmal da und nicht 5000 mal. Ev. noch mit dem Standardfaktor M1 (oder so ähnlich) und Einheitspreisen, falls gewünscht, multipliuzieren.

Dann folgendes Makro laufen lassen:
Code:
Sub Pinsel()
   Dim Zeile As Long, Spalte As Long
   Dim Daten As Variant
   Dim e As Worksheet, a As Worksheet
   Set e = Worksheets("Erfassung")
   Set a = Worksheets("Auswertung")
   Daten = e.Range("K10").Resize(e.Range("C10").End(xlDown).Row - 9, 8)
   For Zeile = LBound(Daten, 1) To UBound(Daten, 1)
      a.Range("F4:H4") = e.Range("F" & Zeile & ":H" & Zeile).Offset(9).Value
      For Spalte = LBound(Daten, 2) To UBound(Daten, 2)
         If Daten(Zeile, Spalte) = "x" Then Daten(Zeile, Spalte) = a.Range("J4").Offset(, Spalte)
      Next Spalte
   Next Zeile
   a.Range("K9").Resize(UBound(Daten, 1), UBound(Daten, 2)) = Daten
End Sub

Das Makro setzt nun die Ergebisse als Zahlen überall hin, wo Du ein x gemacht hast.
Hab mir mal was aus einer Art LV-Abrechnung gebastelt und hier angepasst. Das Makro funktioniert für beliebig lange Listen für diese 8 LV-Positionen. Hoffe, das entspricht Deinen Vorstellungen.

Gruß, Raoul
Antwortento top
#6
Hallo Christian,

Du wolltest eine VBA-Lösung. Ich habe sie geliefert und denke, genau nach Deinen Wünschen.

Funktioniert sie nicht oder nicht so, wie du es wolltest? Habe ich was übersehen? Du kannst gerne was dazu sagen. Deine Bemühungen auf der Suche nach einer Lösung sollen ja nicht umsonst gewesen sein.

Raoul
Antwortento top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste