Excel VBA Sverweis nach klick auf Button
Hallo,
ich habe leider so gut wie gar keine Ahnung von Excel VBA muss aber ein Makro bis ende nächster Woche fertig stellen. Hab mir ein Buch "Excel VBA" von Bernd Held geholt und auch schon einiges gelesen. Leider wird die Zeit knapp und ich habe bis jetzt nicht das gefunden was ich benötige. Daher hoffe ich hier auf Hilfe.
Also ich arbeite mit Microsoft Excel 2007 und möchte folgendes mit einem Makro realisieren.
Ich habe eine Excel-Liste mit Kundendaten, nächste Woche haben wir eine Hausmesse und es soll notiert werden welche Kunden da waren und mit wie viel Personen. Die Hausmesse geht über 2 Tage.
Was ich mir jetzt gedacht habe:
In ein Feld wird die Kundennummer eingetragen so werden alle benötigten Daten zum Kunden per SVERWEIS ausgegeben.
In ein anderes Feld soll die Anzahl der Personen eingetrgen werden, die der Kunde mitbringt.
Es soll jetzt einen Button geben, der ein Makro aufruft, welches die bereits eingegebene Kundennummer nimmt und diese in der Matrix sucht und einige Zellen weiter rechts die Anzahl der Personen ausgibt.
Könnte mir da jemand helfen oder einige Infos geben?
Danke sehr.
ich habe leider so gut wie gar keine Ahnung von Excel VBA muss aber ein Makro bis ende nächster Woche fertig stellen. Hab mir ein Buch "Excel VBA" von Bernd Held geholt und auch schon einiges gelesen. Leider wird die Zeit knapp und ich habe bis jetzt nicht das gefunden was ich benötige. Daher hoffe ich hier auf Hilfe.
Also ich arbeite mit Microsoft Excel 2007 und möchte folgendes mit einem Makro realisieren.
Ich habe eine Excel-Liste mit Kundendaten, nächste Woche haben wir eine Hausmesse und es soll notiert werden welche Kunden da waren und mit wie viel Personen. Die Hausmesse geht über 2 Tage.
Was ich mir jetzt gedacht habe:
In ein Feld wird die Kundennummer eingetragen so werden alle benötigten Daten zum Kunden per SVERWEIS ausgegeben.
In ein anderes Feld soll die Anzahl der Personen eingetrgen werden, die der Kunde mitbringt.
Es soll jetzt einen Button geben, der ein Makro aufruft, welches die bereits eingegebene Kundennummer nimmt und diese in der Matrix sucht und einige Zellen weiter rechts die Anzahl der Personen ausgibt.
Könnte mir da jemand helfen oder einige Infos geben?
Danke sehr.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 135609
Url: https://administrator.de/contentid/135609
Ausgedruckt am: 22.11.2024 um 21:11 Uhr
20 Kommentare
Neuester Kommentar
Ich versuche mal simsons Vorschlag zu erklären.
Eigentlich ganz einfach.
Du nimmst die Tabelle mit den Firmennamen.
In Spalte A schreibst du die Firmennamen und in Spalte B die Anzahl der Besucher.
Und jetzt zu deiner Frage.
Sverweis kann dir zwar die Kundendaten anzeigen aber du wirst (meines Wissens) über Sverweis nichts an einer Datenbank ändern.
Du hast (aus meiner Sicht) zwei Möglichkeiten.
1. Du nutzt die Suchenfunktion (Strg+F) in Verbindung mit dem Vorschlag von simsons.
Diese Möglichkeit ist eigentlich am einfachsten.
2. a) Du schreibst ein VBA Makro mit UserFormen.
In die UserForm gibst du die Kundennummer ein und die Anzahl der Besuche. Nach dem Bestätigen sucht das Programm automatisch nach der Kundennummer und trägt in in die entsprechende Zeile die Anzahl an Besucher ein.
2. b) Das gleiche ohne UserForm einfach mit Inputboxen bzw. MsgBoxen.
Ich denke jedoch, dass deine Kenntnisse vllt. mit diesem Programm etwas überfordert werden
Ich finde die erste Möglichkeit so oder so am einfachsten.
Solltes du jedoch ein solches Programm benötigen kann ich schauen ob ich es noch bis dahin schaffe. Ich kann es jedoch nicht versprechen.
Gruß
duffman521
Eigentlich ganz einfach.
Du nimmst die Tabelle mit den Firmennamen.
In Spalte A schreibst du die Firmennamen und in Spalte B die Anzahl der Besucher.
Und jetzt zu deiner Frage.
Sverweis kann dir zwar die Kundendaten anzeigen aber du wirst (meines Wissens) über Sverweis nichts an einer Datenbank ändern.
Du hast (aus meiner Sicht) zwei Möglichkeiten.
1. Du nutzt die Suchenfunktion (Strg+F) in Verbindung mit dem Vorschlag von simsons.
Diese Möglichkeit ist eigentlich am einfachsten.
2. a) Du schreibst ein VBA Makro mit UserFormen.
In die UserForm gibst du die Kundennummer ein und die Anzahl der Besuche. Nach dem Bestätigen sucht das Programm automatisch nach der Kundennummer und trägt in in die entsprechende Zeile die Anzahl an Besucher ein.
2. b) Das gleiche ohne UserForm einfach mit Inputboxen bzw. MsgBoxen.
Ich denke jedoch, dass deine Kenntnisse vllt. mit diesem Programm etwas überfordert werden
Ich finde die erste Möglichkeit so oder so am einfachsten.
Solltes du jedoch ein solches Programm benötigen kann ich schauen ob ich es noch bis dahin schaffe. Ich kann es jedoch nicht versprechen.
Gruß
duffman521
Hallo Sanjo!
Der Zusammenhang zwischen Deinem Makro und Deiner Beispieltabelle erschließt sich mir nicht so ganz?
Steht denn in dem unteren Teil die gesamte Liste mit Kundendaten und entspricht Deine Beispieltabelle dem Origial
oder ist das jetzt nur so ein Gebastel?
Gruß Dieter
Der Zusammenhang zwischen Deinem Makro und Deiner Beispieltabelle erschließt sich mir nicht so ganz?
Steht denn in dem unteren Teil die gesamte Liste mit Kundendaten und entspricht Deine Beispieltabelle dem Origial
oder ist das jetzt nur so ein Gebastel?
Gruß Dieter
Hallo Sanjao!
Also, den Teil mit der Eingabe von Kundennummer und Anzahl von Personen und Ausfüllen des Etiketts verstehe ich ja noch, aber mit dem rechten unteren Teil habe ich irgendwie ein Verständnisproblem?
Makrotechnisch gesehen würde ich es so machen:
Nur einen Button z.B. mit dem Namen "Daten Übernehmen". Der Wochentag wird per Makro automatisch ermittelt und in die jeweilige Spalte Samstag oder Sonntag eingetragen. Das hat den Vorteil, dass keine falsche Eingabe erfolgen kann, wenn in der Hektik aus Versehen der falsche Button betätigt wird.
Und wenn mann sich in der Personenzahl verhauen hat, dann wird die Eingabe einfach wiederholt. Bei einer irrtümlich falschen Eingabe der Kundennummer, wird für diese einfach eine nochmalige 0-Eingabe für Anzahl Personen gemacht.
Außerdem würde im rechten unteren Teil eine Spalte für Samstag und eine Spalte für Sonntag reichen, in der nur die Anzahl der Personen stehen. Der Rest steht ja schon im linken Teil. D.h. also, in der jeweiligen Kundenzeile die Personenzahl in Spalte Samstag oder Sonntag eintragen.
Die Anzahl der Firmen läßt sich dann dadurch ermitteln, ob in der Zelle Anzahl Personen, was drinnen steht oder nicht.
Die Summen für Firmen und Personen im rechten oberen Teil, werden auch nach jeder Eingabe per Makro automatisch aktualisiert.
So stelle ich mir das zumindest vor
Gruß Dieter
Also, den Teil mit der Eingabe von Kundennummer und Anzahl von Personen und Ausfüllen des Etiketts verstehe ich ja noch, aber mit dem rechten unteren Teil habe ich irgendwie ein Verständnisproblem?
Makrotechnisch gesehen würde ich es so machen:
Nur einen Button z.B. mit dem Namen "Daten Übernehmen". Der Wochentag wird per Makro automatisch ermittelt und in die jeweilige Spalte Samstag oder Sonntag eingetragen. Das hat den Vorteil, dass keine falsche Eingabe erfolgen kann, wenn in der Hektik aus Versehen der falsche Button betätigt wird.
Und wenn mann sich in der Personenzahl verhauen hat, dann wird die Eingabe einfach wiederholt. Bei einer irrtümlich falschen Eingabe der Kundennummer, wird für diese einfach eine nochmalige 0-Eingabe für Anzahl Personen gemacht.
Außerdem würde im rechten unteren Teil eine Spalte für Samstag und eine Spalte für Sonntag reichen, in der nur die Anzahl der Personen stehen. Der Rest steht ja schon im linken Teil. D.h. also, in der jeweiligen Kundenzeile die Personenzahl in Spalte Samstag oder Sonntag eintragen.
Die Anzahl der Firmen läßt sich dann dadurch ermitteln, ob in der Zelle Anzahl Personen, was drinnen steht oder nicht.
Die Summen für Firmen und Personen im rechten oberen Teil, werden auch nach jeder Eingabe per Makro automatisch aktualisiert.
So stelle ich mir das zumindest vor
Gruß Dieter
So ich hatte grad mal etwas Zeit im bei der Zug fahrt.
Wohl gemerkt nur etwas. Also hab ich die Zeit etwas tot geschlagen und mal ein ganz einfaches Programm für dein Problem geschrieben.
Das Programm schreibt eigentlich hinter eine bestimmte ID eine beliebige Zeichenfolge.
Du müsstest jedoch noch die Spalten bzw. Zeilen und die Länge der Tabelle ändern. Es sollte jedoch mit Vorsicht genossen werden, da es ein "Zug" Programm ist
Wohl gemerkt nur etwas. Also hab ich die Zeit etwas tot geschlagen und mal ein ganz einfaches Programm für dein Problem geschrieben.
Das Programm schreibt eigentlich hinter eine bestimmte ID eine beliebige Zeichenfolge.
Sub test()
Dim id As String
Dim idtemp(1 To 10) As String
Dim temp As String
id = InputBox("Geben Sie die ID ein.")
anzahl = InputBox("Geben Sie die Anzahl der Besucher an.")
id = CStr(id)
For a = 1 To 10
zelle = "A" & a
zelle = CStr(zelle)
Range(zelle).Select
temp = ActiveCell
idtemp(a) = temp
If idtemp(a) = id Then
zelle = "B" & a
zelle = CStr(zelle)
Range(zelle).Select
ActiveCell = anzahl
End If
Next a
End Sub
Du müsstest jedoch noch die Spalten bzw. Zeilen und die Länge der Tabelle ändern. Es sollte jedoch mit Vorsicht genossen werden, da es ein "Zug" Programm ist
@duffman521
Nur als Anmerkung: Anstelle der Zusammensetzung der Adresse in den Zeilen 11 bis 13 kannst Du auch einfach
verwenden ...
... und die Schleife ersparst Du Dir, wenn Du gleich auf die Excel-Suchfunktion zurückgreifst - also etwa:
Grüße
bastla
Nur als Anmerkung: Anstelle der Zusammensetzung der Adresse in den Zeilen 11 bis 13 kannst Du auch einfach
Cells(a, "A")
... und die Schleife ersparst Du Dir, wenn Du gleich auf die Excel-Suchfunktion zurückgreifst - also etwa:
Sub Eintragen()
id = InputBox("Geben Sie die ID ein.")
With Range("A2:A200")
Set c = .Find(What:=id, LookIn:=xlValues, LookAt:=xlWhole)
If Not c Is Nothing Then
c.Offset(0, 1) = InputBox("Geben Sie die Anzahl der Besucher an.")
Else
MsgBox id & " nicht gefunden!"
End If
End With
End Sub
bastla
Guten Morgen Sanjo!
So in etwa würde ich die Tabelle erstellen: Deine Tabelle enthält ausgeblendete Spalten, in denen vermutlich die SVerweis-Formeln stehen. Bei der Makrosteuerung werden jedoch keine Formeln gebraucht, weil alles automatisiert abläuft.
Ich schlage vor Du siehst Dir die Tabelle an und baust diese bei Bedarf nach Deinen Wünschen um, und postest nochmal das Endergebnis, damit ich die Konstanten Zell-Adressen und Spalten in den Makro-Konstanten entsprechend anpassen kann. Hinterher kann immer noch verschoben werden, wobei dann auch nur Konstanten entsprechend angepasst werden müssen.
Die Spalte N und O auf der rechten Seite können dann alle Jahre zwei neue Spalten eingefügt und der obere Teil kopiert und mit einer neuen Jahreszahl versehen werden. Die anderen Jahre rutschen dann immer nach rechts und bleiben erhalten.
Der dazugehörige Code, würde passend zu meinem Tabellenentwurf, so aussehen, wobei dieser nur funktioniert, wenn in der Taskleiste das Systemdatum auf einen Samstag oder Sonntag gesetzt wird.
Quellcode im VB-Editor Tabellenblatt:
Quellcode im VB-Editor in einem Modul:
In den Eingabefeldern dürfen keine Leereingaben erfolgen. Zum Löschen eines Eintrages muss der Wert 0 eingegeben werden, damit der Zellinhalt entfernt wird.
Gruß Dieter
So in etwa würde ich die Tabelle erstellen: Deine Tabelle enthält ausgeblendete Spalten, in denen vermutlich die SVerweis-Formeln stehen. Bei der Makrosteuerung werden jedoch keine Formeln gebraucht, weil alles automatisiert abläuft.
Ich schlage vor Du siehst Dir die Tabelle an und baust diese bei Bedarf nach Deinen Wünschen um, und postest nochmal das Endergebnis, damit ich die Konstanten Zell-Adressen und Spalten in den Makro-Konstanten entsprechend anpassen kann. Hinterher kann immer noch verschoben werden, wobei dann auch nur Konstanten entsprechend angepasst werden müssen.
Die Spalte N und O auf der rechten Seite können dann alle Jahre zwei neue Spalten eingefügt und der obere Teil kopiert und mit einer neuen Jahreszahl versehen werden. Die anderen Jahre rutschen dann immer nach rechts und bleiben erhalten.
Der dazugehörige Code, würde passend zu meinem Tabellenentwurf, so aussehen, wobei dieser nur funktioniert, wenn in der Taskleiste das Systemdatum auf einen Samstag oder Sonntag gesetzt wird.
Quellcode im VB-Editor Tabellenblatt:
Private Sub CommandButton1_Click()
Call SetKundendaten
End Sub
Option Explicit
Const InputKn = "D4" 'Zelle: Eingabe Kundennummer
Const InputPs = "D5" 'Zelle: Eingabe Anzahl Personen
Const EtFarbe = "J3" 'Zelle: Etikett Farbe
Const EtKdNr = "J4" 'Zelle: Etikett Kundennummer
Const EtFirma = "J5" 'Zelle: Etikett Firma
Const EtName = "J6" 'Zelle: Etikett Name
Const EtOrt = "J7" 'Zelle: Etikett Ort
Const SumSaFa = "N5" 'Zelle: Summe Samstag Anzahl Firmen
Const SumSaPs = "O5" 'Zelle: Summe Samstag Anzahl Personen
Const SumSoFa = "N8" 'Zelle: Summe Sonntag Anzahl Firmen
Const SumSoPs = "O8" 'Zelle: Summe Sonntag Anzahl Personen
Const Zeile1Kd = 24 'Zeile 1 Kundendaten
Const SpalteKn = "C" 'Spalte: Kundendaten Kundennummer
Const SpalteFa = "D" 'Spalte: Kundendaten Firma
Const SpalteCo = "E" 'Spalte: Kundendaten Farbe
Const SpalteNa = "F" 'Spalte: Kundendaten Name
Const SpalteOr = "H" 'Spalte: Kundendaten Ort
Const SpalteSa = "N" 'Spalte: Kundendaten Samstag
Const SpalteSo = "O" 'Spalte: Kundendaten Sonntag
Const Msg1 = "Die Eingaben sind unvollständig!"
Const Msg2 = "Kunden-Nr.: % nicht gefunden!"
Const Msg3 = "Heute ist kein Samstag oder Sonntag!"
Const Samstag = 6 'Wochentag Samstag
Const Sonntag = 7 'Wochentag Sonntag
Sub SetKundendaten()
Dim KdNr As String, Daten As Range, Tag As Integer, Zeile As Long
Dim SpalteW As String, ZelleFa As String, ZellePs As String
If Range(InputKn) = "" Or Range(InputPs) = "" Then
MsgBox Msg1, vbExclamation, "Fehler": Exit Sub
End If
Tag = DatePart("w", Date, vbMonday)
If Tag = Samstag Then
SpalteW = SpalteSa: ZelleFa = SumSaFa: ZellePs = SumSaPs
ElseIf Tag = Sonntag Then
SpalteW = SpalteSo: ZelleFa = SumSoFa: ZellePs = SumSoPs
Else
MsgBox Msg3, vbExclamation, "Fehler": Exit Sub
End If
Set Daten = Columns(SpalteKn).Find(Range(InputKn), LookIn:=xlValues, LookAt:=xlWhole)
If Daten Is Nothing Then
MsgBox Replace(Msg2, "%", Range(InputKn)), vbExclamation, "Fehler"
Else
Zeile = Daten.Row
Range(EtFarbe).Interior.ColorIndex = Cells(Zeile, SpalteCo).Interior.ColorIndex
Range(EtKdNr) = Cells(Zeile, SpalteKn)
Range(EtFirma) = Cells(Zeile, SpalteFa)
Range(EtName) = Cells(Zeile, SpalteNa)
Range(EtOrt) = Cells(Zeile, SpalteOr)
If Range(InputPs) = 0 Then Cells(Zeile, SpalteW) = "" Else Cells(Zeile, SpalteW) = Range(InputPs)
Zeile = Cells(Rows.Count, SpalteW).End(xlUp).Row
With WorksheetFunction
Range(ZelleFa) = .Count(Range(Cells(Zeile1Kd, SpalteW), Cells(Zeile, SpalteW)))
Range(ZellePs) = .Sum(Range(Cells(Zeile1Kd, SpalteW), Cells(Zeile, SpalteW)))
End With
End If
End Sub
In den Eingabefeldern dürfen keine Leereingaben erfolgen. Zum Löschen eines Eintrages muss der Wert 0 eingegeben werden, damit der Zellinhalt entfernt wird.
Gruß Dieter
Hallo duffman521!
Danke für die Blumen, aber bastla kann das mindestens genausogut und hat mir erstmal, aus reiner Höflichkeit den Vortritt gelassen
Gruß Dieter
Danke für die Blumen, aber bastla kann das mindestens genausogut und hat mir erstmal, aus reiner Höflichkeit den Vortritt gelassen
Gruß Dieter
Hallo Sanjao!
Gern geschehen
Gruß Dieter
Gern geschehen
Ich brauche noch etwas Zeit, da ich versuche das Ganze auch zu verstehen und hier und da nach zu lesen. Möchte es nicht
einfach nur abtippen.
Da gebe ich duffman521 recht, dass ist eine gute Einstellung und falls Du Fragen hast, beantworten wir die gerneeinfach nur abtippen.
Gruß Dieter