EXCEL-Datei auslesen und in neues Tabellenblatt schreiben
Leider kenne ich mich nicht mit VB aus, erhoffe aber doch Hilfe hier im diesem Forum...............
Ich habe eine "GROSSE" Tabelle und möchte in diese Tabelle nach einen bestimmten Begriff suchen lassen. Jedesmal wenn dieser Begriff (alphanumerische Zeichen) auftaucht (Spalte/Zeile) soll in einem separatem Tabellenblatt die Werte aus der Spalte "A" + "B" eingetragen werden.
Beispiel: gesucht wird nach 02-01-30
Gewünschte Ergebnis:
wer kann mir Helfen
Gruß
Frank
Beispiel: gesucht wird nach 02-01-30
Gewünschte Ergebnis:
wer kann mir Helfen
Gruß
Frank
Please also mark the comments that contributed to the solution of the article
Content-Key: 182607
Url: https://administrator.de/contentid/182607
Printed on: April 26, 2024 at 18:04 o'clock
15 Comments
Latest comment
Hallo Frank1959 und willkommen im Forum!
Über das Drumherum (Woher kommt der Suchbegriff? Wohin soll geschrieben werden - immer die gleiche Tabelle? Soll die Zieltabelle vorweg gelöscht werden?) hast Du ja noch keine Informationen geliefert, daher nur eine schematische Drastellung:
Grüße
bastla
[Edit] Löschen der Werte in der Zieltabelle ergänzt [/Edit]
Über das Drumherum (Woher kommt der Suchbegriff? Wohin soll geschrieben werden - immer die gleiche Tabelle? Soll die Zieltabelle vorweg gelöscht werden?) hast Du ja noch keine Informationen geliefert, daher nur eine schematische Drastellung:
Sub Collect()
LookFor = "02-01-30" 'Suchbegriff
Set Source = Worksheets("Tabelle1").Range("A1:Z1000")
SourceCol = "A"
Cols = 2
Set Target = Worksheets("Tabelle2") 'Zieltabelle
TargetRow = 2 'Eintrag ab dieser Zeile in der Zieltabelle
TargetCol = "A" 'Eintrag ab dieser Spalte in der Zieltabelle
Target.Cells.ClearContents 'Alle Inhalte der Zieltabelle löschen
With Source
Set c = .Find(LookFor, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows)
If Not c Is Nothing Then
firstAddress = c.Address
lastRow = 0
Do
cRow = c.Row
If cRow <> lastRow Then
Target.Cells(TargetRow, TargetCol).Resize(1, Cols).Value = Cells(cRow, SourceCol).Resize(1, Cols).Value
TargetRow = TargetRow + 1
lastRow = cRow
End If
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
End Sub
bastla
[Edit] Löschen der Werte in der Zieltabelle ergänzt [/Edit]
Hallo Frank1959!
In meiner Skizze oben steht der Suchbegriff noch fix eingetragen in Zeile 2, und die Zieltabelle ist mit "Tabelle2" vorgegeben (das Löschen habe ich schon mal integriert) - sollte zum Testen aber schon mal genügen ...
Grüße
bastla
wie in meinem Beispiel (02-01.30) steht der Suchbegriff im ersten Tabellenblatt woraus ich alle Information heraus lesen/schreiben möchte
Gemeint war: Wie (Eingabefenster, Eintrag in eine Zelle - welche?) legst Du fest, dass nach "02-01-30" gesucht werden soll?nach jeder Suche sollte der Inhalt des Tabellenblattes/Zieltabelle gelöscht werden
Vor jeder Suche wäre vermutlich sinnvoller ... In meiner Skizze oben steht der Suchbegriff noch fix eingetragen in Zeile 2, und die Zieltabelle ist mit "Tabelle2" vorgegeben (das Löschen habe ich schon mal integriert) - sollte zum Testen aber schon mal genügen ...
Grüße
bastla
Hallo Frank1959!
Um eine Eingabe tätigen zu können, musst Du nur die Zeile 2 durch
ersetzen - eine Absicherung gegen zB leere Eingaben lässt sich bei Bedarf natürlich noch ergänzen.
Damit es in der Zieltabelle Überschriften gibt, könntest Du noch unmittelbar nach der Zeile 11
verwenden.
Wie Du ein Makro in der von Dir verwendeten Excel-Version mit einem Button verknüpfst, weißt Du hoffentlich schon (bzw kannst Du sicher herausfinden) ...
Grüße
bastla
[Edit] Klammern für "
Um eine Eingabe tätigen zu können, musst Du nur die Zeile 2 durch
LookFor = InputBox("Suchbegriff?")
Damit es in der Zieltabelle Überschriften gibt, könntest Du noch unmittelbar nach der Zeile 11
Target.Cells(1, "A").Value = "ProduktNr"
Target.Cells(1, "B").Value = "Produktname"
Wie Du ein Makro in der von Dir verwendeten Excel-Version mit einem Button verknüpfst, weißt Du hoffentlich schon (bzw kannst Du sicher herausfinden) ...
Grüße
bastla
[Edit] Klammern für "
InputBox
" nachgereicht [/Edit]
Hallo Frank1959!
Um den Button im von Dir gefundenen Code zu verwenden, genügen die ersten 3 Zeilen (deren Nummern auch angezeigt würden, wenn Du die passende beim Posten verwendet hättest, was sich übrigens noch nachholen lässt) - nur heißt das aufzurufende Makro bei mir nicht "SearchAllTables" sondern "Collect" ...
Grüße
bastla
Wie könnte man diese Suche mit Deiner vereinen?
Hast Du denn inzwischen meinen Ansatz überhaupt schon einmal getestet, und wenn ja, mit welchem Ergebnis?Um den Button im von Dir gefundenen Code zu verwenden, genügen die ersten 3 Zeilen (deren Nummern auch angezeigt würden, wenn Du die passende beim Posten verwendet hättest, was sich übrigens noch nachholen lässt) - nur heißt das aufzurufende Makro bei mir nicht "SearchAllTables" sondern "Collect" ...
Grüße
bastla
Moin Frank1959,
da bastla noch nicht angemeldet ist und Du schon mit den Hufen scharrst:
Setze vor die Zeile (ganz oben) Option Explicit ein Hochkomma, also so: ' Option Explicit.
Dieser Befehl erzwingt sonst eine Variablendeklaration, deshalb der Fehler - es müssen im Quelltext ein paar Variablen deklariert werden. So kannst Du erst einmal weiterarbeiten.
Freundliche Grüße von der Insel - Mario
da bastla noch nicht angemeldet ist und Du schon mit den Hufen scharrst:
Setze vor die Zeile (ganz oben) Option Explicit ein Hochkomma, also so: ' Option Explicit.
Dieser Befehl erzwingt sonst eine Variablendeklaration, deshalb der Fehler - es müssen im Quelltext ein paar Variablen deklariert werden. So kannst Du erst einmal weiterarbeiten.
Freundliche Grüße von der Insel - Mario
Moin Frank,
mit 'herausschreiben' meinst Du das eintragen in das neue Tabellenblatt? Wenn ja, dann ist dort die Formatierung falsch (Zahl statt Text).
Du kannst das zunächst beheben, in dem Du im Quelltext (der Deines letzten Postings) - in der längsten Zeile - vor dem Gleichheitszeichen das Wort 'Value' durch das Wort 'Text' ersetzt.
Alternativ kannst Du dieses Wort 'Value' samt dem Punkt ganz entfernen - probiere einfach beides aus.
Als dauerhafte Lösung solltest Du aber alle Zellen (Spalten) in der Zieltabelle genauso formatieren wie die korrespondierenden Spalten in der Quelltabelle (i.e. mit dem Formatpinsel).
Freundliche Grüße von der Insel - Mario
mit 'herausschreiben' meinst Du das eintragen in das neue Tabellenblatt? Wenn ja, dann ist dort die Formatierung falsch (Zahl statt Text).
Du kannst das zunächst beheben, in dem Du im Quelltext (der Deines letzten Postings) - in der längsten Zeile - vor dem Gleichheitszeichen das Wort 'Value' durch das Wort 'Text' ersetzt.
Alternativ kannst Du dieses Wort 'Value' samt dem Punkt ganz entfernen - probiere einfach beides aus.
Als dauerhafte Lösung solltest Du aber alle Zellen (Spalten) in der Zieltabelle genauso formatieren wie die korrespondierenden Spalten in der Quelltabelle (i.e. mit dem Formatpinsel).
Freundliche Grüße von der Insel - Mario
Hallo Mario!
Danke übrigens für's Aushelfen ...
Grüße
bastla
Du kannst das zunächst beheben, in dem Du im Quelltext (der Deines letzten Postings) - in der längsten Zeile - vor dem Gleichheitszeichen das Wort 'Value' durch das Wort 'Text' ersetzt.
Guter Plan - allerdings ist die Eigenschaft "Text" read-only - daher, wie vorgeschlagen: Zieltabelle einmal vorweg formatieren (deswegen habe ich auch - in Zeile 11 - anstatt mit "Clear
" mit "ClearContents
" gelöscht) ...Danke übrigens für's Aushelfen ...
Grüße
bastla