Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Array mit 2000 Quadatzahlen

Forumthread: Array mit 2000 Quadatzahlen

Array mit 2000 Quadatzahlen
alifa
Hallo Forum,
wie kann man ein Array mit den ersten 2000 Quadratzahlen füllen? Geht das überhaupt? Also die Zahlen sind dann: 1,4,9,16.....3992004,3996001,4000000 oder 1,4,9,4^2,....1998^2,1999^2,2000^2. Kann man die Zahlen in Spalte A schreiben und dann für das Array aufrufen?
Danke im Voraus
Erhard
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Array mit 2000 Quadatzahlen
27.01.2011 11:26:07
Rudi
Hallo,
wieso sollte das nicht gehen?
Sub Quadrate()
Dim arrQ(1 To 2000), i As Integer
For i = 1 To 2000
arrQ(i) = i ^ 2
Next
End Sub

Gruß
Rudi
AW: Array mit 2000 Quadatzahlen
27.01.2011 12:17:24
Martin
Hallo Rudi,
wenn du in die letzte Zeile vor dem End Sub folgende Zeile schreibst...
 Range("A1:A2000") = Application.Transpose(arrQ)

...dann stehen alle Werte in Spalte A. Das war zwar nicht die Fragestellung, aber beim Level "Kaum Excel/VBA-Kenntnisse" wollte ich es doch erwähnen.
Viele Grüße
Martin
Anzeige
AW: Array mit 2000 Quadatzahlen
27.01.2011 13:25:26
alifa
es ist etwas komplizierter...
das Array ist in einem Makro eingebunden. Dieses bildet alle 2-er Kombinationen, die Folgendes erfüllen:
s=a^2+b^2; a und b sind Teile einer Kombination. Z.B. 5525=7^2+74^2=14^2+73^2...
Für die Kombination braucht man ein Zahlenpool. Wie beim Lotto, dort alle Zahlen von 1 bis 49. In meinem Makro die Quadratzahlen von 1 bis 2000. Dafür brauche ich das Array. Hier der Link.
https://www.herber.de/bbs/user/73277.xlsm
VG
Erhard
Anzeige
hab kein 2007 owT
27.01.2011 13:46:59
Rudi
AW: hab kein 2007 owT
27.01.2011 14:43:28
Reinhard
Hallo Rudi,
Blätter sind völlig leer, in einem Standardmodul ist nachfolgender Code.
@Alifa
änder mal
Dim vSrc()
...
vSrc() = v ^ 2
in
Dim vSrc(1999)
...
vSrc(v - 1) = v ^ 2
Gruß
Reinhard
Option Explicit
Sub KombiMitArray()
Dim i As Long, u As Double, lngR As Long, lngSum As Long
Dim n As Byte, k As Byte, j As Long, s, t!, v
Dim vSrc()
t = Timer
For v = 1 To 2000
vSrc() = v ^ 2
Next
For s = 10000 To 20000
k = 2
n = 2001
u = (n / 2) * (n - 1)
ReDim vRes(k - 1)
ReDim bPos(k - 1) As Byte
For i = 1 To k
bPos(i - 1) = i
Next
Application.ScreenUpdating = False
With ActiveSheet
For i = 1 To u
lngSum = 0
For j = 0 To UBound(bPos)
vRes(j) = vSrc(bPos(j) - 1)
lngSum = lngSum + vRes(j)
Next
If lngSum = s Then
lngR = lngR + 1
.Range(.Cells(lngR, 1), .Cells(lngR, k)).Value = vRes
Cells(lngR, 3) = s
End If
Call GetComb(n, k, bPos)
Next
End With
Next
Application.ScreenUpdating = True
MsgBox "fertig in " & Round(Timer - t, 2) & " Sek "
End Sub
Sub GetComb(ByVal n As Byte, ByVal k As Byte, bPos() As Byte)
Dim i As Byte, j As Byte
i = k - 1
Do While bPos(i) >= n - k + i + 1
If i = 0 Then Exit Do
i = i - 1
Loop
bPos(i) = bPos(i) + 1
For j = i To k - 1
bPos(j) = bPos(i) + j - i
Next
End Sub

Anzeige
AW: hab kein 2007 owT
27.01.2011 17:52:20
alifa
Hallo,
das klappt jetzt!!!
Vielen Dank für die kompetente Hilfe!!!
Erhard
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige