Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1816to1820
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 Daten durch Formel eintragen

VBA Daten durch Formel eintragen
11.03.2021 16:50:39
Alex
Hallo zusammen,
ich bin leider ein VBA-Anfänger...
im Prinzip möchte ich eine Art Kalender bauen, in dem in alle nicht gefärbten Zellen durch ein vba-script die Zahl 8 eingetragen wird.
Userbild
Die Wochenenden habe ich mithilfe der bedingten Formatierung rot gefärbt:
ODER(WOCHENTAG(DATUM(JAHR($B8);MONAT($B8);TAG(C$6)))=1;WOCHENTAG(DATUM(JAHR($B8);MONAT($B8);TAG(C$6)))=7)
Nun muss ich ich ja eigentlich nur diese Formel mit einem ungleich operator benutzen, um in den entsprechenden nicht gefärbten Zellen einen Inhalt einzufügen.
Aber wie mache ich das?

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

Betreff
Datum
Anwender
Anzeige
AW: VBA Daten durch Formel eintragen
11.03.2021 17:11:16
Sigi.21
Hallo Alex,
du hast es richtig erkannt; das Gegengeil deiner Formel ist es. Aber warum mit VBA?
Nimm doch eine einfache Formel: =WENN( NICHT( DeineFormel); 8; "")
Gruß
Sigi

AW: VBA Daten durch Formel eintragen
11.03.2021 17:27:33
Yal
...dann nur noch alles kopieren und durch Wert ersetzen, da sonst überall eine Formel drin ist.
Unter Makro recorder machen, und dann hast Du es.
Deine bedingte Formatierung hätte mit
=WOCHENTAG($B8-Tag($B8)+C$6;2)>2)
dasselbe Ergebnis.
Datum sind Zahlen. Jeden Tag mehr ist "+1". Wichtig ist dabei nur, dass ein gültige Datum ($B8) als Basis genommen wird.
VG
Yal

Anzeige
AW: VBA Daten durch Formel eintragen
11.03.2021 17:28:29
Alex
Hallo Sigi,
erstmal danke für deine Antwort.
Das ist nur ein Auszug aus dem Projekt - ich muss später einiges in VBA umsetzen - um es zu vereinfachen, habe ich es nun so dargestellt.
Ist es möglich durch VBA die Daten in die Zellen einzutragen?
Ich habe schon versucht das Problem über die Hintergrundfarbe zu lösen , allerdings läässt sich die farbe der bedingten formatierung ja nicht auslesen - bzw. stilvoll ist dsa ja auch nicht:D

AW: VBA Daten durch Formel eintragen
11.03.2021 17:46:33
Yal
Hallo Alex,
ungefähr so?
Sub Nummer8_einfügen()
Const cDatumSpalte = 2 '2 für B, 3:C, usw
Dim Z As Long 'Zeile
Dim S As Long 'Spalte
Dim Z1, Z2 'nicht notwendige Variable, aber bessere ebrsicht
Dim d As Integer
With Worksheets("xyz")
Z1 = .Cells(100000, cDatumSpalte).End(xlUp).End(xlUp).Row
Z2 = .Cells(100000, cDatumSpalte).End(xlUp).Row
For Z = Z1 To Z2
d = Application.WorksheetFunction.Weekday(.Cells(Z, cDatumSpalte), 2)
For S = cDatumSpalte + 1 To cDatumSpalte + 30
.Cells(Z, S) = IIf(d + S - cDatumSpalte > 5, 8, "")
Next
Next
End With
End Sub
VG
Yal

Anzeige
AW: VBA Daten durch Formel eintragen
11.03.2021 18:27:29
Alex
Hallo Yal,
vielen Dank für deine Mühe - das Ergebnis daraus zeigt einige mehr achten als ich wollte, aber damit kann ich mir sicherlich etwas zusammenbasteln, danke:)
Userbild

AW: VBA Daten durch Formel eintragen
11.03.2021 18:57:44
Alex
Hallo nochmal,
ich versuche gerade alles nachzuvollziehen, um es entsprechend ändern zu können.
Vllt hast du Zeit meine Leihenfragen zu beantworten - evtl muss ich aber doch eher noch einige tuts machen, bevor ich mich dran wage.
Warum 100000? Z1 = .Cells(100000, cDatumSpalte).End(xlUp).End(xlUp).Row
Einfach eine hohe Zahl, weil der eh zu der Zeile springt, in der den ersten Eintrag findet?
warum 2x End(xlUp)? Einmal Zeile eins weiter anch oben und einmal Spalte eins weiter?
Danke

Anzeige
AW: VBA Daten durch Formel eintragen
12.03.2021 10:19:09
Yal
Hallo Alex,
na, klar, ich Id.. ich dachte ich kann eine Abkürzunge nehmen.
Richtig wäre:
     For Z = Z1 To Z2
For s = cDatumSpalte + 1 To cDatumSpalte + 30
.Cells(Z, s) = IIf(Application.WorksheetFunction.Weekday(.Cells(Z, cDatumSpalte) -  _
cdatumstpalte + 1, 2) > 5, 8, "")
Next
Next

(ich habe nur die For-Schleife angepasst. An der richtigen Stelle ersetzen)
Zu deine Fragen
Warum 100000? Z1 = .Cells(100000, cDatumSpalte).End(xlUp).End(xlUp).Row
Einfach eine hohe Zahl, weil der eh zu der Zeile springt, in der den ersten Eintrag findet?
--> Genau. Es simuliert den Strg+Pfeil nach oben: es springt zum nächste Block.
warum 2x End(xlUp)? Einmal Zeile eins weiter anch oben und einmal Spalte eins weiter?
--> mit dem ersten springt es auf dem 01.20.2022 in B22 (übrigens gut, dass Du in diesem Screenshot die Spalten- und Zeilennummerierung mitgebracht hast), mit den zweiten springt es auf 01.08.2021 in B8. Gäbe es eine Leerzelle dazwischen, würde es nicht funktionieren.
VG
Yal

Anzeige
AW: VBA Daten durch Formel eintragen
12.03.2021 13:37:37
Alex
Hallo Yal,
vielen Dank für deine Bemühungen - wirklich sehr nett.
Leider funktioniert es immer noch nicht so recht:
Userbild
Ich habe schon selber etwas rumgebastelt - ich versuche im mom die Weekday-Funktion mit der Datefunktion zu kombinieren, um die richtigen Tage zu erwischen - bin mir aber nicht sicher ob das überhaupt notwendig ist.
Vor allem wird mir übel, wenn ich daran denke, dass ich die Feiertage und die Monatsenden in Zukunft auch noch berücksichtigen muss. Mit Excel kein Problem - die bedingte Formatierung kann ich an den entsprechenden Stellen mit Formeln setzen - aber das in VBA umzutexten fällt mir etwas schwer.

Anzeige
AW: VBA Daten durch Formel eintragen
12.03.2021 17:23:24
Yal
Hallo Alex,
Verflix nochmal. Nicht "+1" sondern "+ s" (es könnte auch +s+1 sein. Habe nicht nachgebaut)
     For Z = Z1 To Z2
For s = cDatumSpalte + 1 To cDatumSpalte + 30
.Cells(Z, s) = IIf(Application.WorksheetFunction.Weekday(.Cells(Z, cDatumSpalte) -  _
_
cdatumstpalte + s, 2) > 5, 8, "")
Next
Next
VG
Yal

AW: VBA Daten durch Formel eintragen
13.03.2021 13:00:21
Alex
Hallo Yal,
wahnsinn - so hat es fast funktioniert, danke!:)
Ich habe einfach noch eine Oder Verknüpfung gemacht:

.Cells(Z, S) = IIf(Application.WorksheetFunction.Weekday(.Cells(Z, cDatumSpalte) -  _
cdatumstpalte + S + 1, 2) >= 5 _
Or Application.WorksheetFunction.Weekday(.Cells(Z, cDatumSpalte) - cdatumstpalte + S + 1, 2) 

Habe versucht, dass mit dem zweiten Parameter der Weekday-Funktion zu verändern, aber das wollte der iwie nicht.
Vielen Dank - das ist top, um darauf aufzubauen.
Als nächstes muss ich noch anpassen, dass der abhängig von der Anzahl der Monate nur die Spalten entsprechend dieser Anzahl ausfüllt - aber da probiere ich mich erstmal selber dran.
LG
Alex
Weil der

Anzeige
Vielen Dank für die Rückmeldung.
14.03.2021 23:39:07
Yal
"aber da probiere ich mich erstmal selber dran."
Mit dieser Einstellung bekommst Du hier immer Hilfe.
VG
Yal

AW: VBA Daten durch Formel eintragen
11.03.2021 17:46:47
onur
" ich muss später einiges in VBA umsetzen" - wenn du aber bei so etwas schon Hilfe brauchst, wer schreibt dir denn den Rest des Codes ?

AW: VBA Daten durch Formel eintragen
11.03.2021 18:30:37
Alex
Hallo Onur,
ja das ist eine gute Frage - ich habe mir einiges angelesen, aber das Projekt wird wohl doch etwas schwieriger umzusetzen, als ich mir das anfangs vorgestellt habe.
Danke:(

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige