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

Werte sollen zwischen zwei Zahlen liegen

Werte sollen zwischen zwei Zahlen liegen
06.11.2016 07:48:46
Brauer

Hallo,
ich habe da eine kleine Frage, die ich mir leider durch googeln und Excel-Hilfe nicht beantworten kann. Daher hoffe ich, dass mir hier jemand helfen kann. Ich muss vielleicht dazu sagen, dass ich leider nicht so gut in Excel bin. Falls es es also um ein total einfach zu lösendes Problem handelt, dann Entschuldigt mir :-)
Also...
Ich habe eine Formel:
x*y*z + a*b
Leider weiß ich nichts über meine Variablen, bis auf die Tatsache, dass sie allesamt zwischen 1 und 9 liegen (Nur ganze Zahlen ohne Komma). Es dürfen dabei auch mehrere Variablen denselben Wert haben.
Jetzt hätte ich gerne eine Liste an möglichen Ergebnissen. Da gibt es leider einige. Deshalb wollte ich da Excel bemühen...
Nur weiß ich nicht wie das geht. Wie kann ich dem Programm denn sagen, dass alle einzelnen Variablen unabhängig von einander eine ganze Zahle zwischen 1 und 9 sind?

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Es gibt …
06.11.2016 08:41:29
RPP63
Moin
… es gibt 9^5 = 59.049 Ergebnisse, aber wohl nur 809 verschiedene.
Da die Ergebnisse zwischen 2 (1^3+1^2) und 810 (9^3+9^2) liegen, sollte jede natürliche Zahl in diesem Bereich vorkommen.
Gruß Ralf
AW: Es gibt …
06.11.2016 08:57:38
ransi
Hallo,
Schau mal ob das in die Richtige Richtung geht:
' **********************************************************************
' Modul: Tabelle1 Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Sub machs()
    Dim a, b, x, y, z
    Dim L As Long
    Redim arr(0)
    For a = 1 To 9
        For b = 1 To 9
            For x = 1 To 9
                For y = 1 To 9
                    For z = 1 To 9
                        If (x * y * z) + (a * b) = 9 Then
                            arr(L) = Array(a, b, x, y, z)
                            L = L + 1
                            Redim Preserve arr(L)
                        End If
                    Next
                Next
            Next
        Next
    Next
End Sub


ransi
Anzeige
Einspruch: es sind 1.287 Möglichkeiten
06.11.2016 09:00:50
WF
Hi,
Kombinationen (ungeordnet mit Wiederholung):
=FAKULTÄT(A1+A2-1)/(FAKULTÄT(A2)*FAKULTÄT(A1-1))
in A1 steht 9
in A2 steht 5
WF
AW: Es gibt …
06.11.2016 09:01:23
RPP63
… nur 670 verschiedene Lösungen.
Hier mal die Makro-Lösung (für ein leeres Tabellenblatt):
Sub RPP()
Dim arrWerte(1 To 9 ^ 5, 1 To 1)
Application.ScreenUpdating = False
For x = 1 To 9
   For y = 1 To 9
      For Z = 1 To 9
         For a = 1 To 9
            For b = 1 To 9
               q = q + 1
               arrWerte(q, 1) = x * y * Z + a * b
            Next
         Next
      Next
   Next
Next
Range(Cells(1, 1), Cells(Ubound(arrWerte), 1)) = arrWerte
With Columns(1)
   .Sort Cells(1)
   .RemoveDuplicates 1
End With
MsgBox "Es gibt " & Cells(1).End(xlDown).Row & " Lösungen!"
End Sub

Anzeige
AW: Es gibt …
06.11.2016 14:01:35
snb
Vielleicht etwas weniger (181) ?
Sub M_RPP_snb()
For x = 1 To 9
For y = 1 To 9
For Z = 1 To 9
For a = 1 To 9
For b = 1 To 9
If x * y * Z + a * b > 1 And x * y * Z + a * b < 9 Then q = q + 1
Next
Next
Next
Next
Next
MsgBox q
End Sub

AW: Es gibt …
06.11.2016 14:55:33
snb
oder:
Sub M_RPP_snb()
For x = 1 To 9
For y = 1 To 9
For Z = 1 To 9
For a = 1 To 9
For b = 1 To 9
If x * y * Z + a * b > 1 And x * y * Z + a * b < 9 Then c00 = c00 & vbLf & Join( _
Array(x, y, Z, a, b), "_")
Next
Next
Next
Next
Next
sn = Split(c00, vbLf)
Cells(1).Resize(UBound(sn) + 1) = Application.Transpose(sn)
End Sub

Anzeige
Wo steht …
06.11.2016 16:17:51
RPP63
Wo steht denn, dass das Ergebnis zwischen 1 und 9 liegen soll, snb?
Die Variablen können diese Werte annehmen!
Das erste Ergebnis, welches nicht mit ganzzahligen Variablen ermittelt werden kann, ist 311
Ich habe auch mal eine Collections.ArrayList versucht, ist aber erheblich langsamer als meine erste Variante.
Dennoch dieser (schlechtere) Code:
Sub OnlyArray()
Dim a As Long, b As Long, q As Long
Dim x As Long, y As Long, z As Long
Dim Start As Double
Dim Dauer1 As Double, Dauer2 As Double, Dauer3 As Double, Dauer4 As Double
Dim arrWerte()
Dim objArrLst As Object, Mein_Array() As Variant, L As Long

Set objArrLst = CreateObject("System.collections.arraylist")
Start = Timer
'Application.ScreenUpdating = False 
For x = 1 To 9
   For y = 1 To 9
      For z = 1 To 9
         For a = 1 To 9
            For b = 1 To 9
               q = q + 1
               Redim Preserve arrWerte(q)
               arrWerte(q) = x * y * z + a * b
            Next
         Next
      Next
   Next
Next
For q = 1 To 9 ^ 5
   If Not objArrLst.Contains(arrWerte(q)) Then objArrLst.Add arrWerte(q)
Next
Erase arrWerte
With objArrLst
    .Sort
    arrWerte = .ToArray
End With
Range("A1").Resize(Ubound(arrWerte) + 1) = WorksheetFunction.Transpose(arrWerte)
Set objArrLst = Nothing
MsgBox Timer - Start
End Sub
Gruß Ralf
Anzeige
noch ne Variante mit Dic
06.11.2016 19:35:16
Michael
Hi,
hier mit Zählung der Kombinationen:
Sub mitDic()
Dim i&, j&, k&
Dim z0&, z1&
Dim o2 As Object, o3 As Object, og As Object, oi2, oi3
Dim t0 As Single
t0 = Timer
Set o2 = CreateObject("scripting.dictionary")
Set o3 = CreateObject("scripting.dictionary")
Set og = CreateObject("scripting.dictionary")
For i = 1 To 9
For j = 1 To 9
z0 = i * j
o2(z0) = o2(z0) + 1
For k = 1 To 9
z1 = z0 * k
o3(z1) = o3(z1) + 1
Next
Next
Next
'Stop
For Each oi2 In o2.keys
For Each oi3 In o3.keys
i = oi2 + oi3
'   og(i) = og(i) + 1 ' hier holpert's noch, vielleicht so:
og(i) = og(i) + o2(oi2) * o3(oi3)
Next
Next
Range("B1").Resize(og.Count) = WorksheetFunction.Transpose(og.keys)
Range("C1").Resize(og.Count) = WorksheetFunction.Transpose(og.items)
Range("B1:C1").Resize(og.Count).Sort Range("B1"), xlAscending
Range("H10") = Timer - t0
End Sub
Mit Testdatei: https://www.herber.de/bbs/user/109233.xlsm
Gruß,
M.

Anzeige

324 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige