Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Wert in variable Spalte und Zeile übernehmen

Frage Microsoft Microsoft Office

Mitglied: emotionmedia

emotionmedia (Level 1) - Jetzt verbinden

04.08.2008, aktualisiert 27.08.2008, 7400 Aufrufe, 8 Kommentare

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
Mitglied: bastla
04.08.2008 um 15:02 Uhr
Hallo emotionmedia und willkommen im Forum!

Etwa so:
01.
Sub Eintrag() 
02.
Tag = 13 
03.
Position = "Guggus" 
04.
Wert = 3.5 
05.
 
06.
Basis = "A3" 'erste Zelle der Überschrift 
07.
 
08.
Zeile = Range(Basis).Row + 1 
09.
Spalte = Range(Basis).Column 
10.
 
11.
Suchwert = Trim(LCase(Position)) 
12.
Z = 0 
13.
Do While Cells(Zeile, Spalte).Value <> "" 
14.
    If Trim(LCase(Cells(Zeile, Spalte).Value)) = Suchwert Then 
15.
        Z = Zeile 
16.
        Exit Do 
17.
    End If 
18.
    Zeile = Zeile + 1 
19.
Loop 
20.
If Z = 0 Then 
21.
    MsgBox Position & " nicht gefunden!", vbCritical 
22.
Else 
23.
    Cells(Z, Spalte + Tag).Value = Wert 
24.
End If 
25.
End Sub
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
Bitte warten ..
Mitglied: emotionmedia
05.08.2008 um 15:24 Uhr
Hallo Bastla

Vielen Dank schonmal für Deine super Aufstellung. Versuche das nun gerade zu adaptieren.
Nun habe ich noch eine ganz blöde Frage dazu:

Ich möchte z.B. die Variable Position setzen. Dazu mache ich grundsätzlich:

Position = Range("B4").Value

Doch nun ist es so, dass das Eingabeformular auf einer Tabelle ist und die die Variable "Wert" auf eine andere hin transportiert werden muss. Demnach gehe ich davon aus, dass ich ja noch irgendwie die speziefischen Blätter ansprechen muss. Damit das Script weiss von welchem Blatt die Zelle B4 zu nehmen ist.

Wie mache ich das noch?

Grüsse,
emotionmedia
Bitte warten ..
Mitglied: bastla
05.08.2008 um 15:29 Uhr
Hallo emotionmedia!

Um "Tabelle1" anzusprechen, wäre die Schreibweise:
01.
Position = Worksheets("Tabelle1").Range("B4").Value
Grüße
bastla
Bitte warten ..
Mitglied: emotionmedia
26.08.2008 um 09:13 Uhr
Hallo Bastla!
Ich habe nun intensiv versucht das Script lauffähig zu bringen. Leider bisher ohne Erfolg. Der Mitarbeiter resp. seine MA-Nummer wird in der Tabelle nicht gefunden.
Mein Script sieht nun folgendermassen aus:

[CODE]
Public Sub EingabeUbernehmen()
' Makro am 04.08.2008 von ARE geschrieben
' Version 0.1
'
' Definition der benötigten Variabeln
Dim Spalte As String
' Prüfen ob Pflichtfelder ausgefüllt sind
' Wenn B2 == 1 = gut
If (Range("B2").Value = 1) Then
' Übernahme in "Hausm"-Tabelle
If (Range("B6").Value <> "") Then
Entry "test"
End If
Range("C20").Value = "Daten von " & Range("C4").Value & " übernommen"
Else ' Wenn Pflichtfelder nicht vollständig
Range("C20").Value = "Pflichtfelder nicht vollständig"
End If
End Sub

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))
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 Sub
[/CODE]

Es kommt immer die vbCritical-Meldung "Mitarbeiter Nr. 9 nicht gefunden", obwohl die Nr. 9 in der Tabelle "test" vorhanden ist...

Gruss schon im Voraus für jede Hilfe...
Andy
Bitte warten ..
Mitglied: bastla
26.08.2008 um 14:22 Uhr
Hallo emotionmedia!

Wenn Du "ferngesteuert" arbeitest, musst Du natürlich auch die Tabelle, in welche der Eintrag erfolgen soll, angeben:
01.
Private Sub Entry(Arbeitsblatt As String) 
02.
Basis = "A5" 'erste Zelle der Überschrift 
03.
 
