PNG32 PNG32 PNG32 PNG32
PNG32
Forum Excel, VBA, VSTO, Exceltips, Excelhj�lp PNG32 drivs av Excelspecialisten    Logga in     English
PNG32
PNG32 PNG32
PNG32

Logga in

PNG32

Du är inte inloggad. Logga in eller registrera dig för att skriva inlägg eller svara på inlägg.

För frågor om forumet, kontakta oss på webmaster@excelforum.se

PNG32 PNG32
PNG32 PNG32
PNG32

Excelforum

PNG32

 
ForumForumDiskussionerDiskussionerVBAVBATilldela variabler ett värdeTilldela variabler ett värde
Föregående Föregående
 
Nästa Nästa
Nytt inlägg
 2019-12-06 07:02
 

 Jag försöker tilldela 3st variabler a, b  och c ett värde med följande kod, men det fungerar inte.

Är jag helt ute och cycklar..?

Någon som kan hjälpa mig?

Sub prov_array()
 
Dim a(27), b(27), c(27) As Variant
Dim n, t As Integer
 
For n = 1 To 27
 
a(n) = a
b(n) = b
c(n) = c
 
t = t + 1
 
Cells(t + 1, 3).Value = a(n)
Cells(t + 1, 5).Value = b(n)
Cells(t + 1, 7).Value = c(n)
 
Next n
 
End Sub
 
Nytt inlägg
 2019-12-06 12:28
 

Just nu tilldelar du Arrayen a(n) värdet i a, den (tomma) variabeln. Som dessutom borde vara samma sak som a(0). Tror jag...

 a(n) = a
 b(n) = b
 c(n) = c

Det här petar in bokstäver istället för variabelvärden

 a(n) = "a"
b(n) = "b"
c(n) = "c"

 

Det här blir ett roligare test där du fyller arrayen i en loop och hämtar i en annan.

Sub prov_array()

 Dim a(27), b(27), c(27) As Variant

Dim n, t As Integer

 For n = 1 To 27

    a(n) = "a" & 100 + n

    b(n) = "b" & 100 + n

    c(n) = "c" & 100 + n

Next n

For t = 1 To 27

    Cells(t + 1, 3).Value = a(t)

    Cells(t + 1, 5).Value = b(t)

    Cells(t + 1, 7).Value = c(t)

Next t

 

End Sub

 

Om du har tråkigt kan du googla 

redim array vba

eftersom jag antar att du är på väg dit..

 

Nytt inlägg
 2019-12-06 16:03
 

Detta är bara inledningen av hela koden. Koden ser ut som bifogad.

Koden går igenom alla kombinationer av lotto, som sedan ska reduceras 
med ett antal villkor.
Så det är det jag är ute efter, att ge den indexerade variabeln a(n) värdet av variabel a.
Jag vet inte om det blir lite överarbetat, men jag inbillar mig att det blir lättare att
placera den indexerade variabel på rätt ställe på "kupongen".
 
  For a = 1 To 29
     For b = a + 1 To 30
       For c = b + 1 To 31
        For d = c + 1 To 32
         For e = d + 1 To 33
          For f = e + 1 To 34
           For g = f + 1 To 35
             
            div. villkor
             ...........
            Cells(t + 1, 3).Value = a
            Cells(t + 1, 4).Value = ","
            Cells(t + 1, 5).Value = b    
            etc
          Next g
         Next f
        Next e
       Next d
      Next c
     Next b
    Next a
 
Nytt inlägg
 2019-12-12 10:26
 
 Ändrad av Christian  på 2019-12-12 11:50:38
Hej hej

Det finns flera problem med din metod. Ett av dem är att samtliga kombinationer i lotto landar på omkring 33 miljarder, excel har 1 miljon celler, så alla kommer inte att få plats, och dessutom orsaka en krash. Om det blir minnesproblem eller outofrange återstår att se :). Dessutom så blir konsekvensen av For b = a + 1 To 30 att du missar en hel del kombinationer. Exempel: när A är 25 i din loop, så kan resten av serien inte få värden som understiger detta. b kan aldrig vara mindre än 26, c aldrig mindre än 27 osv. Fundera istället på om du kan få fram ett tal utan att behöva iterera igenom alla möjliga kombinationer.

Nedan kod slumpar fram en enda serie, med enda villkor att framslumpad "boll", inte får vara samma tal som tidigare "boll". Det går självklart att bygga på med fler villkor. Raden skrivs ut till det aktiva bladet i cellerna a1:g1

Mvh
Christian

Sub rndmLotto()

Dim intArr(6) As Integer
Dim i As Integer

For i = 0 To UBound(intArr)
intArr(i) = rdmNr(intArr)
Next i

Dim OutPutRange As Range: Set OutPutRange = ActiveSheet.Range("A1:G1")
OutPutRange.Value2 = intArr

End Sub
Function rdmNr(intArr As Variant) As Integer

Dim i As Integer, newRnd As Integer, NumberAlreadyExist As Boolean: NumberAlreadyExist = True

'Slumpar fram ett nummer mellan 1 och 27. Om numret som slumpas fram redan finns, så kör loopen en iteration till
While NumberAlreadyExist
NumberAlreadyExist = False
newRnd = (27 * Rnd) + 1
For i = 0 To UBound(intArr)
If intArr(i) = newRnd Then
NumberAlreadyExist = True
End If
Next i
Wend
rdmNr = newRnd

End Function

Nytt inlägg
 2019-12-14 17:44
 

 Hej Christian,

Antalet rader för lotto räknas ut med följand formel. 35!/(28!*7!) = 6.724.520 rader.

Och när jag sätter igång min "snurra" så landar jag på just detta radantal.

Detta visar att jag har fått med alla kombinationer.

Tanken är att jag ska kunna sätta upp lite olika förutsättningar och reducera raderna på det viset.

T.ex  antal jämna och udda nummer, antal nummer i rad etc..

mvh

Folke

 

Föregående Föregående
 
Nästa Nästa
ForumForumDiskussionerDiskussionerVBAVBATilldela variabler ett värdeTilldela variabler ett värde

PNG32 PNG32
Excelforum drivs av Excelspecialisten som bedriver utbildning i Excel och VBA, tillhandahåller support och hjälp med Excel, utvecklar program i Excel. Är ni i behov av en konsult inom Excel, VBA eller VSTO, eller söker en excelkurs, kontakta oss.
Copyright 2013 ExcelSpecialisten XLS AB   Användarvillkor  Personliga uppgifter