ich führe eine Excelliste in der täglich einige Zeilen hinzugefügt werden.
In dieser Liste habe ich eine Spalte B definiert, in der ich mittels der Funktion "Anzahl2" die Anzahl der nicht leeren Zellen zählen lasse. Diesen Wert lasse ich mir in Zelle A10 anzeigen.
Je mehr Zeilen hinzugefügt werden bei dem die Spalte B keinen Inhalt hat, erhöht sich der Wert in Zelle A10.
Soweit so gut.
Nun möchte ich mir gerne zu jedem Monatsersten diesen Wert in Zelle A10 automatisch wegschreiben lassen. Am besten in einem neuen Tabellenblatt.
Das Ergebnis sollte in etwa so aussehen:
1.1.2018 56
1.2.2018 72
1.3.2018 86
1.4.2018 112
Ich hoffe mich einigermaßen ausgedrückt zu haben und hoffe auf den ein oder anderen Lösungsansatz.
In der Auflistung stehen keine Daten, da ich diese nicht benötige.
Der Wert in i1 wird ja von Zeit zu Zeit größer, je mehr Zeilen eingefügt werden wo in Spalte D leer bleibt.
Ich benötige eine Lösung, wo ich diesen "Wachstum" historisch nachverfolgen kann.
Ich könnte mir diesen zu jedem Monatsersten manuell eintragen, aber genau dies würde ich vermeiden.
Sprich, wenn ich die Datei am 1.4. öffne, soll Excel den aktuellen Wert von i1 lesen und wegschreiben.
am 1.5. dann wieder.
Moin,
da du eine recht "klassische" Excel-Versio besitzt würde ich folgenden Weg gehen: Am ersten Arbeitstag des Monats die Datei öffnen und unter dem entsprechenden Namen speichern. Mit VBA wäre mir das viel zu viel Aufwand. Nimm doch beispielsweise einmal den nächsten Ersten, der ja ein Sonntag ist. Und ach ja, der 2.4. ist ja auch ein Feiertag ...
Beste Grüße Günther
Excel-ist-sexy.de …schau doch mal rein! Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
11.03.2018, 16:43 (Dieser Beitrag wurde zuletzt bearbeitet: 11.03.2018, 16:43 von Kuwer.)
Hallo fvento,
folgender VBA-Code kommt in das schon vorhandene VBA-Modul 'DieseArbeitsmappe':
Private Sub Workbook_Open()
Dim datMonat As Date
Dim datMax As Date
datMonat = DateSerial(Year(Date), Month(Date), 1)
With Worksheets("Monatsliste") 'das ist das Listenarbeitsblatt
datMax = Application.Max(.Columns(1))
If datMonat > DateSerial(Year(datMax), Month(datMax), 1) Then
With .Cells(.Rows.Count, 1).End(xlUp)
.Offset(1, 0).Value = Date
.Offset(1, 1).Value = Worksheets("Tabelle1").Range("I1").Value
End With
End If
End With
End Sub
Die Datei musst Du dann aber als Excel-Arbeitsmappe mit Makros (*.xlsm) speichern.
Hallo,
ich habe Dir eine ganz einfache Variante erstellt. Diese erzeugt im aktuellen Verzeichnis ein Sub-Verzeichnis "Backup" und speichert jeden 1. des Monats ein Testfile hinein in dem nur steht "11.03.2018 Sicherung = 6";
Der VBA-Code kommt in das schon vorhandene Modul "DieseArbeitsmappe":
Code:
Private Sub Workbook_Open()
Dim StrPath As String
Dim FN As String
Dim nFileNr As Long
Dim Data As String
Application.ScreenUpdating = False
On Error Resume Next
If Dir(ActiveWorkbook.Path & "\Backup", vbDirectory) = "" Then
MkDir ActiveWorkbook.Path & "\Backup"
End If
If Day(Date) = 11 Then
StrPath = ActiveWorkbook.Path & "\Backup\"
FN = Format(Date, "dd.mm.yyyy") & "_Sicherung.txt"
If Dir(StrPath & FN, vbNormal) = "" Then
nFileNr = FreeFile
Open StrPath & FN For Output As #nFileNr
Data = Format(Date, "dd.mm.yyyy") & " Sicherung = " & Tabelle1.Range("I1").Value
Print #nFileNr, Data
Close nFileNr
End If
End If
End Sub
Grüße aus Nürnberg
Armin
Ich benutze WIN 10 (64bit) und Office 19 (32bit)