Registriert seit: 13.09.2017
Version(en): 2013
Moin,
ich habe folgendes vor und kenne mich leider noch nicht genug mit VBA aus:
In den Zellen A10:A374 steht das Datum (01.01. bis 31.12.) und in der Zelle zwei danaeben (also Splate C) steht eine Formel, in der ein Wert geändert werden soll.
Ich habe dafür drei Inputboxen:
datebeginn (hier wird das Anfangsdatum eingegeben, als String definiert? oder als Date?)
dateende (hier wird das Enddatum eingegeben, als String definiert? oder als Date?)
datestd (hier wird die Tagesstundenzahl eingegeben, als String definiert? oder als Integer?)
Nun soll das Makro die Zelle mit dem Anfangsdatum in der Spalte A suchen und diesen Wert + 2 Spalten (also von Spalte A auf C) als Range speichern (dafür habe ich Dim beginn As Range), das gleiche dann mit dem Enddatum (Dim ende As Range).
Dann soll die Zelle beginn ausgewählt werden, dort die Formel angepasst werden, der Bereich beginn bis ende ausgewählt und per Selection.Autofill Destinatiion:=Range("&beginn&:&ende&"), Type:=xlFillDefault gefüllt werden.
Die Formel kann glaube ich so ähnlich übernommen werden:
ActiveCell.FormulaR1C1 = "=IF (RC[-2]="""","""",IF(RC[-1]=""X"",0,&datestd&))"
ausgeschrieben würde die Formel in Excel so heißen und in der Spalte C stehen:
=WENN(A10="";"";WENN(B10="X";0;$H$4/5)) -> diesen $H$4/5-Wert würde ich gerne durch datestd ersetzen lassen
Ich hoffe, einer von euch kann meine Gedanken verstehen und mir hierbei helfen. Schon mal vielen Dank für eure Gedanken und Hilfestellungen.
Bis dahin
Gecko
Registriert seit: 13.09.2017
Version(en): 2013
Ich habe mal ein wenig probiert und komme zumindest etwas weiter, nur schaffe ich die weiteren Schritte nicht:
Ich habe mir erstmal ein Makro gebastelt, dass die eingetragenen Werte der InputBox mit den Werten in der Tabelle abgleicht und mir die Zelle zurück gibt. Diese müsste ich nun verändern (in diesem Fall von Spalte AR auf Spate C), hier aber erstmal mein Anfang, das gleiche kann man dann auch mit dem Enddatum machen:
Code: Sub Finden ()
Dim rng As Range
Dim sAdress As String
Dim sFind As String
Dim beginn As Range
sFind = Inputbox("Datum:")
sFind = CDate(sFind)
Set rng = Range("AR:AR").Find(What:=CDate(sFind)) 'in AR stehen die Daten im richtigen Vergleichsformat, in A steht das Datum in einem anderen Format
' jetzt müsste rng so verändert werden, dass aus der Spalte AR -> C wird
' nur für Testzwecke, damit man ü+berprüfen kann, ob der rng richtig ist
If Not rng Is Nothing Then
sAdress = rng.Adress
MsgBox (rng.Adress)
Else
MsgBox ("Wert nicht gefunden")
End If
End Sub
Registriert seit: 13.09.2017
Version(en): 2013
und wieder ein Stück weiter, aber jetzt kommt der Teil mit dem Formeländern und dem neuen Range, hier aber erstmal mein neuer Stand:
Code: Sub Finden ()
Dim rng As Range
Dim sFind As String
Dim beginn As Range
sFind = Inputbox("Datum:")
sFind = CDate(sFind)
Set rng = Range("AR:AR").Find(What:=CDate(sFind)) ' in AR stehen die Daten im richtigen Vergleichsformat, in A steht das Datum in einem anderen Format
rng.Activate ' jetzt müsste rng so verändert werden, dass aus der Spalte AR -> C wird
ActiveCell.Offset(rowOffset:=0, ColumnOffset:=-41).Activate ' damit steht der Coursor in der richtigen Zelle, jetzt muss die Formel dort angepasst werden
' nur für Testzwecke, damit man überprüfen kann, ob der rng richtig ist
If Not rng Is Nothing Then
MsgBox Selection.Adress
MsgBox Selection.Adress(ReferenceStyle:=xlR1C1) 'für die Formeländerung gedacht
Else
MsgBox ("Wert nicht gefunden")
End If
End Sub
Registriert seit: 13.09.2017
Version(en): 2013
wieder ein Stück weiter:
Code: Sub Finden ()
Dim rngbeginn As Range
Dim sFindBeginn As String
Dim beginn As Range
Dim rngende As Range
Dim sFindEnde As String
Dim ende As Range
Dim stdAlt As String
sFindBeginn = InputBox("Anfangsdatum:")
sFindBeginn = CDate(sFindBeginn)
sFindEnde = InputBox("Enddatum:")
sFindEnde = CDate(sFindEnde)
stdAlt = InputBox("alte Tagesstundenzahl:")
Set rngende = Range("AR:AR").Find(What:=CDate(sFindEnde))
rngende.Select
Selection.Offset(rowOffset:=0, ColumnOffset:=-41).Select
Set ende = Selection.Range.Value 'hier wird der Fehler liegen, hier soll der Range-Wert, der Zelle hinterlegt werden
Set rngbeginn = Range("AR:AR").Find(What:=CDate(sFindBeginn))
rngbeginn.Select
Selection.Offset(rowOffset:=0, ColumnOffset:=-41).Select
Set beginn = Selection.Range.Value 'hier wird der Fehler liegen, hier soll der Range-Wert, der Zelle hinterlegt werden
ActiveCell.Replace What:="$H$4/5", Replacement:=stdAlt, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
'Selection.AutoFill Destination:=Range("&beginn&:&ende&"), Type:=xlFillDefault ' hier wird der nächste fehler sein, da ich beginn und ende so nicht in den Range bekomme
Range("A1").Select
End Sub
also einmal nur meine Problemstellen:
Code: Set ende = Selection.Range.Value 'hier wird der Fehler liegen, hier soll der Range-Wert, der Zelle hinterlegt werden
Code: Selection.AutoFill Destination:=Range("&beginn&:&ende&"), Type:=xlFillDefault ' hier wird der nächste fehler sein, da ich beginn und ende so nicht in den Range bekomme
Veilleicht kann mir ja irgendwer dabei helfen, sitze jetzt schon den ganzen Tag dran und langsam ist der Kopf voll
Registriert seit: 13.09.2017
Version(en): 2013
mal wieder etwas weiter:
Code: Sub Finden()
Dim rngbeginn As Range
Dim sFindBeginn As String
Dim beginn As Range
Dim rngende As Range
Dim sFindEnde As String
Dim ende As Range
Dim stdAlt As String
sFindBeginn = InputBox("Anfangsdatum:")
sFindBeginn = CDate(sFindBeginn)
sFindEnde = InputBox("Enddatum:")
sFindEnde = CDate(sFindEnde)
stdAlt = InputBox("alte Tagesstundenzahl:")
Set rngende = Range("AR:AR").Find(What:=CDate(sFindEnde))
rngende.Select
Selection.Offset(rowOffset:=0, ColumnOffset:=-41).Select
Set ende = Selection
Set rngbeginn = Range("AR:AR").Find(What:=CDate(sFindBeginn))
rngbeginn.Select
Selection.Offset(rowOffset:=0, ColumnOffset:=-41).Select
Set beginn = Selection
ActiveCell.Replace What:="$H$4/5", Replacement:=stdAlt, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.AutoFill Destination:=Range("&beginn&:&ende&"), Type:=xlFillDefault ' hier wird der fehler sein, da ich beginn und ende so nicht in den Range bekomme
Range("A1").Select
End Sub
hier liegt nun die letzte Schwierigkeit:
Code: Selection.AutoFill Destination:=Range("&beginn&:&ende&"), Type:=xlFillDefault ' hier wird der fehler sein, da ich beginn und ende so nicht in den Range bekomme
Registriert seit: 13.09.2017
Version(en): 2013
Code: Sub Finden()
Dim rngbeginn As Range
Dim sFindBeginn As String
Dim beginn As Range
Dim rngende As Range
Dim sFindEnde As String
Dim ende As Range
Dim stdAlt As String
Dim bereich As Range
sFindBeginn = InputBox("Anfangsdatum:")
sFindBeginn = CDate(sFindBeginn)
sFindEnde = InputBox("Enddatum:")
sFindEnde = CDate(sFindEnde)
stdAlt = InputBox("alte Tagesstundenzahl:")
Set rngende = Range("AR:AR").Find(What:=CDate(sFindEnde))
rngende.Select
Selection.Offset(rowOffset:=0, ColumnOffset:=-41).Select
Set ende = Selection
Set rngbeginn = Range("AR:AR").Find(What:=CDate(sFindBeginn))
rngbeginn.Select
Selection.Offset(rowOffset:=0, ColumnOffset:=-41).Select
Set beginn = Selection
Set bereich = Range(beginn.Address, ende.Address)
ActiveCell.Replace What:="$H$4/5", Replacement:=stdAlt, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.AutoFill Destination:=Range(bereich.Address), Type:=xlFillDefault
Range("A1").Select
End Sub
|