04.
Tag = Worksheets("EINGABEMASKE").Range("B3").Value 
05.
Position = Worksheets("EINGABEMASKE").Range("B4").Value 
06.
Wert = Worksheets("EINGABEMASKE").Range("B6").Value 
07.
 
08.
Zeile = Worksheets(Arbeitsblatt).Range(Basis).Row + 1 
09.
Spalte = Worksheets(Arbeitsblatt).Range(Basis).Column 
10.
Suchwert = Trim(LCase(Position)) 
11.
 
12.
With Worksheets(Arbeitsblatt) 
13.
    Z = 0 
14.
    Do While .Cells(Zeile, Spalte).Value <> "" 
15.
        If Trim(LCase(.Cells(Zeile, Spalte).Value)) = Suchwert Then 
16.
            Z = Zeile 
17.
            Exit Do 
18.
        End If 
19.
        Zeile = Zeile + 1 
20.
    Loop 
21.
    If Z = 0 Then 
22.
        MsgBox "Mitarbeiter Nr. " & Position & " nicht gefunden!", vbCritical 
23.
    Else 
24.
        .Cells(Z, Spalte + Tag).Value = Wert 
25.
    End If 
26.
End With 
27.
End Sub
Grüße
bastla

P.S.: Hier brauchst Du für die Formatierung als "Code" Tags mit "<" und ">" anstelle der eckigen Klammern.
Bitte warten ..
Mitglied: emotionmedia
27.08.2008 um 09:55 Uhr
Hallo bastla

Leider funktioniert's noch immer nicht. Aus irgendeinem Grund bleibt der Wert Z ständig bei 0 (durchsucht die Zeilen nicht...). Der Einfachheit halber habe ich mal mein File unter folgender Adresse hinauf geladen:

http://public.me.com/emotainment

Gruss,
emotionmedia
Bitte warten ..
Mitglied: bastla
27.08.2008 um 10:20 Uhr
Hallo emotionmedia!

Die funktionierende Version zu Deiner Testdatei würde so aussehen:
01.
Private Sub Entry(Arbeitsblatt As String) 
02.
    Basis = "A1" 'erste Zelle der Überschrift 
03.
 
04.
    Tag = Worksheets("EINGABEMASKE").Range("B3").Value 
05.
    Position = Worksheets("EINGABEMASKE").Range("B4").Value 
06.
    Wert = Worksheets("EINGABEMASKE").Range("B6").Value 
07.
 
08.
   Zeile = Worksheets(Arbeitsblatt).Range(Basis).Row + 1 
09.
' Zeile = 1 
10.
    Spalte = Worksheets(Arbeitsblatt).Range(Basis).Column 
11.
    Suchwert = Trim(LCase(Position)) 
12.
     
13.
    With Worksheets(Arbeitsblatt) 
14.
        Z = 0 
15.
        Do While .Cells(Zeile, Spalte).Value <> "" 
16.
            If Trim(LCase(.Cells(Zeile, Spalte).Value)) = Suchwert Then 
17.
                Z = Zeile 
18.
                Exit Do 
19.
            End If 
20.
            Zeile = Zeile + 1 
21.
        Loop 
22.
        If Z = 0 Then 
23.
            MsgBox "Mitarbeiter Nr. " & Position & " nicht gefunden!", vbCritical 
24.
        Else 
25.
            .Cells(Z, Spalte + Tag).Value = Wert 
26.
        End If 
27.
    End With 
28.
MsgBox "DEBUG: Tag:" & Tag & ", Position:" & Position & ", Wert:" & Wert & ", Zeile:" & Zeile & ", Spalte:" & Spalte & ", Suchwert:" & Suchwert & ", Arbeitsblatt:" & Arbeitsblatt 
29.
End Sub
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
Bitte warten ..
Mitglied: emotionmedia
27.08.2008 um 11:29 Uhr
Wow, nun funktioniert's perfekt!!
Vielen herzlichen Dank für Deine super Hilfe - Du bist ja ein wahrer VB-Crack!!

Lieben Gruss aus der Schweiz!!
Andy aka emotionmedia
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung!

(1)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
gelöst Variable über Wert aussuchen (2)

Frage von CreatorX zum Thema Batch & Shell ...

Batch & Shell
Wert in Registry suchen und in Variable speichern (2)

Frage von J.Troll zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (15)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Backup
Clients als Server missbrauchen? (10)

Frage von 1410640014 zum Thema Backup ...