Das mit Formeln fand ich dann doch nicht so ideal. Habe ein Makro gestrickt. Habs hier im Text für alle angefügt für alle, die ungern fremde Dateien mit Makros öffnen. Scheint aber sowieso nicht möglich zu sein, .ods-Dateien die Makros enthalten hochzuladen
Mir ist es ja wichtig, die aktiven Einträge von den berechneten unterscheiden zu können. Um zu verhindern, daß bei den Berechnungen der Zwischenwerte zufällig glatte Ergebnisse heraus kommen, addiere ich zu jedem Zwischenwert 0.00000000000031. Für meinen Zweck stört diese eingebrachte Ungenauigkeit nicht. Es erlaubt aber, per bedingter Formatierung alle aktiven Einträge hervorzuheben.
Was ich dabei kurios finde, daß diese absichtliche Verfälschung der Ergebnisse bei einem glatten Zwischenwert wie z.B. 25 (Spalte B) nicht abgebildet wird. Allerdings wird mit dem addierten Wert „fast“ korrekt weiter gerechnet. Beispiel B5:
Gemäß Makro hätte angezeigt werden müssen: 45,00000000000031
Angezeigt wird zu wenig 45,00000000000030
gerechnet wird mit zu viel 45,000000000000312638803734444
(die Stellen nach dem Komma habe ich über die Subtraktion B5-45 und Kopieren des Ergebnis als Wert in B21 erhalten)
Möglicherweise liegt es daran, wie ich die DIM-Werte deklariert habe. Aber eigentlich sollte das keine Auswirkungen haben. In Spalte C ist dagegen alles korrekt dargestellt und berechnet.
In jedem Fall funktioniert es in einer für meine Zwecke ausreichenden Genauigkeit.
######################
Sub Zwischenwerte()
Dim x As Long, y As Long, a As Long
Dim EintragOben As double, EintragUnten As double
Dim ZwiWert As Double
Dim ZwiSumme As Double
Dim ZwiZell As Long
Dim ZwiIndikator
x = Selection.Rows(1).Row
y = Selection.Rows.Count + x - 1
a = ActiveCell.Column
ColCount = Selection.Columns.Count
'
'ZwiIndikator verhindert fehlende Nachkommastellen
'über Nachkommastellen wird die bedingte Formatierung gesteuert
ZwiIndikator = 0.00000000000031
'
If ColCount > 1 Then
MsgBox "Bitte nur 1 Spalte wählen"
Exit Sub
End If
'
If Selection.Rows.Count = 1 Then
MsgBox "Bitte einen Bereich auswählen"
Exit Sub
End If
'
EintragOben = Cells(x, a)
EintragUnten = Cells(y, a)
ZwiWert = (EintragUnten - EintragOben) / (Selection.Rows.Count - 1) + ZwiIndikator
'
For ZwiZelle = 1 To Selection.Rows.Count - 2
Cells(x + ZwiZelle, a).Select
ActiveCell.Formula = Cells(x + ZwiZelle - 1, a).Value + ZwiWert
Next
End Sub
❤️ Helfen Sie noch heute, unser LibreOffice Forum zu erhalten! ❤️
Unterstützen Sie das LibreOffice-Forum und helfen Sie uns, unser Ziel für 2025 zu erreichen!
🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱
>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
Zellen automatisch mit Zwischenwerten ausfüllen
Zwischenwerten automatisch über Makro ausfüllen
- Dateianhänge
-
- Zwischenwerte_Berechnen.ods.zip
- (88.08 KiB) 91-mal heruntergeladen
Re: Zellen automatisch mit Zwischenwerten ausfüllen
Hallo,
für die bedingte Formatierung wäre einfacher, die Zellen mit Formeln zu füllen, wenn auch ganz einfachen, wie
In meinem Beispiel mal eine Makrolösung, die in dem ausgewählten Bereich alle leeren Zellen ausfüllt und dabei auch zwischendurch eingetragene Werte beachtet. Es wird dabei nur die erste Spalte der Auswahl benutzt.
für die bedingte Formatierung wäre einfacher, die Zellen mit Formeln zu füllen, wenn auch ganz einfachen, wie
Code: Alles auswählen
=25,3
Code: Alles auswählen
Sub Main
oDoc=Thiscomponent
oSel=oDoc.CurrentController.Selection
if oSel.supportsservice("com.sun.star.sheet.SheetCellRanges") then
msgbox "Nur einen zusammenhängenden Bereich markieren!"
else
bereiche=osel.queryEmptyCells
for i=0 to bereiche.count-1
spalte=bereiche.RangeAddresses(i).StartColumn
von=bereiche.RangeAddresses(i).StartRow
if von=0 then von=1
bis=bereiche.RangeAddresses(i).EndRow
aformeln()=bereiche.getbyIndex(i).getFormulaArray()
min=osel.Spreadsheet.getCellByPosition(spalte,von-1).Value
max=osel.Spreadsheet.getCellByPosition(spalte,bis+1).Value
n=ubound(aformeln())
for k=0 to n
aformeln(k)(0)="=" & str(min+(max-min)/(n+2)*(k+1))
next
bereiche.getbyIndex(i).setFormulaArray(aformeln)
next
end if
End Sub
- Dateianhänge
-
- Makro Zwischenwerte_Berechnen.ods
- (11.94 KiB) 95-mal heruntergeladen
Gruß,
mikele
mikele
Re: Zellen automatisch mit Zwischenwerten ausfüllen
Hallo Mikele,
so hat jeder seine Makro-Handschrift. Dein Ansatz ist mehr der elegante. Meine Version können Leute, die Angst vor Makros haben leichter durchschauen. Ich denke nur daran, wie allein der Begriff „Array“ bei manchem Kollegen totale Verwirrung auslöst. Dann noch kombiniert mit Index. Wenn ich mir vorstelle, wie wohl ein Makro aussähe, daß die ganze Geschichte als 3D-Funktion über 50 Tabellenblättern durchrechnet ... das ist keine Aufforderung - war nur so ein Gedankenblitz.
Naja hoffen wir mal, daß der eine oder andere Forum-Nutzer bei Bedarf diesen Thread und seine Lösungen findet.
Ich werde mich jetzt noch auf den Weg machen, etwas über die hinter der Oberfläche ablaufenden Rechen- und Darstellungsmethode sowie Genauigkeit von LibreOffice zu finden.
Gruß
Pepe5
so hat jeder seine Makro-Handschrift. Dein Ansatz ist mehr der elegante. Meine Version können Leute, die Angst vor Makros haben leichter durchschauen. Ich denke nur daran, wie allein der Begriff „Array“ bei manchem Kollegen totale Verwirrung auslöst. Dann noch kombiniert mit Index. Wenn ich mir vorstelle, wie wohl ein Makro aussähe, daß die ganze Geschichte als 3D-Funktion über 50 Tabellenblättern durchrechnet ... das ist keine Aufforderung - war nur so ein Gedankenblitz.
Naja hoffen wir mal, daß der eine oder andere Forum-Nutzer bei Bedarf diesen Thread und seine Lösungen findet.
Ich werde mich jetzt noch auf den Weg machen, etwas über die hinter der Oberfläche ablaufenden Rechen- und Darstellungsmethode sowie Genauigkeit von LibreOffice zu finden.
Gruß
Pepe5
An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:
Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.