Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
536to540
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
536to540
536to540
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Daten finden und komplette Zeile anzeigen

Daten finden und komplette Zeile anzeigen
21.12.2004 11:19:10
IkeB
Hallo an Alle,
als stiller Beobachter für einige Zeit, habe ich schon einige Beiträge gelesen und konnte von den bisherigen Posts einiges an Wissen für mich rausziehen. Leider konnte ich aber bisher ein akutes Problem bei meiner Excel Anwendung lösen.
Ich bastele gerade eine Datenbank mit Excel (ich weiss, Acces eignet sich besser dafür!), in der Mitarbeiter und deren Fähigkeiten in einzelnen Bereichen archiviert werden sollen. Jeder Mitarbeiter hat eine PersonalNr, die in Spalte C mittels eines Eingabe Formulars eingetragen wird. Nun würde ich gerne über eine Suchmaske, anhand der PersonalNr und dem Nachnamen des Mitarbeiters die jeweilige Zeile auslesen lassen. Eines der Probleme liegt darin, daß ich die Bewertungskriterien auf zwei Worksheets verteilen musste, da die Zeilen nicht lang genug waren. Ferner soll der ANwender die Möglichkeit haben die Fähigkeiten, also die Datensätze zu aktualisieren.
Ich würde mich sehr darüber freuen, wenn mir jemand helfen könnte!
Gruß,
Ike

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Ja, Access eignet sich dafür wohl besser.
Petz
Hi,
es gibt die Funktion SVERWEIS, die dir weiterhelfen könnte. Als Suchkriterium kannst du das Feld mit der Personalnummer verwenden, als Suchmatrix dann die Tabelle, in der die Fähigkeiten deiner Mitarbeiter stehen.
Aber wenn du eh grad noch in der Bastelphase bist und eine echte Datenbank aufbauen willst, dann tu dir lieber selbst einen Gefallen und nimm Access. Die Verknüpfungen zwischen Excel-Tabellen verlieren sich irgendwann im Nirvana und kein Mensch kann mehr nachvollziehen, was mit wem verknüpft war. Du kannst auch Excel-Tabellen nach Access importieren, damit deine Arbeit nicht umsonst war.
Anzeige
AW: Ja, Access eignet sich dafür wohl besser.
IkeB
Ist mir schon klar, dass Access sich schon besser eignet, das Problem ist, ist dass Excel den Vorteil bietet, dass es ein jeder auf dem Rechner hat, was bei Access nicht der Fall ist. Ausserdem MUß ich es in Excel machen, da das die Vorgabe ist.
Was ich brauche ist eine Suchfunktion, die dann, bei vorhandenem Kriterium, die komplette Zeile in Worksheet 1 & Worksheet 2 markiert und mir dann auf einem UsrForm zur Ansicht ausgibt. Ich denke, das ist kein Ding der Unmöglichkeit, nur reichen meine bescheidenen Programmierkenntnisse leider nicht dafür aus.
AW: Ja, Access eignet sich dafür wohl besser.
21.12.2004 11:42:42
Josef
Hallo Ike!
Das Suchen ist kein Problem, allerdings sagst du, dass die Infos in einer Zeile nicht
Platz finden! Das heist das auf dem UF mal mindestens 260 bis 300 Textboxen stehen müssen!
Erstelle zuerst das UF mit den Textboxen (fortlaufend Nummeriert), der Code zum Suchen soll
dann nicht das Problem sein.
Gruß Sepp
Anzeige
AW: Ja, Access eignet sich dafür wohl besser.
IkeB
Der UF zum eintragen der Daten in WS1&2 hat über 300 Felder! Dieser ist auch schon erstellt und funktioniert einwandfrei.
Das Formular zur Suche soll eigentlich nur 2 Felder haben: Eines für die PersonalNr und eines für den Nachnamen des Kollegen. Die Abfrage kann/ muss nicht AND/OR sein, wobei um DB-Sprache zu benutzen, der Primärschlüssel beim PersonalNr liegt, da dieser einmalig ist!
Ich habe eine sehr einfache Testversion gebastelt, bei der einige Daten schon gepflegt sind. In der "echten" Datei, habe ich die Spalte A und C aus Tabelle1, mit den Spalten A & B in Tabelle 2 verknüpft, da wie gesagt ich nicht alle Kriterien in eine Zeile bekommen habe! Worksheet(1) Spalte A ist der Nachname des Mitarbeiters und Spalte C beinhaltet die PersonalNR!
Ich hoffe das reicht an Infos?!
Anzeige
AW: Ja, Access eignet sich dafür wohl besser.
21.12.2004 12:06:19
Josef
Hallo Ike!
Das könnte im Prinzip so gehen:
'in ein allgemeines Modul Public lRow As Long 'Public - weil du dann zum zurückschreiben der Daten 'wieder darauf zurückgreifen kannst! 'in das Modul der UF zur Suche Sub CommandButton1_Click() Dim rng As Range Dim sFind As String Dim wks As Worksheet Dim iCnt As Integer sFind = TextBox1 Set wks = Sheets("Tabelle1") 'Tabelle mit den Personaldaten(1) Set rng = wks.Range("A:A").Find(What:=sFind, LookIn:=xlValues, LookAt:=xlWhole) If Not rng Is Nothing Then lRow = rng.Row With UserForm1 'Name des UF mit den Textboxen For iCnt = 1 To 256 'Für erste Tabelle .Controls("TextBox" & iCnt) = wks.Cells(lRow, iCnt) Next For iCnt = 1 To 50 '? Für zweite Tabelle .Controls("TextBox" & iCnt + 256) = Sheets("Tabelle2").Cells(lRow, iCnt) 'weiter in Tabelle2 Next End If End Sub
Gruß Sepp
Anzeige
AW: Ja, Access eignet sich dafür wohl besser.
IkeB
Sepp,
ich danke für Deine Mühe, aber wenn ich den Code ausprobiere, kommt die Fehlermeldung, dass ein "End If" kommt, ohne If-Block!
Um unser Leben zu vereinfachen, kann ich Dir einfach meine bisherige Anwendung senden?
Nochmal zur Erläuterung: Es soll dem Anwender die Möglichkeit gegeben werden, übr die PersoNr, die einzelnen Fähigkeiten des Mitarbeiters abzurufen, bzw. anzusehen.
Ike
AW: Ja, Access eignet sich dafür wohl besser.
21.12.2004 12:30:40
Josef
Hallo Ike!
Sorry, vor "End If" fehlt ein "End With"!
Wenn die datei nicht zu groß ist, kannst du sie ja hochladen.
Gruß Sepp
AW: Ja, Access eignet sich dafür wohl besser.
IkeB
Also, habe die Datei nun hochgeladen!
Ist eine sehr abgespeckte Version vom Original, zum testen gedacht. Wie gesagt es sind an die 300 Bewertungskriterien für jeden Mitarbeiter und ich lasse Spalten A&C aus Tabelle 1 in Spalten A&B in Tabelle 2 kopieren, damit der Bezug vorhanden bleibt.
Ich möchte es nun dem Anwender ermöglichen zunächst nur anhand der PersonalNr die Datensätze finden zu lassen und entsprechend anzuzeigen. AM liebsten wäre es mir, da nicht jeder Mitarbeiter für jedes Kriterium eine Bewertung erhält, die Rubriken, in denen kein Wert steht, aussen vor zu lassen, da ich eh nicht alle Rubriken in einer Zeile auslesen kann.
Ich weiss, dass es nicht sonderlich schwer sein kann und habe schon einigen Code versucht, aber ich bekomme es nicht hin!!!
Danke im Vorraus.
Anzeige
Wo ist die Datei? o.T.
21.12.2004 12:37:07
Josef
Gruß Sepp
AW: Wo ist die Datei? o.T.
21.12.2004 16:41:06
Josef
Hallo Ike!
Die Datei bzw. das UF wurde ja von einem nicht ganz ungeübten erstellt!
Sorry, aber das geht mir zu weit. Man müsste ja den Code für zig Comboboxen
anpassen und die Namen der Combos so ändern, das sie sich in einer Schleife
ansprechen lassen und das will ich mir nicht antun!
Nichts für ungut;-)
Gruß Sepp
AW: Wo ist die Datei? o.T.
21.12.2004 19:32:51
IkeB
Sepp,
lass mal die Combos aussen vor, es geht mir nur darum in SpalteC die PersoNr. zu finden, daraufhin, die komplette Zeile zu kopieren und diese Werte in ein anderes Blatt zu schreiben, damit ich wiederum mittels Formular auf diese Daten zugreifen kann. Ich verstehe nicht ganz, was da die Combos mit zutun haben....
Ich habe bereits einen Add-in gefunden, der das einigermassen kann, vielleicht kannst Du Dir den mal anschauen:
Option Explicit
Public strSuch As String

Sub Suchen_alle_Tabellen()
Dim wks As Worksheet
Dim rng As Range
Dim strAddress As String, strFind As String
Dim strRow As String
Dim bitch As String
strFind = InputBox("Bitte Suchbegriff eingeben:", Application.UserName, strSuch)
If strFind = "" Then Exit Sub
For Each wks In Worksheets
Set rng = wks.Cells.Find(strFind, lookat:=xlPart, LookIn:=xlFormulas)
If Not rng Is Nothing Then
strAddress = rng.Address
strRow = rng.Row
Rows(strRow).EntireRow.Copy
ActiveSheet.Paste Destination:=Worksheets("tabelle3").Range("a2:iv2")  'must save
'copies in variables and read out variables at end of routines!!!!
Do
Application.Goto rng, False
If MsgBox("Weiter", vbYesNo + vbQuestion) = vbNo Then Exit Sub
Set rng = Cells.FindNext(After:=ActiveCell)
If rng.Address = strAddress Then Exit Do
Loop
End If
Next wks
strSuch = strFind
MsgBox "Keine weiteren Fundstellen!", False, Application.UserName
Worksheets(1).Activate
Range("A1").Select
'Debug.Print strAddress
'Debug.Print strRow
'Worksheets(3).Activate
Debug.Print bitch
End Sub

