Ich habe folgendes Problem: ich möchte Excel einen Prüfvorgang durchführen lassen, der folgende Formel auf Wahr/Unwahr prüfen soll.
Formel kurz erklärt: x, y und n sind vordefinierte Zahlen. Excel soll mir nun sagen, ob aus dem n-ten Produkt von (a*b), wobei a und b Zahlen zwischen 0 und 20 sein sollten, x*y rauskommen kann.
Kurzes Beispiel: x=5 y=8 x*y=40 n=4
40=1*5+2*10+5*1+4*5 --> True
Es soll also geprüft werden, ob eine Möglichkeit besteht, ob die Summe aus n a*b-Produkten x*y ergeben kann. Dabei können a und b verschiedene Werte annehmen innerhalb der einzelnen Produkte, jedoch keine Werte größer 20.
For j = 1 To 20 For jj = 1 To 20 For jjj = 1 To 20 For jjjj = 1 To 20 If j + jj + jjj + jjjj = a * b Then c00 = c00 & Join(Array(vbLf, j, jj, jjj, jjjj)) Next Next Next Next
1. Das Programm variiert zwei Werte (awert und bwert) ganzzahlig über die vorgegebenen Grenzen. Für jede Variation, für die die definierte Formel den Wert 0 hat, werden die Werte der Variation ausgegeben.
2. Die Formel ist frei definierbar.
Code:
Private Sub cbTuwat_Click() Dim lngAmin As Long Dim lngAmax As Long Dim lngBmin As Long Dim lngBmax As Long Dim lngOff As Long Dim lngAwert As Long Dim lngBwert As Long Dim rngFormel As Range Dim rngAwert As Range Dim rngBwert As Range Dim rngAusgabe As Range
lngAmin = ThisWorkbook.Names("amin").RefersToRange.Value lngAmax = ThisWorkbook.Names("amax").RefersToRange.Value lngBmin = ThisWorkbook.Names("bmin").RefersToRange.Value lngBmax = ThisWorkbook.Names("bmax").RefersToRange.Value Set rngAwert = ThisWorkbook.Names("awert").RefersToRange Set rngBwert = ThisWorkbook.Names("bwert").RefersToRange Set rngFormel = ThisWorkbook.Names("Formel").RefersToRange Set rngAusgabe = ThisWorkbook.Names("Ausgabe").RefersToRange rngAusgabe.CurrentRegion = ""
lngOff = 0 For lngAwert = lngAmin To lngAmax rngAwert.Value = lngAwert For lngBwert = lngBmin To lngBmax rngBwert.Value = lngBwert If rngFormel.Value = 0 Then rngAusgabe.Offset(lngOff, 0) = lngAwert rngAusgabe.Offset(lngOff, 1) = lngBwert lngOff = lngOff + 1 End If Next lngBwert Next lngAwert If lngOff = 0 Then MsgBox "Keine Lösung gefunden." End Sub
helmut
Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität. Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen." Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.
06.06.2018, 19:13 (Dieser Beitrag wurde zuletzt bearbeitet: 06.06.2018, 19:13 von RPP63.)
Moin Helmut und sorry vorab für das off topic! Verona Poth nannte ihren Sohn San Diego, weil er dort gezeugt wurde. Gabi Köster nahm das in einem Sketch zum Anlass, nicht allem und allen "sinnvolle" Namen geben zu müssen. Grob nach diesem Script: "Hömma, Rückbank von Papas Auto, im Wald, kommsse ma essen?"
Conclusio: Nicht immer ist ein sprechender Name sinnvoll … ;)
[/off topic]
Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)