Registriert seit: 28.12.2018
Version(en): 365
26.11.2019, 20:00
(Dieser Beitrag wurde zuletzt bearbeitet: 26.11.2019, 20:01 von r4mun.)
Guten Abend allerseits,
ich beschäftige mich in letzter Zeit recht intensiv mit vba.
Und komme wiedermal nicht weiter.
Wir produzieren an 2 Linien, 365 Tage im Jahr auf 3 Schichten. Derzeit werden die Stückzahlen auf einen Schmierzettel (Kein Witz) aufgeschrieben.
Nun, ich bin soweit um die Stückzahlen zu erfassen und möchte diese nun zur weiteren Verarbeitung auf ein Tabellenblatt aufgelistet bekommen.
Aktuell habe ich eine Liste mit 365 Tagen, in 2x3 Spalten habe ich 2 Produktionslinien und 3 Schichten. Mein Problem ist - ich weiss wie ich etwas in Zelle via vba eintrage, oder kopiere etc - ist auch nicht schwer. Doch kann man nun eben die "Range" in row und column zerlegen?
So als Beispiel
Worksheets("LinieII").Range("e56") = sTxt
Nur soll es eben nicht in e56 sondern das entsprechende datum das in einer Zelle angezeigt wird, suchen und die passende Spalte dafür nehmen. Für die meisten ist das vermutlich ein klacks :22:
Registriert seit: 11.04.2014
Version(en): Office 2007
Gruß Stefan Win 10 / Office 2016
Registriert seit: 12.03.2016
Version(en): Excel 2003/ 2016
Hallo Stefan hat schon gut erkalert wie man an Zeilen und Spalten herankommt. Ich empfehle den Suchlauf über Set zu machen. Dazu ein Codeschnippsel zum Verstaendnis wie das funktioniert. Mit Set MTG wurde das Sheet definiert. Der Suchlauf über Set gibt einen Wert zurück, wenn er erfolgreich war. Deshalb: İf Not mtFind is Nothing Then Bei mtFind kann man mit mtFind.Row die gefundene Zeile ermitteln, und auch die Spalte über mtFind.Column. Benutzt man zum Adressieren die Cells Methode, schreibt der Code unten das Ergebnis in die angegeben Spalte. z.B. "E". Die kann auch statt "E" als Zahl angegeben werden: Cells(mtFindRow, 5) Ich hoffe es hilft weiter VBA im Detail zu verstehen. Auf Select von Sheets und Range sollte man bitte verzichten, ist nicht nötig!mfg Gast 123 Code: Sub test() Set MTG = Worksheets("Mitglieder") Datum = MTG.Range("B2").Value 'Sucht in Mitglieder die richtige Zeile in Spalte B Set mtFind = MTG.Columns("B").Find(What:=Datum, After:=[b2], LookIn:= _ xlFormulas, LookAt:=xlWhole, SearchDirection:=xlNext, MatchCase:=False) If Not mtFind Is Nothing Then MTG.Cells(mtFind.Row, "E") = sTxt End If End Sub
Registriert seit: 28.12.2018
Version(en): 365
26.11.2019, 21:59
(Dieser Beitrag wurde zuletzt bearbeitet: 26.11.2019, 21:59 von r4mun.)
Uffa - wird schon noch. Also finden scheint zu klappen. Beim wert einfügen happert es noch. Ist alles noch ziemlich Neuland für mich :) Derzeit sieht es so aus. Code: Sub Dateneinfügen() Dim zelleS As Range Dim bereichS As Range Dim datum As Date
datum = Range("n4")
Set bereichS = Sheets("Daten").Range("B:B") Set zelleS = bereichS.Find(what:=Date, LookAt:=xlWhole, LookIn:=xlValues) i = zelleS.Row MsgBox "erfolg" cells(i.3) = 2 End Sub
Hiermit versuche ich grade das datum zu suchen. Zeile sollte i sein und daneben einfach nur ne 2 reinschreiben. Klappt jedoch nicht.
*update Code: Sub Dateneinfügen() Dim zelleS As Range Dim bereichS As Range Dim datum As Date
datum = Range("n4")
Set bereichS = Sheets("Daten").Range("B:B") Set zelleS = bereichS.Find(what:=Date, LookAt:=xlWhole, LookIn:=xlValues) i = zelleS.Row MsgBox "erfolg" Sheets("Daten").Range("c" & i).Value = Range("l4") End Sub
scheint zu tun, Datum macht er richtig, wie gehe ich nun mit der spalte vor? :100: dafür müsste ich ja das "c" ersetzen.
Registriert seit: 12.03.2016
Version(en): Excel 2003/ 2016
Hallo
Wenn die Zieladresse direkt daneben ist bietet sich die Offset Methode an. Offset(0, 1) setzt den Wert von der gefundenen Zeile aus um eine Spalte nach rechts. Offset(0, 2) um zwei Spalten nach rechts. Für Zeilen Offset(1, 0) um eine Zeile nach unten, usw. Offset(1, 1) ist Diagonal. Bei Minus Zahl Spalte nach Links Zeile nach Oben. Hat man die Methode verstanden ist es sehr einfach Werte in andere Zellen zu laden.. zelle5.Offset(0, 1).Value = sTxt
mfg Gast 123
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo, (26.11.2019, 21:59)r4mun schrieb: *update
Code: Sub Dateneinfügen() Dim zelleS As Range Dim bereichS As Range Dim datum As Date
datum = Range("n4")
Set bereichS = Sheets("Daten").Range("B:B") Set zelleS = bereichS.Find(what:=Date, LookAt:=xlWhole, LookIn:=xlValues) i = zelleS.Row MsgBox "erfolg" Sheets("Daten").Range("c" & i).Value = Range("l4") End Sub
scheint zu tun, Datum macht er richtig, wie gehe ich nun mit der spalte vor? :100: dafür müsste ich ja das "c" ersetzen. wenn das Datum nicht gefunden wird, gibt es bei deinem Code Fehler. Dafür benötigst Du das von Gast 123 erwähnte If Not
Gruß Stefan Win 10 / Office 2016
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo, (26.11.2019, 21:59)r4mun schrieb: scheint zu tun, Datum macht er richtig, wie gehe ich nun mit der spalte vor? :100: dafür müsste ich ja das "c" ersetzen. vielleicht so mit einer Abfrage nach der Spalte? Code: Sub Dateneinf?gen() Dim zelleS As Range Dim bereichS As Range Dim datum As Date Dim i As Long Dim strSpalte As String datum = Range("n4") Set bereichS = Sheets("Daten").Range("B:B") Set zelleS = bereichS.Find(what:=Date, LookAt:=xlWhole, LookIn:=xlValues) If Not zelleS Is Nothing Then i = zelleS.Row MsgBox "erfolg" strSpalte = Application.InputBox("In welcher Spalte soll der wert eingetragen werden?", "Spaltenauswahl", "C", Type:=2) If strSpalte <> "Falsch" Then Sheets("Daten").Range(strSpalte & i).Value = Range("l4").Value End If End Sub
Gruß Stefan Win 10 / Office 2016
Registriert seit: 28.12.2018
Version(en): 365
27.11.2019, 12:26
(Dieser Beitrag wurde zuletzt bearbeitet: 27.11.2019, 12:26 von r4mun.)
Code: Sub Dateneinfügen1() Dim zelleS As Range Dim bereichS As Range Dim datum As Date
datum = Range("n4")
Set bereichS = Sheets("Daten").Range("B:B") Set zelleS = bereichS.Find(what:=Date, LookAt:=xlWhole, LookIn:=xlValues) i = zelleS.Row a = Range("l8") MsgBox "gut" Sheets("Daten").Range(a & i).Value = Range("l4") Call Dateneinfügen2 End Sub
Wo liegt hier der Fehler? Bleibt bei Sheets("Daten").Range(a & i).Value = Range("l4") stehen. die msgbox dient nur zur diagnose
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo,
was enthält die Variable a? Und ich würde dem Range I4 bzw I8 jeweils noch ein Value anhängen.
Gruß Stefan Win 10 / Office 2016
Registriert seit: 11.04.2014
Version(en): Office 2003 - Office 2007 - Office 365
Zudem fehlt für i und a der Dim
Lg Marcus
Wissen ist Macht - es ist aber nicht schlimm nicht alles zu wissen. Man muss nicht alles wissen - man muss nur wissen wo es steht, oder wo man Hilfe bekommt.
|