ich würde gerne das ergebnis von untenstehenden Zeilen, in eine variable speichern, um sie später auszulesen, vielleicht hat da jemand ne idee?
Rows(strRow).EntireRow.Copy
ActiveSheet.Paste Destination:=Worksheets("tabelle3").Range("a2:iv2")
Anzeige
AW: Wo ist die Datei? o.T.
21.12.2004 20:02:15
Josef
Hallo Ike!
Eine mögliche Lösung:
Du erstellst ein Tabellenblatt mit dem Namen "Ergebnis".
Der nachfolgende Code sucht in deinem datenblatt in der Spalte "C" nach
der Nummer aus der Textbox im Suchformular (anpassen!).
Die gefundenen Zeilen werden in "Ergebnis" Spaltenweise eingefügt.
In der ersten Zeile steht jeweils die Zeilennummer der Fundstelle!
Duch die zeilennummer kannst du dann leicht bestimmen woher die daten kommen.
Spaltenweise ist so sicher einfacher, weil du dann praktisch alle Infos zu
einer Personalnummer zusammengefasst hast.

Sub suchen()
Dim rng As Range
Dim sFirst As String
Dim sFind As String
Dim wks1 As Worksheet
Dim wks2 As Worksheet
Dim srch As Worksheet
Dim arrF As Variant
Dim icol As Integer
With Application
.ScreenUpdating = False
.EnableEvents = False
.DisplayAlerts = False
.Calculation = xlCalculationManual
End With
Set wks1 = Sheets("Tabelle1") 'Tabelle mit denn Personalnummern
Set wks2 = Sheets("Tabelle2") 'Tabelle mit denn restlichen Daten
Set srch = Sheets("Ergebnis") 'Tabelle zur Ausgabe der Fundstellen
sFind = UserForm1.TextBox1 'anpassen
Set rng = wks1.Range("C:C").Find(What:=sFind, LookIn:=xlValues, LookAt:=xlWhole)
If Not rng Is Nothing Then
sFirst = rng.Address
Do
icol = icol + 1
srch.Cells(1, icol) = rng.Row
arrF = wks1.Rows(rng.Row)
srch.Range(srch.Cells(2, icol), srch.Cells(257, icol)) = Application.Transpose(arrF)
arrF = wks2.Rows(rng.Row)
srch.Range(srch.Cells(258, icol), srch.Cells(513, icol)) = Application.Transpose(arrF)
Set rng = wks1.Range("C:C").FindNext(rng)
Loop While rng.Address <> sFirst
End If
With Application
.ScreenUpdating = True
.EnableEvents = True
.DisplayAlerts = True
.Calculation = xlCalculationAutomatic
End With
End Sub

