PDA

Vollständige Version anzeigen : Bestimmte Matrix erstellen


reality20004
14.07.2014, 17:25
Hallo Leute,

ich (VBA-Anfänger) habe folgendes als Aufgabe:

Ich soll eine quadratische Matrix erstellen; Angefangen wird dann mit der Zahl 1 und die nachfolgenden Zahlen soll sich dann um K (hier 2) erhöhen. Als Lösung soll dann z.b. folgendes rauskommen:

1 7 usw...

3 9

5 11

Angefangen habe ich mal so:

Sub Test(n, k)
Dim A()
ReDim A(n, n)
For i = 1 To n
For j = 1 To n
A(1, 1) = 1
<strong>A(i, j) = A(i - 1, j) + k</strong>
Next j
Next i
Call arrayPrint(A)
End Sub

Damit habe ich zwar die erste Spalte richtig, ab der zweiten passt der Code natürlich nicht mehr. Wie schaffe ich es denn nun das zb. A(1,2) = A(3,1) + k (dh. hier 7) ist?

Vielen Dank schon mal!

Mc Santa
14.07.2014, 17:44
Hallo,

was hälst du davon:

Sub su()
Dim n As Long, k As Long
n = 3
k = 2
Dim a()
ReDim a(n - 1, n - 1)
Dim l, i, j As Long
l = 1
For i = 0 To n - 1
For j = 0 To n - 1
a(j, i) = l
l = l + k
Next j
Next i
Range("A1").Resize(n, n) = a
End Sub

VG

EarlFred
14.07.2014, 17:46
Hallo,

oder, wenn Du unnötig viele Codezeilen genauso wenig magst wie ich, dann vielleicht so?

Sub eineZeileReichtAuch(n As Integer, k As Integer)
Dim A As Variant
A = Evaluate("=1+" & k & "*(ROW(" & Cells(1, 1).Resize(n, n).Address & ")-1)+" & n & "*" & k & "*(COLUMN(" & Cells(1, 1).Resize(n, n).Address & ")-1)")
End Sub

Grüße
EarlFred

reality20004
14.07.2014, 18:08
Erstmal vielen Dank für Eure Antworten.

@McSanta
Danke, funktioniert. Aber wieso hast du ein "l" eingebaut? Ich weiß nicht, ob ich das darf ?

@EarlFred
Das funktioniert zwar, aber da wir gerade bei den Anfängen von VBA sind und ich die Aufgabe mittels Array lösen soll, kann ich diese dann nicht nehmen.


Hier mal die komplette Angabe:
Test (n,k) creates an n by n array (an array with n rows and n columns) where, starting with the value 1, each subsequent cell is increased by k and the matrix is traversed by column.

EarlFred
14.07.2014, 18:27
Hallo,

Das funktioniert zwar
das ist die Hauptsache :D

Das war eher eine Spielerei ;) Nicht allzu ernst nehmen.

Grüße
EarlFred