Microsoft Excel

Herbers Excel/VBA-Archiv

Array anpassen

Betrifft: Array anpassen von: Alifa
Geschrieben am: 28.08.2014 10:41:45

Hallo,
das Array p enthält 42 Zahlen. Daraus werden jeweils 6 Zahlen ausgewählt, welche die Summe 574 bilden. Kann p nach jeder "Ziehung" so verändert werden, dass die 6 zuvor entnommenen Zahlen nicht mehr darin vorkommen, p also 36(30,24,18...6) Zahlen enthält. Daraus werden weiter 6 entnommen, deren Summe 574 ist. Ich stelle mir das so vor:
For Each a1 In p.....For Each a6 in p....If a1+a2+...a6=574 Then
Danke im Voraus, Alifa

  

Betrifft: AW: Array anpassen von: yummi
Geschrieben am: 28.08.2014 11:03:09

Hallo Alifa,

Du kannst das Array zwar mit Redim verändern, aber du müsstest dir auch die Inicex merken welche Du löschen willst. Vorschlag: nimm ein 2 dimensionales array
0,0 ... 0,42 deine Zahlen
1,0 ... 1,42 Bool Wert

Initialisiere alle bool Werte auf true
Jedesmal wenn Du eine Zahl erfolgreich gezogen hast setzt Du den bool wert auf false. Dann kannst Du dafür sorgen, dass nur Zahlen mit true gezogen werden.

Vlt ist das ja ein Ansatz
gruß
yummi


  

Betrifft: AW: Array anpassen von: Rudi Maintaire
Geschrieben am: 28.08.2014 12:39:40

Hallo,
benutze ein Collection- oder Dictionary-Objekt statt eines Arrays.
Daraus kannst du die Items einfach per Remove entfernen.

Gruß
Rudi


  

Betrifft: AW: Array anpassen von: Alifa
Geschrieben am: 28.08.2014 14:36:28

Leider habe ich kaum Kenntnisse von Collction-und Dictionary-Object. Wie würde das aussehen mit den Zahlen:7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197.
Gruß, Alifa


  

Betrifft: AW: Array anpassen von: Rudi Maintaire
Geschrieben am: 29.08.2014 12:12:39

Hallo,
nicht schön aber wirksam:

Sub alifa()
  Dim arr, arrErg
  Dim objArr As Object, objErg As Object
  Dim a As Integer, b As Integer, c As Integer, _
      d As Integer, e As Integer, f As Integer, _
      i As Integer
  '
  arr = Array(7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, _
    71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, _
    149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197)
  Set objArr = CreateObject("scripting.dictionary")
  Set objErg = CreateObject("scripting.dictionary")
  '
  For i = LBound(arr) To UBound(arr)
    objArr(arr(i)) = 0
  Next
  '
start:
  If objArr.Count > 5 Then
    arr = objArr.keys
    For a = 0 To UBound(arr)
      For b = a + 1 To UBound(arr)
        For c = b + 1 To UBound(arr)
          For d = c + 1 To UBound(arr)
            For e = d + 1 To UBound(arr)
              For f = e + 1 To UBound(arr)
                If (arr(a) + arr(b) + arr(c) + arr(d) + arr(e) + arr(f)) = 564 Then
                  objErg(objErg.Count + 1) = Array(arr(a), arr(b), arr(c), _
                                                   arr(d), arr(e), arr(f))
                  objArr.Remove arr(a)
                  objArr.Remove arr(b)
                  objArr.Remove arr(c)
                  objArr.Remove arr(d)
                  objArr.Remove arr(e)
                  objArr.Remove arr(f)
                  GoTo start
                End If
              Next f
            Next e
          Next d
        Next c
      Next b
    Next a
  End If
  arrErg = objErg.items
  arrErg = Application.Transpose(arrErg)
  With Sheets(1)
    .Cells(1, 1).Resize(UBound(arrErg), UBound(arrErg, 2)) = arrErg
    .Cells(8, 1).Resize(, UBound(arrErg, 2)).FormulaR1C1 = "=sum(r1C:r6c)"
  End With
End Sub

Gruß
Rudi


  

Betrifft: AW: Array anpassen von: Alifa
Geschrieben am: 29.08.2014 18:07:36

Hallo Rudi,
Danke für den Code. Es ist zu vermuten, dass es viele solcher "Gruppen" gibt. Das soll ein magisches
Quadrat 7x7 geben, mit 7 Nullen. Summe:574. Die Nullen: c1,d2,e3,g4,a5,f6,b7(Schachbrett Notation).
Bitte ändere die Ausgabe in diesem Sinne.(Die Zahlen nebeneinander und 7 Mal 0). Ob es möglich ist, alle Gruppen zu finden? Hoffentlich verlange ich nicht zu viel.
Gruß, Erhard


 

Beiträge aus den Excel-Beispielen zum Thema "Array anpassen"