Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1524to1528
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
Inhaltsverzeichnis

Code verbessern

Code verbessern
25.11.2016 16:08:06
Sev
Hi, ich habe mir zur Verteilung der Werte von 1-100, die in einer bestimmten Reihenfolge A1:A100 stehen, in ein Raster ein Makro gebastelt. Ich muss die Werte in einer bestimmten Weise sortieren.
Erstens ist jedem Wert in der gleichen Zeile der Spalte B noch ein zweiter Wert von 1-5 zugeordnet. Damit wird die Zielzeile (k) im Raster (1-5) bestimmt. Die Zielspalte (w) ergibt sich aus dem Wert in Spalte A. Aber es soll nach jeweils 20 Positionen ein "Zeilenumbruch" erfolgen, sprich der Wert 21 soll nicht in Spalte 21 stehen, sondern wieder in Spalte 1, aber in Zeile 7-12 (je nach k) usw.
Das Makro macht schon genau das, was ich will. Mich interessiert als Laien aber, ob und wie man _ den if-Code verbessern kann oder es eine geeignetere Lösung gibt. Die Erhöhung von k und w dient jeweils dazu, in meinem Raster die richtige Position zu finden.

Sub Raster()
Dim i As Long
Dim w As Long
Dim k As Long
For i = 1 To 100
w = Range("A" & i).Value
k = Range("B" & i).Value
If w 

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Code verbessern
25.11.2016 16:56:08
ransi
Hallo Sev,
Schau dir mal "select case" an.
ransi
AW: Code verbessern
25.11.2016 17:09:04
Luschi
Hallo Hallo Sev,,
gute Tipps zur 'Select Case' findest Du hier:
https://www.akademie.de/wissen/vba-select-case-bessere-if-funktion
Gruß von Luschi
aus klein-Paris
AW: Code verbessern
25.11.2016 18:54:16
Michael
Hi,
wenn man sich nur mal um die Werte kümmert:
Sub RasterArray()
Dim i As Long
Dim w As Long
Dim k As Long
Dim a, z As Long, s As Long
a = Range("A1:B100")
For i = 1 To 100
w = a(i, 1)
k = a(i, 2)
If w 

läßt sich schön eine Farbe einfügen, damit man sieht, was passiert.
Daraus ergibt sich mit etwas Rechnerei:
Sub Raster0()
Dim i As Long
Dim w As Long
Dim k As Long
Dim a, z As Long, s As Long
a = Range("A1:B100")
For i = 1 To 100
w = a(i, 1)
k = a(i, 2)
s = -Int((w - 1) / 20) * 20 + 4 + w
z = Int((w - 1) / 20) * 6 + 5 + k
Cells(z, s) = w
Cells(z, s).Interior.Color = vbGreen
Next i
End Sub

oder ganz abstrakt...
Sub Raster_M()
Dim i As Long
Dim a
a = Range("A1:B100")
For i = 1 To 100
Cells(Int((a(i, 1) - 1) / 20) * 6 + 5 + a(i, 2), _
-Int((a(i, 1) - 1) / 20) * 20 + 4 + a(i, 1)) = a(i, 1)
Next i
End Sub
Mit den Zahlen je von 1:100 in A und B macht das das Gleiche wie das Original.
Schöne Grüße,
Michael
Anzeige
AW: Code verbessern
25.11.2016 19:09:16
Sev
@Luschi, ransi: Danke, werde ich mir anschauen.
@michael: Wow, vielen Dank!
gern geschehen, und...
26.11.2016 17:04:02
Michael
Sev,
flexibler wird es noch mit
For i = 1 To ubound(a)

dann werden alle Zeilen, die im Array a vorhanden sind, abgearbeitet.
Happy exceling,
Michael

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige