Wert in variable Spalte und Zeile übernehmen
Hallo Zusammen
Ich muss wegen der hohen Komplexität eines Excel-Files, eine Eingabemaske erstellen. Darin wird der jeweilige Tag des Monats und die betreffende Position eingetragen bzw. ausgewählt.
Zusätzlich wird in einem Feld ein Nummerischer Wert eingetragen, welcher in ein bestimmtes Tabellenblatt übernommen werden soll.
Dieses Formular sieht also ungfähr so aus:
Tag: <13>
Position: <Guggus>
Wert: <3.5>
Die Tabelle in die der Wert (in diesem Falle 3.5) übernommen werden muss, sieht so aus:
Positionen | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 etc....bis max. 31
Nun soll das VBA Makro ausfindig machen auf welcher Zeile (anhand der Position) und in welcher Spalte (anhand des Tages) der Wert übernommen werden muss und tragt ihn dort ein.
Kann mir da jemand helfen?
Besten Dank schon im Voraus & Grüsse aus der Schweiz!
Andy
Ich muss wegen der hohen Komplexität eines Excel-Files, eine Eingabemaske erstellen. Darin wird der jeweilige Tag des Monats und die betreffende Position eingetragen bzw. ausgewählt.
Zusätzlich wird in einem Feld ein Nummerischer Wert eingetragen, welcher in ein bestimmtes Tabellenblatt übernommen werden soll.
Dieses Formular sieht also ungfähr so aus:
Tag: <13>
Position: <Guggus>
Wert: <3.5>
Die Tabelle in die der Wert (in diesem Falle 3.5) übernommen werden muss, sieht so aus:
Positionen | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 etc....bis max. 31
Nun soll das VBA Makro ausfindig machen auf welcher Zeile (anhand der Position) und in welcher Spalte (anhand des Tages) der Wert übernommen werden muss und tragt ihn dort ein.
Kann mir da jemand helfen?
Besten Dank schon im Voraus & Grüsse aus der Schweiz!
Andy
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 93528
Url: https://administrator.de/forum/wert-in-variable-spalte-und-zeile-uebernehmen-93528.html
Ausgedruckt am: 30.04.2025 um 14:04 Uhr
8 Kommentare
Neuester Kommentar
Hallo emotionmedia und willkommen im Forum!
Etwa so:
Deine Variablen habe ich, zu Testzwecken, in den ersten Zeilen festgelegt. Die Variable "Basis" enthält die Adresse der linken oberen Ecke Deiner Matrix (= erste Zelle der Überschriftszeile, Inhalt = "Positionen")
Gesucht wird in der Spalte "Positionen" so lange, bis die Zelle mit dem Inhalt der Variablen "Position" (ohne Berücksichtigung von Groß-/Kleinschreibung und ev am Anfang oder Ende enthaltenen Leerzeichen) oder eine leere Zelle gefunden wird.
Grüße
bastla
Etwa so:
Sub Eintrag()
Tag = 13
Position = "Guggus"
Wert = 3.5
Basis = "A3" 'erste Zelle der Überschrift
Zeile = Range(Basis).Row + 1
Spalte = Range(Basis).Column
Suchwert = Trim(LCase(Position))
Z = 0
Do While Cells(Zeile, Spalte).Value <> ""
If Trim(LCase(Cells(Zeile, Spalte).Value)) = Suchwert Then
Z = Zeile
Exit Do
End If
Zeile = Zeile + 1
Loop
If Z = 0 Then
MsgBox Position & " nicht gefunden!", vbCritical
Else
Cells(Z, Spalte + Tag).Value = Wert
End If
End Sub
Gesucht wird in der Spalte "Positionen" so lange, bis die Zelle mit dem Inhalt der Variablen "Position" (ohne Berücksichtigung von Groß-/Kleinschreibung und ev am Anfang oder Ende enthaltenen Leerzeichen) oder eine leere Zelle gefunden wird.
Grüße
bastla
Hallo emotionmedia!
Wenn Du "ferngesteuert" arbeitest, musst Du natürlich auch die Tabelle, in welche der Eintrag erfolgen soll, angeben:
Grüße
bastla
P.S.: Hier brauchst Du für die Formatierung als "Code" Tags mit "<" und ">" anstelle der eckigen Klammern.
Wenn Du "ferngesteuert" arbeitest, musst Du natürlich auch die Tabelle, in welche der Eintrag erfolgen soll, angeben:
Private Sub Entry(Arbeitsblatt As String)
Basis = "A5" 'erste Zelle der Überschrift
Tag = Worksheets("EINGABEMASKE").Range("B3").Value
Position = Worksheets("EINGABEMASKE").Range("B4").Value
Wert = Worksheets("EINGABEMASKE").Range("B6").Value
Zeile = Worksheets(Arbeitsblatt).Range(Basis).Row + 1
Spalte = Worksheets(Arbeitsblatt).Range(Basis).Column
Suchwert = Trim(LCase(Position))
With Worksheets(Arbeitsblatt)
Z = 0
Do While .Cells(Zeile, Spalte).Value <> ""
If Trim(LCase(.Cells(Zeile, Spalte).Value)) = Suchwert Then
Z = Zeile
Exit Do
End If
Zeile = Zeile + 1
Loop
If Z = 0 Then
MsgBox "Mitarbeiter Nr. " & Position & " nicht gefunden!", vbCritical
Else
.Cells(Z, Spalte + Tag).Value = Wert
End If
End With
End Sub
bastla
P.S.: Hier brauchst Du für die Formatierung als "Code" Tags mit "<" und ">" anstelle der eckigen Klammern.
Hallo emotionmedia!
Die funktionierende Version zu Deiner Testdatei würde so aussehen:
Zum Einen hast Du zum Testen die Variable "Basis" nicht angepasst, sondern die (Start-)Zeile konstant eingegeben - allerdings mit Wert 1, womit (da A1 leer ist) die Suche sofort beendet wurde, zum Anderen hast Du zuwenig Punkte gemacht (jeweils vor "Cells") ...
Grüße
bastla
Die funktionierende Version zu Deiner Testdatei würde so aussehen:
Private Sub Entry(Arbeitsblatt As String)
Basis = "A1" 'erste Zelle der Überschrift
Tag = Worksheets("EINGABEMASKE").Range("B3").Value
Position = Worksheets("EINGABEMASKE").Range("B4").Value
Wert = Worksheets("EINGABEMASKE").Range("B6").Value
Zeile = Worksheets(Arbeitsblatt).Range(Basis).Row + 1
' Zeile = 1
Spalte = Worksheets(Arbeitsblatt).Range(Basis).Column
Suchwert = Trim(LCase(Position))
With Worksheets(Arbeitsblatt)
Z = 0
Do While .Cells(Zeile, Spalte).Value <> ""
If Trim(LCase(.Cells(Zeile, Spalte).Value)) = Suchwert Then
Z = Zeile
Exit Do
End If
Zeile = Zeile + 1
Loop
If Z = 0 Then
MsgBox "Mitarbeiter Nr. " & Position & " nicht gefunden!", vbCritical
Else
.Cells(Z, Spalte + Tag).Value = Wert
End If
End With
MsgBox "DEBUG: Tag:" & Tag & ", Position:" & Position & ", Wert:" & Wert & ", Zeile:" & Zeile & ", Spalte:" & Spalte & ", Suchwert:" & Suchwert & ", Arbeitsblatt:" & Arbeitsblatt
End Sub
Grüße
bastla