Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
628to632
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
628to632
628to632
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Was macht dieser Code?

Was macht dieser Code?
28.06.2005 20:43:40
Maxine
Hallöchen allerseits!
Hier meldet sich ein echtes VBA Greenhorn und bittet um eure Hilfe. Ich belege derzeit einen VBA Kurs an der Uni und habe dafür Übungsaufgaben bekommen. Problem ist nur, dass ich selbst aus den Lösungen nicht ganz schlau werde.
Folgendes Beispiel ist der Code für das Invertieren einer Matrix, das von Worksheet 1 in Worksheet 2 gelesen werden soll:

Sub Matrix()
Dim zz As Integer, sz As Integer
For zz = 1 To 15
For sz = 1 To 8
Worksheets(2).Cells(sz, sz) = Worksheets(1).Cells(zz, sz)
Next sz
Next zz
End Sub

Kann mir evtl. jemand erklären, warum der Code so ist und nicht anders? Wie kommt man auf die einzelnden Schritte und was wird bei jedem Schritt eigentlich gemacht?
Wäre auch super, wenn mir jemand erklären könnte, wann man immer For-Next-Schleifen verwendet...
Herzlichen Dank!!
Maxine

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

Betreff
Datum
Anwender
Anzeige
Invertieren einer Matrix
Christoph
Hallo Maxine
ich vermute, dass in deinem Code ein Schreibfehler ist
"Worksheets(2).Cells(sz, sz) = Worksheets(1).Cells(zz, sz)"
bringt dir nämlich nur die Diagonale der Matrix, aber keine Invers-Matrix
Zum Verständnis erzeugst du dir am Besten eine Beispieldatei mit dem folgenden Aufbau:
Tabelle1 (Bereich A1 Bis H15):
A1 B1 C1 D1 E1 F1 G1 H1
A2 B2 C2 D2 E2 F2 G2 H2
A3 B3 C3 D3 E3 F3 G3 H3
A4 B4 C4 D4 E4 F4 G4 H4
A5 B5 C5 D5 E5 F5 G5 H5
A6 B6 C6 D6 E6 F6 G6 H6
A7 B7 C7 D7 E7 F7 G7 H7
A8 B8 C8 D8 E8 F8 G8 H8
A9 B9 C9 D9 E9 F9 G9 H9
A10 B10 C10 D10 E10 F10 G10 H10
A11 B11 C11 D11 E11 F11 G11 H11
A12 B12 C12 D12 E12 F12 G12 H12
A13 B13 C13 D13 E13 F13 G13 H13
A14 B14 C14 D14 E14 F14 G14 H14
A15 B15 C15 D15 E15 F15 G15 H15
anschließend lässt du diesen (korrigierten) Code ablaufen:
Das Ergebnis (die Invers-Matrix) siehst du in Tabelle2
Gruß
Christoph
Option Explicit
Sub Matrix()
Dim zz As Integer, sz As Integer 'zz = ZeilenZähler, sz = Spaltenzähler
For zz = 1 To 15  'von Zeile 1 bis 15
For sz = 1 To 8   'von Spalte 1 bis 8
'Tabelle2.Zelle(Zeile=sz, Spalte=zz) = Tabelle1.Zelle(Zeile=zz, Spalte=sz)
Worksheets(2).Cells(sz, zz) = Worksheets(1).Cells(zz, sz)
Next sz  'nächster Spaltenzähler
Next zz  'nächster ZeilenZähler
End Sub

Anzeige
AW: Was macht dieser Code?
28.06.2005 22:14:20
Nepumuk
So geht's:
Public Sub Matrix()
    Worksheets(2).Range("A1:O8") = WorksheetFunction.Transpose(Worksheets(1).Range("A1:H15"))
End Sub

Gruß
Nepumuk
For Next Schleifen
28.06.2005 22:38:42
Maxine
Hallo Nepumuk, Hallo Christoph!
Danke erstmal für eure Antworten. Hab mir doch gedacht, dass da irgendwas nicht stimmt im Code! ;) Jetzt ist mir das Ganze ein bisschen klarer geworden....
Ich wäre euch sehr dankbar, wenn ihr noch ein paar Worte zu For Next Schleifen verlieren könntet. Was z.B. ist der Unterschied zu Do Loop Schleifen? In welchen Situationen verwende ich eher For Next statt Do Loop?
LG, Maxine
Anzeige
AW: For Next Schleifen
28.06.2005 22:50:37
Nepumuk
Hi,
eine For - Next Schleife hat einen Startwert, einen Endwert und eine Schrittweite. Do -Loop Schleifen laufen so lange, bis eine Bedingung erreich wird. Diese kann in der Startzeile, der Endzeile oder mitten drin sein. Des weiteren gibt es noch While - Wend Schleifen, in der die Bedingung in der Startzeile steht. Diese kann nicht mittendrin abgebrochen werden. For - Next Schleifen können mit Exit For, Do - Loop Schleifen können mit Exit Do abgebrochen werden. Gib einfach mal Loop in einem Modul ein, markiere das Wort und drücke auf F1. Ist alles ganz gut beschieben. Dort auch mal auf "Siehe auch" klicken.
Gruß
Nepumuk
Anzeige
AW: For Next Schleifen
28.06.2005 22:53:28
Nepumuk
Ups,
es gibt, üm Objektauflistungen zu durchlaufen, auch noch For Each - Next Schleifen. Das kommt aber erst im zweiten Kapitel dran. :-)
Gruß
Nepumuk
AW: For Next Schleifen
28.06.2005 22:52:32
Christoph
Hi Maxine,
"For - Next" heißt: du hast einen Zähler für die Schleife. Du weißt also, wo du anfangen und wo du enden willst

Sub TestForNext()
Dim i as Integer
For i = 1 To 5
MsgBox 1
Next    'Zähler wird automatisch weiter hochgezählt
Bei "Do Loop" kennst du die Anzahl nicht. Du willst die Schleife durchlaufen, solange deine Bedingung erfüllt ist.

Sub TestDoLoop()
Dim i as Integer
Do Until i = 5
MsgBox i
i = i + 1   'Zähler manuell hochsetzen
Loop
End Sub


Gruß
Christoph
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige