Clever-Excel-Forum

Normale Version: VBA
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,
ich benötige Unterstützung bei der Einbindung einer Formel in einem Makro

In meinem Macro steht folgende Zeile:
ActiveChart.Axes(xlValue).MaximumScale = Range("AX35").Value
funtktioniert!

In der Zelle AX35 steht eine Formel:
(ist ja eigentlich egal welche, aber das ist sie)
=ROUNDDOWN(MIN(AK36:AM46;AR36:AT46),-(MIN(LEN(MIN(AK36:AM46)),LEN(MIN(AR36:AT46)))-2))

Jetzt möchte ich also nicht mehr im Makro auf die Zelle AX35 zugreifen, sondern die Formel direkt in die Programmzeile einbinden:
ActiveChart.Axes(xlValue).MaximumScale = Formula ="=ROUNDDOWN(MIN(AK36:AM46;AR36:AT46),-(MIN(LEN(MIN(AK36:AM46)),LEN(MIN(AR36:AT46)))-2))"
... so funktioniert's nicht.
ActiveChart.Axes(xlValue).MaximumScale = _????????_ "=ROUNDDOWN(MIN(AK36:AM46;AR36:AT46),-(MIN(LEN(MIN(AK36:AM46)),LEN(MIN(AR36:AT46)))-2))"

Also was gehört dazwischen?

Vielen Dank im voraus
Hi,


mal ein Versuch:

Code:
ActiveChart.Axes(xlValue).MaximumScale = Application.WorksheetFunction.RoundDown(Application.Min(Range("AK36", "AM46"), Range("AR36", "AT46"), -(Application.Min(Application.Len(Application.Min(Range("AK36", "AM46")), Application.Len(Application.Min(Range("AR36", "AT46"))) - 2)))))
Hi,
danke für die Antwort, funktioniert aber nicht. Bleibt beim ersten RoundDown hängen.

Mein Startpunkt war folgender:
Sub Macro1()
Range("a1").Select
ActiveCell.Formula = "=ROUNDUP(MAX(AK36:AM46,AR36:AT46)"
End Sub
- ich hab mal den restlichen Schnickschnack weggelassen

In die aktive Zelle (A1) wird der Max-Wert aus zwei verschiedenen Bereichen geschrieben und vorher berechnet.Also hab ich gedacht, es liese sich auch so einbauen
ActiveChart.Axes(xlValue).MaximumScale = _????????_ "=ROUND .....

Dennoch danke für die Bemühung
Hallo,

was ich Dir zeigen wollte ist, dass es nicht so geht, wie Du Dir das vorstellst. Du musst die Formel in VBA-Code umwandeln. Da ich Deine Formel mangels Beispieldaten nicht verstehe, kann ich Sie auch nicht in Code umsetzen.
Hallo,

dazwischen gehört Evaluate:

ActiveChart.Axes(xlValue).MaximumScale = Evaluate("=ROUNDDOWN(MIN(AK36:AM46,AR36:AT46),-(MIN(LEN(MIN(AK36:AM46)),LEN(MIN(AR36:AT46)))-2))")

Gruß Uwe
Code:
Dim r1 As Range: Set r1 = Worksheets("Tabelle1").Range("AK36:AM46")
Dim r2 As Range: Set r2 = Worksheets("Tabelle1").Range("AR36:AT46")

ActiveChart.Axes(xlValue).MaximumScale = Application.RoundDown(Application.Min(Union(r1, r2)), -(Application.Min(Len(Application.Min(r1)), Len(Application.Min(r2))) - 2))


Interessenshalber:
Zitat:(ist ja eigentlich egal welche, aber das ist sie)
=ROUNDDOWN(MIN(AK36:AM46;AR36:AT46),-(MIN(LEN(MIN(AK36:AM46)),LEN(MIN(AR36:AT46)))-2))
Mit welchen Landeseinstellungen arbeitest du? Englische Formelnamen und Semikolon als Argumenttrenner sind mir noch nicht untergekommen.
Danke für das Interesse. An der Stelle muss ich widersprechen (siehe folgender kleiner Makro):

Sub Macro1()
Range("A1").Select
ActiveCell.Formula = "=MAX(AK36:AM46,AR36:AT46)"
End Sub

Es werden zwei Bereiche untersucht... Bereich 1: AK36:AM46  und Bereich 2: AR36:AT46
... und die Ausgabe in Zelle A1 ist der Maximalwert aus beiden Bereichen
--> funktioniert

Diese Formel ist direkt aus einer Zelle kopiert und könnte so auch in der Zelle A1 stehen
(03.03.2023, 10:25)NOVI64 schrieb: [ -> ]Danke für das Interesse. An der Stelle muss ich widersprechen (siehe folgender kleiner Makro):

ActiveCell.Formula = "=MAX(AK36:AM46,AR36:AT46)"
Wem widersprichst du?

Sofern sich das auf meine Frage zur Spracheinstellung bezieht: Deine jetzige Formel ist VBA-konform mit amerikanischer Schreibweise korrekt, das hat keiner hinterfragt. Deine Formel im Startbeitrag lautet aber:
Zitat:=ROUNDDOWN(MIN(AK36:AM46;AR36:AT46),-(MIN(LEN(MIN(AK36:AM46)),LEN(MIN(AR36:AT46)))-2))
Daher die Frage: Wo kommt das Semikolon her?

Zum eigentlichen Thema: Kommst du mit unseren Hinweisen jetzt klar, oder willst du da auch "widersprechen"? Oder gibt es keine Rückmeldung?
da fehlt etwas zwischen EVALUATE und der Klammer.
Es funktioniert nicht.
Ich hab's jetzt aber raus

Dennoch vielen Dank für Interesse und Antwort. Ich hab viel gelernt.

Nur als Background bei Interesse
Ich stelle zwei Diagramme gegenüber die verschiedene Datenquellen haben. Die Werteachsen sollen aber die gleiche Skalierung haben, damit man auf den ersten Blick einen Unterschied sieht ohne Werte lesen und vergleichen zu müssen

Also ist der Max-Skalenwert der Max-Wert aus beiden Tabellen und der Min-Skalenwert der Min-Wert aus beiden Tabellen.

eingepackt ist das dann in eine ROUNDUP / ROUNDDOWN Funktion.
ROUNDUP für den Max-Skalenwert
ROUNDDOWN für den Min Skalenwert
ich möchte z.B. einen krummen Wert 74.845.231 dargestellt haben als 75.000.000. Ich brauche also die Länge der längsten Zeichenkette... wäre dann bei 74.845.231 der Wert 8. Den Wert um 2 reduziert ergibt 6 --> die ersten 6 Stellen werden zu Nullen und die 7. Stelle wird aufgerundet

gleiches für den Min-Skalenwert

Ich antworte, wenn auch mit Verzug...
aber nicht unter Druck!
Es ist Freitag und ich bin in einem Angestelltenverhältnis, bedeutet bis min 1600h gebunden.

Die Hinweise haben geholfen inkl kleinerer Änderungen

Zu meiner Version (Sprache)
Befehle sind in English
Zeichen sind Deutsch

Das Semikolon hatte ich vergessen zu ändern, daran lags aber nicht.

Vielen Dank für die Unterstüzung. Ich hab viel gelernt
(03.03.2023, 12:59)NOVI64 schrieb: [ -> ]Das Semikolon hatte ich vergessen zu ändern
Aha. Danke .