Gruß Sepp
Anzeige
AW: Wo ist die Datei? o.T.
21.12.2004 20:05:30
IkeB
Sepp,
lass mal die Combos aussen vor, es geht mir nur darum in SpalteC die PersoNr. zu finden, daraufhin, die komplette Zeile zu kopieren und diese Werte in ein anderes Blatt zu schreiben, damit ich wiederum mittels Formular auf diese Daten zugreifen kann. Ich verstehe nicht ganz, was da die Combos mit zutun haben....
Ich habe bereits einen Add-in gefunden, der das einigermassen kann, vielleicht kannst Du Dir den mal anschauen:
Option Explicit
Public strSuch As String

Sub Suchen_alle_Tabellen()
Dim wks As Worksheet
Dim rng As Range
Dim strAddress As String, strFind As String
Dim strRow As String
Dim bitch As String
strFind = InputBox("Bitte Suchbegriff eingeben:", Application.UserName, strSuch)
If strFind = "" Then Exit Sub
For Each wks In Worksheets
Set rng = wks.Cells.Find(strFind, lookat:=xlPart, LookIn:=xlFormulas)
If Not rng Is Nothing Then
strAddress = rng.Address
strRow = rng.Row
Rows(strRow).EntireRow.Copy
ActiveSheet.Paste Destination:=Worksheets("tabelle3").Range("a2:iv2")  'must save
'copies in variables and read out variables at end of routines!!!!
Do
Application.Goto rng, False
If MsgBox("Weiter", vbYesNo + vbQuestion) = vbNo Then Exit Sub
Set rng = Cells.FindNext(After:=ActiveCell)
If rng.Address = strAddress Then Exit Do
Loop
End If
Next wks
strSuch = strFind
MsgBox "Keine weiteren Fundstellen!", False, Application.UserName
Worksheets(1).Activate
Range("A1").Select
'Debug.Print strAddress
'Debug.Print strRow
'Worksheets(3).Activate
Debug.Print bitch
End Sub

ich würde gerne das ergebnis von untenstehenden Zeilen, in eine variable speichern, um sie später auszulesen, vielleicht hat da jemand ne idee?
Rows(strRow).EntireRow.Copy
ActiveSheet.Paste Destination:=Worksheets("tabelle3").Range("a2:iv2")
Anzeige
AW: Wo ist die Datei? o.T.
21.12.2004 20:05:31
IkeB
Sepp,
lass mal die Combos aussen vor, es geht mir nur darum in SpalteC die PersoNr. zu finden, daraufhin, die komplette Zeile zu kopieren und diese Werte in ein anderes Blatt zu schreiben, damit ich wiederum mittels Formular auf diese Daten zugreifen kann. Ich verstehe nicht ganz, was da die Combos mit zutun haben....
Ich habe bereits einen Add-in gefunden, der das einigermassen kann, vielleicht kannst Du Dir den mal anschauen:
Option Explicit
Public strSuch As String

Sub Suchen_alle_Tabellen()
Dim wks As Worksheet
Dim rng As Range
Dim strAddress As String, strFind As String
Dim strRow As String
Dim bitch As String
strFind = InputBox("Bitte Suchbegriff eingeben:", Application.UserName, strSuch)
If strFind = "" Then Exit Sub
For Each wks In Worksheets
Set rng = wks.Cells.Find(strFind, lookat:=xlPart, LookIn:=xlFormulas)
If Not rng Is Nothing Then
strAddress = rng.Address
strRow = rng.Row
Rows(strRow).EntireRow.Copy
ActiveSheet.Paste Destination:=Worksheets("tabelle3").Range("a2:iv2")  'must save
'copies in variables and read out variables at end of routines!!!!
Do
Application.Goto rng, False
If MsgBox("Weiter", vbYesNo + vbQuestion) = vbNo Then Exit Sub
Set rng = Cells.FindNext(After:=ActiveCell)
If rng.Address = strAddress Then Exit Do
Loop
End If
Next wks
strSuch = strFind
MsgBox "Keine weiteren Fundstellen!", False, Application.UserName
Worksheets(1).Activate
Range("A1").Select
'Debug.Print strAddress
'Debug.Print strRow
'Worksheets(3).Activate
Debug.Print bitch
End Sub

ich würde gerne das ergebnis von untenstehenden Zeilen, in eine variable speichern, um sie später auszulesen, vielleicht hat da jemand ne idee?
Rows(strRow).EntireRow.Copy
ActiveSheet.Paste Destination:=Worksheets("tabelle3").Range("a2:iv2")
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige