Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1588to1592
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

Makro für markierte Spalten

Makro für markierte Spalten
13.11.2017 16:31:12
Lukas
Hallo liebes Forum, ich habe mal wieder ein kleines VBA-Problem und hoffe, dass ihr mir weiterhelfen könnt... Mein Makro sieht derzeit folgendermaßen aus:
Sub CopyValues()
Dim LetzteZeile As Long
Dim LetzteSpalte As Long
Dim i As Integer
Dim j As Integer
LetzteZeile = Cells(Rows.Count, 2).End(xlUp).Row    'findet die Letzte Zeile
LetzteSpalte = Cells(42, Columns.Count).End(xlToLeft).Column     'findet die Letzte Spalte
For i = 13 To LetzteZeile 'für Zeile 13 bis zur letzten
For j = 42 To LetzteSpalte 'für Spalte 42 bis zur letzten
If Rows(i).Hidden = False And Tabelle1.Cells(i, 2) = "ABC" Then 'Bedingungen: nur die  _
gefilterten Zeilen mit Eintrag OPL18 in Spalte 2
Sheets("Eins").Cells(i, j) = Sheets("Eins").Cells(i - 1, j) 'Wert aus der Zeile drüber  _
reinschreiben
End If
Next j
Next i
End Sub

Es wird also von Zeile 13 bis zur letzten und gleichzeitig von spalte 42 bis zur letzten, wenn die 2 Bedingungen erfüllt sind, jeweils die Werte aus der Zeile darüber reingeschrieben. Das funktioniert auch soweit sehr gut. Was ich nun an meinem Makro ändern möchte ist folgendes: Ich möchte, dass der oben gezeigte code nur für spalten gilt bzw. durchgeführt wird, die vorher händisch vom Benutzer markiert worden sind. Ich hoffe das ist soweit verständlich und ihr könnt mir dabei weiterhelfen... Beste Grüße

27
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Crossposting ohne Hinweis
13.11.2017 16:44:34
Werner
Hallo Lukas,
wenn schon in unterschiedlichen Foren gepostet, dann bitte mit entsprechendem Hinweis und mit Verlinkung der Beiträge in den unterschiedlichen Foren.
Gruß Werner
dann will ich mal nicht so sein.
13.11.2017 17:17:17
Werner
Hallo Lukas,
ungetestet:
Sub CopyValues()
Dim LetzteZeile As Long, ErsteSpalte As Long, LetzteSpalte As Long
Dim i As Long, j As Long
LetzteZeile = Cells(Rows.Count, 2).End(xlUp).Row    'findet die Letzte Zeile
ErsteSpalte = Selection.Columns(1).Column   'erste Spalte der Auswahl
LetzteSpalte = ErsteSpalte + Selection.Columns.Count - 1   'letzte Spalte der Auswahl
For i = 13 To LetzteZeile 'für Zeile 13 bis zur letzten
For j = ErsteSpalte To LetzteSpalte 'erste Spalte der Auswahl bis letzte Spalte der Auswahl
If Rows(i).Hidden = False And Tabelle1.Cells(i, 2) = "ABC" Then 'Bedingungen: nur die _
gefilterten Zeilen mit Eintrag OPL18 in Spalte 2
Sheets("Eins").Cells(i, j) = Sheets("Eins").Cells(i - 1, j) 'Wert aus der Zeile drüber _
reinschreiben
End If
Next j
Next i
End Sub
Gruß Werner
Anzeige
bitte auch in den anderen Foren
13.11.2017 17:19:03
Werner
Hallo Lukas,
auch in den anderen Foren einen entsprechenden Hinweis.
Gruß Werner
dann hab ich es mal für diech gemacht
13.11.2017 17:48:30
Werner
Hallo Lukas,
da du im VBA-Forum nach wie vor keinen Hinweis auf deinen Beitrag hier im Herber-Forum hast, hab ich es mal für dich gemacht - sollte eigentlich deine Sache sein.
Im Übrigen habe ich dir einen Lösungsvorschlag gepostet- ist der für dich uninteressant?
Gruß Werner
Anzeige
AW: dann hab ich es mal für diech gemacht
14.11.2017 08:58:05
Lukas
Besten Dank!
Habe es gestern Abend leider nicht mehr geschafft. Der Vorschlag ist super! Vielen Dank!
Es funktioniert jetzt für eine zusammenhängende Auswahl an Spalten.
Wie müsste ich den Code anpassen, wenn die Spalten nicht direkt nebeneinander sind, sondern evtl. Spalte 45, 47, 49 und 50?
AW: dann hab ich es mal für diech gemacht
14.11.2017 13:32:06
Werner
Hallo Lukas,
Option Explicit
Sub CopyValues()
Dim raBereich As Range, raZelle As Range
Dim loLetzteZeile As Long, i As Long, j As Long
loLetzteZeile = Cells(Rows.Count, 2).End(xlUp).Row
Set raBereich = Selection.Columns
For i = 13 To loLetzteZeile
For Each raZelle In raBereich
j = raZelle.Column
If Rows(i).Hidden = False And Tabelle1.Cells(i, 2) = "ABC" Then
Sheets("Eins").Cells(i, j) = Sheets("Eins").Cells(i - 1, j)
End If
Next raZelle
Next i
Set raBereich = Nothing
End Sub
Gruß Werner
Anzeige
AW: dann hab ich es mal für diech gemacht
15.11.2017 11:04:05
Lukas
Hallo Werner,
besten Dank für deine Hilfe!
Funktioniert super!
Da habe ich wieder etwas gelernt! :)
AW: dann hab ich es mal für diech gemacht
15.11.2017 12:47:29
Lukas
Ich habe noch ein weiteres Makro in der gleichen Datei.
Auch hier stehe ich leider noch vor einem Problem.
ich würde gerne aus den einzelnen markierten Spalten eine Summe bilden und die mittels .formula in einer for-schleife in folgenden variablen Zellen schreiben:
Tabelle1.Cells(i, 1).Formula =
leider fehlt mir hierfür jegliches Vorstellungsvermögen, wie ich das umsetzen kann.
Jemand eine Idee?
Nachfrage zum neuen Problem
15.11.2017 13:58:00
Werner
Hallo Lukas,
Summe für alle Spalten zusammen oder für jede separat. Und wohin mit dem Ergebnis?
Gruß Werner
Anzeige
AW: Nachfrage zum neuen Problem
15.11.2017 14:12:34
Lukas
Hallo Werner,
Also das Ergebnis soll mittels Formel in die erste Spalte jeweils in die Zeile i.
Die Summe soll gebildet werden aus den Werten der zugehörigen Zeile i aber eben nur für die vorher angewählten bzw. markierten Spalten.
Gruß
AW: Nachfrage zum neuen Problem
15.11.2017 15:09:00
Werner
Hallo Lukas,
sind die ausgewählten. Spalten auch immer gleich weit befüllt?
Lade mal eine Beispielmappe hoch oder zeig zumindest mal den. Code den du bisher hast.
Gruß Werner
AW: Nachfrage zum neuen Problem
15.11.2017 15:34:47
Lukas
Hallo Werner,
ich habe leider keinen Code bisher.
Ich dachte man könnte das auf Basis des Codes, den Du mir geschrieben hast noch erweitern.
Ich versuche es nochmal zu erklären:
In Spalte A soll für jede Zeile ab Zeile 13 bis zum Ende der Zeilen eine Summe für jede Zeile gebildet werden. Diese Summe für jede Zeile soll allerdings nur aus den vorher manuell markierten Spalten gebildet werden.
Die Formel für die Summe soll eben per VBA in die Cells(i, 1) reingeschrieben werden.
Anzeige
AW: Nachfrage zum neuen Problem
15.11.2017 18:31:56
Werner
Hallo Lukas,
warum eine Formel, die Summe der markierten Spalten kann man auch direkt im Makro ausrechnen und in die Zelle schreiben.
Gruß Werner
AW: Nachfrage zum neuen Problem
16.11.2017 11:31:44
Lukas
Hallo Werner,
Ja das ist genau das was ich brauche. In der Spalte 1 soll für die jeweilige Zeile einfach die Summe für die markierten Spalten der jeweiligen Zeile errechnet werden. Egal ob da eine Formel dann drinsteht oder nur das Ergebnis.
Gruß
AW: Nachfrage zum neuen Problem
16.11.2017 11:47:36
Werner
Hallo Lukas,
hier der Code. Habe das jetzt über Eintrag der Formel gemacht. Im Anschluss wird dann die Formel durch den jeweiligen Wert ersetzt. Am Ende steht dann nur das reine Ergebnis in der Zelle.
Public Sub aaa()
Dim raBereich As Range, raZelle As Range
Dim loLetzteZeile As Long, i As Long, j As Long
Dim strZellbereich As String
loLetzteZeile = Cells(Rows.Count, 2).End(xlUp).Row
Set raBereich = Selection.Columns
Application.ScreenUpdating = False
For i = 13 To loLetzteZeile
For Each raZelle In raBereich
j = raZelle.Column
If strZellbereich = vbNullString Then
strZellbereich = Cells(i, j).Address
Else
strZellbereich = strZellbereich & ";" & Cells(i, j).Address
End If
Next raZelle
Cells(i, 1).FormulaLocal = "=SUMME(" & strZellbereich & ")"
strZellbereich = ""
Next i
Range(Cells(13, 1), Cells(loLetzteZeile, 1)).Value = Range(Cells(13, 1), Cells(loLetzteZeile, 1) _
).Value
Set raBereich = Nothing
Application.ScreenUpdating = True
End Sub
Gruß Werner
Anzeige
AW: Nachfrage zum neuen Problem
17.11.2017 09:43:46
Lukas
Hi Werner,
besten Dank für den Code. Funktioniert bestens!
Verstehe leider nicht alles davon, aber ich werde mal versuchen es zu verstehen.
Gruß Lukas
AW: Nachfrage zum neuen Problem
17.11.2017 10:52:47
Lukas
Werner,
mittlerweile gehe ich dir wahrscheinlich ziemlich auf den Keks... :D
Ich muss allerdings nochmal mein Problem erweitern, weil ich durch den Code nicht gänzlich durchsteige..
Wie müsste ein Code aussehen, wenn ich statt:
Cells(i, 1).FormulaLocal = "=SUMME(" & strZellbereich & ")"
dort den Durchschnitt berechnen wollen würde.
Also die Summe geteilt durch die Anzahl der markierten Spalten?
Gruß Lukas
Anzeige
AW: Nachfrage zum neuen Problem
17.11.2017 12:50:21
Werner
Hallo Lukas,
dann so:
Cells(i, 1).FormulaLocal = "=MITTELWERTA(" & strZellbereich & ")"
Gruß Werner
AW: Nachfrage zum neuen Problem
17.11.2017 15:12:49
Lukas
ok, da hätte ich auch selbst drauf kommen können:D
wie schafft man es dann noch, dass alles was #Div/0! wird als leer oder 0 darzustellen?
AW: Nachfrage zum neuen Problem
17.11.2017 18:50:54
Werner
Hallo Lukas,
so:
Cells(i, 1).FormulaLocal = "=WENNFEHLER(MITTELWERTA(" & strZellbereich & ");"""")"
Gruß Werner
AW: Nachfrage zum neuen Problem
18.11.2017 10:13:58
Lukas
Hallo Werner,
manchmal sieht man den Wald vor lauter Bäumen nicht :D
Komischerweise hängt sich das Makro mittlerweile auf. Es bleibt dann immer bei Zellbereich = "" stehen.
Weißt du woran es liegen könnte?
Vorallem hat es ja perfekt funktioniert und ich habe mMn nichts geändert
Anzeige
AW: Nachfrage zum neuen Problem
18.11.2017 10:19:25
Lukas
und es funktioniert in einer vereinfachten Datei :/
AW: Nachfrage zum neuen Problem
18.11.2017 10:45:56
Lukas
ok hat sich erledigt. Irgendwo stand in den Werten, die summiert werden sollten ein Div/0. Das hat scheinbar Probleme bereitet.
na dann ist ja gut. o.w.T.
18.11.2017 11:29:19
Werner
Gerne und Danke für die Rückmeldung o.w.T
15.11.2017 13:54:00
Werner

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige