Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1552to1556
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

Formeln durch VBA ersetzen

Formeln durch VBA ersetzen
16.04.2017 22:31:33
teller286
Hallo,
ich habe aus dem Forum diverse Formeln, die alle funktionieren. Der Dateiumfang hat sich jetzt aber deutlich erweitert, so dass die Formeln zu sehr langen Rechenvorgängen führen. Insofern suche ich nach einer VBA-Lösung, bei der nur die Ergebnisse in die Zellen eingetragen werden.
Aus dem Forum habe ich auch schon diverse Hinweise erhalten, wie ich Formeln in VBA übertragen kann. Allerdings scheitern meine Versuche, so dass ich jetzt doch wieder hier um eine Hilfe ersuche.
Die Problembeschreibung:
http://s1.bild.me/bilder/110417/2601711x.jpg
Das sind die Formeln die per VBA gelöst werden sollen:
b_verbinden

 C
1T1-T2
2351-324

Formeln der Tabelle
ZelleFormel
C1=INDEX(a_Befüllung!$A:$M;ZEILE(); VERGLEICH($B$6000&"*";INDEX(ADRESSE(1;SPALTE($A$1:$L$1); 4;1); ); ))&"-"&INDEX(a_Befüllung!$A:$M;ZEILE(); VERGLEICH(C$6000&"*";INDEX(ADRESSE(1;SPALTE($A$1:$L$1); 4;1); ); ))
C2=INDEX(a_Befüllung!$A:$M;ZEILE(); VERGLEICH($B$6000&"*";INDEX(ADRESSE(1;SPALTE($A$1:$L$1); 4;1); ); ))&"-"&INDEX(a_Befüllung!$A:$M;ZEILE(); VERGLEICH(C$6000&"*";INDEX(ADRESSE(1;SPALTE($A$1:$L$1); 4;1); ); ))


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8
c_zähleneinfach

 C
20
30

Formeln der Tabelle
ZelleFormel
C2=--(ZÄHLENWENN(INDEX(b_verbinden!C:C;ZEILE()):INDEX(b_verbinden!C:C;ZEILE()+2); b_verbinden!C2)>1)
C3=--(ZÄHLENWENN(INDEX(b_verbinden!C:C;ZEILE()):INDEX(b_verbinden!C:C;ZEILE()+2); b_verbinden!C3)>1)


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8
d_zählenmehrfach

 C
20
30

Formeln der Tabelle
ZelleFormel
C2=WENN(c_zähleneinfach!C2=1;SUMME(c_zähleneinfach!C2:C4); 0)
C3=WENN(c_zähleneinfach!C3=1;SUMME(c_zähleneinfach!C3:C5); 0)


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8
Kann man diese Formeln in VBA umwandeln?
Und hier eine kleine Musterdatei:
https://www.herber.de/bbs/user/112915.xlsm
Besten Dank für eine Hilfe / Anregung.
mfg

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Formeln durch VBA ersetzen
16.04.2017 22:42:43
onur
Hi,
Es wäre besser, wenn du statt der formeln eine beschreibung dessen hättest, was sie bzw die Makros bewirken sollen und wofür die datei gut ist.
AW: Formeln durch VBA ersetzen
16.04.2017 23:11:48
teller286
Hallo onur,
ich versuche das mal:
Formel Tabelle verbinden:
C1 und nach unten: schreibe in C1 Zelleninhalt aus Tabelle Befüllung C1 und D1, getrennt mit Bindestrich; in B6000 steht C; in C6000 steht D
D1 und nach unten: schreibe in D1 Zelleninhalt aus Tabelle Befüllung C1 und E1, getrennt mit Bindestrich; in B6000 steht C; in D6000 steht E
E1 und nach unten: schreibe in E1 Zelleninhalt aus Tabelle Befüllung C1 und F1, getrennt mit Bindestrich; in B6000 steht C; in E6000 steht F
usw…..
In B6000 können auch andere Spaltenbuchstaben stehen, auch doppelte Spaltenbuchstaben wie AA, AC, BG o.ä.
Formel Tabelle zähleneinfach:
C2 nach unten und nach rechts:
Zähle in Tabelle verbinden C2 bis C4 wie oft der Inhalt C2 (aus Tabelle verbinden) vorkommt;
schreibe das Ergebnis in die Zelle C2
Formel Tabelle zählenmehrfach:
C2 nach unten und nach rechts:
Wenn in Tabelle zähleneinfach C2 =1, dann summiere C2 bis C4 von zähleneinfach und
schreibe das Ergebnis in die Zelle (C2 usw….); sonst Ergebnis = 0
mfg
Anzeige
AW: Formeln durch VBA ersetzen
17.04.2017 07:00:18
erichm
Hallo onur,
danke. Ich habe die Ergebnisse Deiner Datei mit dem Original abgeglichen und die Abweichungen in der Tabelle zähleneinfach rot markiert.
Noch ein Hinweis: in dieser Tabelle darf es immer nur die 1 als Ergebnis geben. Teilweise steht dort die 2.
Die Ergebnisse Tabelle zählenmehrfach sind ziemlich komplett falsch.
Die Fehler in den Makros konnte ich nicht erkennen; aufgefallen ist mir noch, dass in der Tabelle zähleneinfach ab Spalte M in der Zeile 2 immer eine 8 steht?
Hier die Datei:
https://www.herber.de/bbs/user/112917.xlsm
mfg
Anzeige
AW: Formeln durch VBA ersetzen
17.04.2017 09:34:21
onur
"Zähle in Tabelle verbinden C2 bis C4 wie oft der Inhalt C2 (aus Tabelle verbinden) vorkommt;
schreibe das Ergebnis in die Zelle C2"
"Wenn in Tabelle zähleneinfach C2 =1, dann summiere C2 bis C4 von zähleneinfach und
schreibe das Ergebnis in die Zelle (C2 usw….); sonst Ergebnis = 0 "
Du sagst, ZAHLE und SUMMIERE - Also kann durchaus was anderes rauskommen, als 1.
373 396 373 - 373 taucht 2x auf - also taucht er bei verbinden auch 2x auf - also eine 1x !
370 417 370
351 404 351
315-373 315-291 315-373
315-367 315-266 315-370
331-344 331-253 331-351
Spalte M in "verbinden" ist beinahe identisch mit Spalte K - daher die vielen Einsen.
Anzeige
AW: Formeln durch VBA ersetzen
17.04.2017 09:44:34
onur
Jetzt habe ich den Fehler von mir erkannt - ich hatte aus versehen gelesen, das ein 9-er Block getestet werden soll - also statt C2-C4 C2-E4.
https://www.herber.de/bbs/user/112919.xlsm
AW: Formeln durch VBA ersetzen
17.04.2017 10:37:44
erichm
Danke - die Tabelle zähleneinfach stimmt jetzt!
Die Ergebnisse in der Tabelle zählenmehrfach sind aber unverändert falsch; den Fehler habe ich noch nicht entdeckt.
mfg
Alternative Lösung = schneller, jedoch mit Fehlern
17.04.2017 14:11:06
erichm
Hallo,
jetzt ist es mir doch noch gelungen eine alternative VBA-Lösung zu finden. Diese ist sogar schneller, aber leider kann ich eine Formel (noch) nicht mit VBA lösen.
Ferner fehlt mir die Lösung für eine variable Zeilen- und Spaltenbegrenzung:
Hier mein Code, der auch die Formel enthält, die per VBA nicht funktioniert:
Sub muster1a() Dim ze, sp, w1, w2, ze2, found, sp2, w3, anzsp Dim wbBook As Workbook Dim wsSource As Worksheet Dim wsTarget1 As Worksheet Dim wsTarget2 As Worksheet Dim wsTarget3 As Worksheet Dim t0 As Single t0 = Timer Set wbBook = ThisWorkbook With wbBook Set wsSource = .Worksheets("b_verbinden") Set wsTarget1 = .Worksheets("c_zähleneinfach") Set wsTarget2 = .Worksheets("d_zählenmehrfach") Set wsTarget3 = .Worksheets("b_verbinden") End With 'VERBINDEN ''diese Formel geht leider nicht !!? ' With wsTarget3.Range("C2:L28") '.End(xlDown) ? ' .FormulaLocal = "=INDEX(a_Befüllung!$A:$M;ZEILE();VERGLEICH($B$6000&" *_ ";INDEX(ADRESSE(1;SPALTE($A$1:$L$1);4;1););))&" - "&INDEX(a_Befüllung!$A:$M;ZEILE();VERGLEICH(C$ _ 6000&"_ * ";INDEX(ADRESSE(1;SPALTE($A$1:$L$1);4;1););))" ' .Formula = .Value ' End With For ze = 2 To 4999 ' diese Lösung ist leider nicht so schnell? Sheets("b_verbinden").Cells(ze, 2) = Sheets("a_Befüllung").Cells(ze, 2) Sheets("c_zähleneinfach").Cells(ze, 2) = Sheets("a_Befüllung").Cells(ze, 2) Sheets("d_zählenmehrfach").Cells(ze, 2) = Sheets("a_Befüllung").Cells(ze, 2) w1 = Str(Sheets("a_Befüllung").Cells(ze, 3)) For sp = 3 To 100 w2 = Sheets("a_Befüllung").Cells(ze, sp + 1) If w2 "" Then anzsp = sp w2 = Str(w2) w3 = Trim(w1) + "-" + Trim(w2) Sheets("b_verbinden").Cells(ze, sp) = w3 End If Next sp Next ze 'ZÄHLENEINFACH With wsTarget1.Range("C2:L28") '.End(xlDown) ? .FormulaLocal = "=--(ZÄHLENWENN(INDEX(b_verbinden!C:C;ZEILE()):INDEX(b_verbinden!C:C; _ ZEILE()+2);b_verbinden!C2)>1)" .Formula = .Value End With 'ZÄHLENMEHRFACH With wsTarget2.Range("C2:L28") '.End(xlDown)? .FormulaLocal = "=WENN(c_zähleneinfach!C2=1;SUMME(c_zähleneinfach!C2:C4);0)" .Formula = .Value Range("A1").Select End With MsgBox "3fach gefüllt in " & (Timer - t0) * 1000 & " ms." End Sub Die Range C2:L28 soll eigentlich variabel gehalten werden:
Beginn immer C2
letzte Zeile: = letzte belegte Zelle aus Tabelle a_Befüllung, Spalte A
letzte Spalte: = letzte belegte Zelle aus Tabelle a_Befüllung, Zeile 1
Hier die aktuelle Musterdatei; ich habe zur Kontrolle in die Tabellen die Ergebnisse mit den Formelberechnungen eingebaut; dann sieht man gleich ob die VBA-Lösung stimmt:
https://www.herber.de/bbs/user/112923.xlsm
Besten Dank für eine weitere Hilfe!
mfg
Anzeige
AW: Alternative Lösung = schneller, jedoch mit Fehlern
17.04.2017 23:55:20
Werner
Hallo Erich,
hier deine Datei zurück. Die Zählenmakros habe ich mal raus geschmissen, waren für mich ja uninteressant für das beschriebene Problem.
Das Makro kopiert die Formeln zunächst für die "Überschriften" (T1-T2 usw.) nach b_verbinden, Zeile 1, ab C1.
Das ganze ist dynamisch. Bedeutet, wenn in a_Befüllung weitere Spalten dazu kommen, wird das entsprechend berücksichtigt. Da es aber INDEX/VERWEIS-Formeln sind, musst du bevor du das Makro laufen lässt in Zeile 6000 auch die Spaltenbuchstaben entsprechend ergänzen.
Anschlißend werden ab C3 die entsprechenden Zahlen zusammengeführt. Auch das ist dynamisch wenn in a_Befüllung Spalten dazu kommen.
Danach werden sowohl in Zeile 1 ab C1 die Formeln durch ihre Werte ersetzt, dann werden auch im Bereich der Zahlenzusammenführung die Formeln durch ihre Werte ersetzt.
https://www.herber.de/bbs/user/112938.xlsm
Gruß Werner
Anzeige
AW: Alternative Lösung = schneller, jedoch mit Fehlern
18.04.2017 08:06:00
erichm
Hallo Werner,
schon mal allerbesten Dank!
Ich habe die Makros in die Originaldatei gepackt, angepasst und laufen lassen:
erster Erfolg - Dateigröße von ca. 106 MB auf ca. 34 MB gesunken!!
Jetzt muss ich noch an diverse Feinheiten und melde mich abschließend über den Gesamterfolg.
mfg
AW: Alternative Lösung = schneller, jedoch mit Fehlern
20.04.2017 06:33:33
erichm
Hallo Werner,
es ist jetzt alles durchgetestet und es funktioniert!! Durch die MB-Reduzierung können wir evtl. nochmals das Projekt erweitern; mal sehen.
Nochmals vielen vielen Dank!
mfg
AW: Gerne u. Danke für die Rückmeldung. o.w.T.
20.04.2017 08:50:29
Werner

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige