frank1959
Goto Top

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

20035f40c4624e37ad15a41c4f4767d6


Gewünschte Ergebnis:

35743ab92cdc8f891239d9ec8511fa1a

wer kann mir Helfen

Gruß
Frank

Content-Key: 182607

Url: https://administrator.de/contentid/182607

Printed on: April 26, 2024 at 04:04 o'clock

Member: bastla
bastla Mar 26, 2012 at 22:22:04 (UTC)
Goto Top
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:
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
Grüße
bastla

[Edit] Löschen der Werte in der Zieltabelle ergänzt [/Edit]
Member: Frank1959
Frank1959 Mar 27, 2012 at 08:06:07 (UTC)
Goto Top
Hallo bastla,

ich versuche auf Deine Fragen zu antworten:

"Woher kommt der Suchbegriff?“ ............wie in meinem Beispiel (02-01.30) steht der Suchbegriff im ersten Tabellenblatt woraus ich alle Information heraus lesen/schreiben möchte
"Wohin soll geschrieben werden - immer die gleiche Tabelle?“ ........geschrieben werden soll in ein anderes Tabellenblatt/Zieltabelle, nach jeder Suche sollte der Inhalt des Tabellenblattes/Zieltabelle gelöscht werden

Danke vorab und Gruß
Frank
Member: bastla
bastla Mar 27, 2012 at 08:13:09 (UTC)
Goto Top
Hallo Frank1959!
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 ... face-wink

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
Member: Frank1959
Frank1959 Mar 27, 2012 at 13:29:16 (UTC)
Goto Top
Hallo bastla,

Okay, ich glaube jetzt zu verstehen.
Meiner Vorstellung nach wäre es besser wenn ich einen „SuchenButton“ drücke könnte um dort den „Suchbegriff" einzugeben. Es handelt sich nämlich nicht immer um den gleichen Suchbegriff.
Ich selber bestimme wonach gesucht werden soll......also "02-01-30" oder „Kisten" oder "02-05-Kisten“
Und das Ergebnis sollte so aussehen das sobald (wie in meinem Beispiel die „02-01-30“) der Wert aus der ersten „A“ Zelle und dann der Wert aus der zweiten „B“ Zelle in Tabellenform herausgeschrieben wird.

Der Suchbegriff 01-02-30 befindet sich in der ersten Zelle
01-02-30 mit dem Wert „abc“
in der zweiten Zeile taucht der Wert wieder auf aber in der Zelle
05-01-30 mit dem Wert „def“
usw.

Ja, das sehe ich auch so. Vor jeder Suche sollte die Zieltabelle gelöscht werden *smile...danke.

Danke und Gruß
Frank
Member: bastla
bastla Mar 27, 2012 at 14:12:02 (UTC)
Goto Top
Hallo Frank1959!

Um eine Eingabe tätigen zu können, musst Du nur die Zeile 2 durch
LookFor = InputBox("Suchbegriff?")
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
Target.Cells(1, "A").Value = "ProduktNr"  
Target.Cells(1, "B").Value = "Produktname"  
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 "InputBox" nachgereicht [/Edit]
Member: Frank1959
Frank1959 Mar 28, 2012 at 07:32:36 (UTC)
Goto Top
Hallo bastla,

sorry aber ich habe von VB und macros ein nur sehr begrenztes Wissen (CCC-) habe aber folgenden "SuchButton" gefunden der auch funktioniert und mir jeden Wert anzeigt aber nicht in eine separate Tabelle schreibt.
Wie könnte man diese Suche mit Deiner vereinen?
Bin ich wirklich so dumm!!!
Für Deine Gedult mit mir vorab 1000 Dank
Gruß
Frank


Bitte siehe hier:
_________________________________________________________
Private Sub CommandButton1_Click()
Call SearchAllTables
End Sub


Dann im VBA-Editor über Einfügen ein "Modul" einfügen. In das Modul kommt
folgender Code:
Code:
Option Explicit
Global SSearch As String

Public Sub SearchAllTables()
Dim ws As Worksheet
Dim c
Dim firstAddress As String
Dim secAddress
Dim GFound As Boolean
Dim GWeiter As Boolean

GWeiter = False
GFound = False
anf:
SSearch = InputBox("Suchen nach:", "Search In All Tables", SSearch)

If SSearch = "" Then
End
End If
weiter:
For Each ws In Worksheets
'ws.Select
With ws.Cells
Set c = .Find(SSearch, LookIn:=xlValues, MatchCase:=False)
If Not c Is Nothing Then
GFound = True
ws.Select
c.Select
firstAddress = c.Address
If MsgBox("Weitersuchen ?", vbQuestion + vbYesNo) = vbYes Then
Do
Set c = .FindNext(c)


secAddress = c.Address
If c.Address = firstAddress Then
Exit Do
End If
c.Select
If MsgBox("Weitersuchen ?", vbQuestion + vbYesNo) = vbNo Then
GWeiter = True
GoTo ende
End If
Loop While Not c Is Nothing And secAddress <> firstAddress And c.Address <> firstAddress
Else
GWeiter = True
GoTo ende
End If
End If
End With
Next ws

ende:

If GFound = False Then
If MsgBox("Suchwert nicht gefunden ! Neue Suche ?", vbInformation + vbYesNo) = vbYes Then
GoTo anf:
End If
Else
If GWeiter = False Then
If MsgBox("Sie haben alle Tabellenblätter durchsucht ! Soll die Suche neu gestartet werden ?", vbInformation + vbYesNo) = vbYes Then
GoTo weiter
End If
End If
End If

End Sub
Member: bastla
bastla Mar 28, 2012 at 08:06:29 (UTC)
Goto Top
Hallo Frank1959!
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
Member: Frank1959
Frank1959 Mar 28, 2012 at 09:45:16 (UTC)
Goto Top
Hallo bastla,

ich habe mal zwei screenshot gemacht in der Hoffnung das sie hier angezeigt werden.

Danke und Gruß
Frank

4778205461e7202f737c9bba04410244
50920f67d84fc193aac066cf4e0c7b01
Member: bastla
bastla Mar 28, 2012 at 12:36:53 (UTC)
Goto Top
Hallo Frank1959!

Sorry - da waren die Klammern auf der Strecke geblieben face-sad; ist jetzt oben korrigiert ...

Grüße
bastla
Member: Frank1959
Frank1959 Mar 29, 2012 at 06:30:05 (UTC)
Goto Top
Hallo bastla,

danke aber nun taucht hier ein anderer Fehler auf. Bitte siehe ...


00873190a9982999512d1123de2dde81


Danke und Gruß
Frank
Member: mak-xxl
mak-xxl Mar 29, 2012 at 06:45:29 (UTC)
Goto Top
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
Member: Frank1959
Frank1959 Mar 29, 2012 at 08:00:34 (UTC)
Goto Top
Guten morgen Mario,

Liebe Grüße an die Insel.....ich hoffe doch dass das Wetter gut ist und danke für den Tipp es hat funktioniert.
SUPER....aber *smile

nun habe ich ein anderes Problem beim herausschreiben der Werte passiert folgendes:
wenn ich nach dem Wert 05-01-34 suche wandelt Excel diesen und andere Werte in 12540 um. WIESO?

Danke und Gruß
Frank
Member: mak-xxl
mak-xxl Mar 29, 2012 at 09:14:32 (UTC)
Goto Top
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
Member: bastla
bastla Mar 29, 2012 at 10:10:12 (UTC)
Goto Top
Hallo Mario!
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 ... face-smile

Grüße
bastla
Member: Frank1959
Frank1959 Mar 29, 2012 at 12:32:48 (UTC)
Goto Top
Hallo Bastla,
hallo Mario,

Einigkeit macht stark. 1000 Dank alles funktioniert so wie ich es mir vorgestellt habe.
Mit eurer Unterstützung habt ihr mir 4 Tage arbeit erspart.

SUPER!!!!

Viele Grüße, ein schönes Osterfest und viel Erholung auf der Insel
Frank