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.

VBA
#1
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
Antworten Top
#2
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)))))
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#3
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
Antworten Top
#4
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.
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#5
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
Antworten Top
#6
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.
Antworten Top
#7
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
Antworten Top
#8
(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?
Antworten Top
#9
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
Antworten Top
#10
(03.03.2023, 12:59)NOVI64 schrieb: Das Semikolon hatte ich vergessen zu ändern
Aha. Danke .
Antworten Top


Gehe zu:


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