Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1536to1540
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

VBA Schleife schreiben - Essenswahl

VBA Schleife schreiben - Essenswahl
02.02.2017 18:57:06
Marcel
Hallo liebe Profis,
ich bin verzweifelt und hoffe auf eure Unterstützung.
Mein Problem stellt sich wie folgt dar:
Im 'Tabellenblatt4' möchte ich aus den Spalten 'F' bis 'BJ' immer dann den Zelleintrag aus Spalte 'D' auf dem 'Tabellenblatt5' eintragen lassen, wenn in der entsprechenden Zeile von 'F', 'G', 'H' usw. ein Wert größer 0 steht. Für eine Spalte bekomme ich auch schon eine Schleife hin, die mir das für wie gewünscht liefert (siehe unten). Leider fehlt mir die Kenntnis, wie ich die Schleife nun so erweitere, dass nach Spalte 'F' automatisch alle weiteren Spalten - bis BJ - ebenso in das entspreche (Ziel-)Tabellenblatt kopiert werden.
Ich hoffe, ich konnte mein Problem einigermaßen verständlich erklären.
Vielen Dank für eure Hilfe und mit freundlichen Grüßen
Marcel
Hier das Tabellenblatt aus dem die Werte entnommen werden sollen:
Userbild
Hier das Tabellenblatt in das die Werte eingefügt werden sollen:
Userbild
Hier der Code, der zumindest für die erste Spalte funktioniert:
Userbild

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Beipieldatei?
02.02.2017 19:01:25
Tino
Hallo,
Bilder machen kannst Du sehr gut! ;-)
Kannst du auch eine Beipieldatei hochladen und hier verlinken?
Gruß Tino
AW: Kannst mal testen
02.02.2017 21:10:15
Marcel
WOW TINO,
ich bin schwer beeindruckt! VIELEN DANK! Das ist (fast) genau was ich gesucht habe... Da ich aber später mehrere Teilnehmer untereinander habe, wäre es toll, wenn auch die Tage (bzw. das Datum der Tage) aufgelistet würde, an dem die Teilnehmer nichts bezahlt bzw. gekauft haben. sonst haben/hätten alle Teilneher eine unterschiedliche Spaltenzahl. Hast du auch dafür eine Lösung?
Nochmal, tausend Dank. Das hätte ich in der Komplexität so nie hinbekommen!
LG
Marcel
Anzeige
AW: Kannst mal testen
02.02.2017 21:37:07
Tino
Hallo,
ersetzen den Code durch diesen.
Sub TEST()
Dim ArData, ArSpeisen, NewAr()
Dim MaxRow&, MaxCol&
Dim oDic As Object

On Error GoTo ErrorHandler:

Set oDic = CreateObject("Scripting.Dictionary")

With Tabelle4
MaxRow = .Cells(.Rows.Count, 4).End(xlUp).Row
MaxCol = .Range("BJ1").Column
ArData = .Range("F3", .Cells(MaxRow, MaxCol))
ArSpeisen = .Range("D3", .Cells(MaxRow, 4))
End With

Application.ScreenUpdating = False
Application.EnableEvents = False

With Tabelle5
.UsedRange.EntireRow.Delete
For nn = Lbound(ArData, 2) To Ubound(ArData, 2)
For n = Lbound(ArData) + 1 To Ubound(ArData)
If ArData(n, nn) > 0 Then
If ArSpeisen(n, 1) <> "" Then
oDic(ArSpeisen(n, 1)) = oDic(ArSpeisen(n, 1)) + ArData(n, nn)
End If
End If
Next n
oDic("") = ""
If oDic.Count > 0 Then
NewAr = TransposeDic(oDic)
MaxCol = .Cells(2, .Columns.Count).End(xlToLeft).Column
If MaxCol > 1 Then MaxCol = MaxCol + 1

With .Cells(3, MaxCol).Resize(Ubound(NewAr), Ubound(NewAr, 2))
.Cells(1, 1).Offset(-2, 0).Value = ArData(1, nn)
.Cells(1, 1).Offset(-2, 0).NumberFormat = "yyyy/mm/dd"
.Cells(1, 1).Offset(-1, 0).Value = "Gereicht"
.Cells(1, 2).Offset(-1, 0).Value = "Bezahlt"
.Value = NewAr
.WrapText = False
Erase NewAr
End With
End If
oDic.RemoveAll
Next nn
With .UsedRange
For n = 2 To .Columns.Count Step 2
.Columns(n).Borders(xlEdgeRight).Weight = xlThin
Next
End With
.UsedRange.EntireColumn.AutoFit
End With

ErrorHandler:
Application.ScreenUpdating = True
Application.EnableEvents = True

If Err.Number <> 0 Then
MsgBox Err.Description, vbCritical, "Fehler: " & Err.Number
End If
End Sub

Function TransposeDic(oDic As Object)
Dim NewArray(), n&, nn&
Dim tmpAr
Redim Preserve NewArray(1 To oDic.Count, 1 To 2)
tmpAr = oDic.keys
For n = Lbound(tmpAr) To Ubound(tmpAr)
nn = nn + 1
NewArray(nn, 1) = tmpAr(n)
NewArray(nn, 2) = oDic(tmpAr(n))
Next
TransposeDic = NewArray
End Function
Gruß Tino
Anzeige
AW: Kannst mal testen
02.02.2017 21:43:51
Marcel
Das probiere ich gerne aus. Gebe dir morgen ein Feedback dazu. Super nett von dir! Danke für deine Zeit und Mühe!
AW: Kannst mal testen
03.02.2017 17:52:09
Marcel
Lieber Tino,
dein Code tut genau was er soll! Super!
Vielen herzlichen Dank!
Danke für die Rückmeldung oT.
03.02.2017 22:30:50
Tino
AW: Beipieldatei?
02.02.2017 19:41:25
Marcel
Lieber Tino,
hier die verkürzte Datei:
https://www.herber.de/bbs/user/111114.xlsm
Habe die eine wenig abspecken müssen und die ersten drei Tabellenblätter entfernt
Gruß Marcel
AW: VBA Schleife schreiben - Essenswahl
02.02.2017 19:03:44
Marcel
Hier nochmal etwas kleinere Screenshots
Userbild
Userbild
Userbild
Anzeige
AW: VBA Schleife schreiben - Essenswahl
02.02.2017 22:48:01
Piet
Hallo,
haettest du eine kleine Beispieldatei ins Forum gestellt zum DownLoad waere die Sache einfacher gewesen. Das Makro von einem Bild nachbauen ist mir zuviel Arbeit. Ich gebe dir aber einen Tipp zum Selbst basteln.
Die For Next Schleife für Spalte muss vor der For Next Schleife Zeile stehen! Am besten mit 0 beginnend. Dann addierst du in .Cells(Zeile,4/6) die Spalte dazu. Du must aber auch die Ziel-Adresse mit Offset verschieben, sonst kopierst du über den alten Bereich. Bastel mal selber bis es klappt. Vergiss bitte nicht den Punkt vor .Cells, der fehlt vor Copy in deinem Code!
mfg Piet

For Spalte = 0 To SpalteMax - 1
i = 3 'immer zurücksetzen !!
For Zeile = 4 To ZeileMax
If .Cells(Zeile, 6 + Spalte) > 0 Then
.Cells(Zeile, 4 + Spalte).Copy Destination ....
i = i + 1
Next Zeile
Next Spalte

Anzeige
AW: VBA Schleife schreiben - Essenswahl
02.02.2017 23:03:03
Piet
Hallo ?
Sorry, bin jetzt verwirrt! Habe garnicht gesehen das bereits zwei Beispieldateien als Lösung vorliegen. muss mir die Sache Morgen mal in Ruhe ansehen, wieso inmmer noch ScreenShot hochgeladen werden? Die sind aber wenig sinnvoll, eine Beispieldatei mit konkreter Lösung wie es sein soll ist besser. Habe mir gerade die Lösungen geladen, aber noch nicht angeschaut.
mfg Piet
AW: VBA Schleife schreiben - Essenswahl
03.02.2017 17:58:02
Marcel
Entschuldige bitte die Verwirrung, Piet.
Tino hat mir bereits sehr kompetent weitergeholfen, aber vielen Dank für deine Reaktion auf meine Fragestellung!
Lieben Gruß
Marcel

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige