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

EXCEL-Datei auslesen und in neues Tabellenblatt schreiben

Frage Microsoft Microsoft Office

Mitglied: Frank1959

Frank1959 (Level 1) - Jetzt verbinden

26.03.2012, aktualisiert 29.03.2012, 8888 Aufrufe, 15 Kommentare

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 - Klicke auf das Bild, um es zu vergrößern

Gewünschte Ergebnis:

35743ab92cdc8f891239d9ec8511fa1a - Klicke auf das Bild, um es zu vergrößern

wer kann mir Helfen

Gruß
Frank
Mitglied: bastla
27.03.2012 um 00:22 Uhr
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:
01.
Sub Collect() 
02.
LookFor = "02-01-30" 'Suchbegriff 
03.
 
04.
Set Source = Worksheets("Tabelle1").Range("A1:Z1000") 
05.
SourceCol = "A" 
06.
Cols = 2 
07.
Set Target = Worksheets("Tabelle2") 'Zieltabelle 
08.
TargetRow = 2 'Eintrag ab dieser Zeile in der Zieltabelle 
09.
TargetCol = "A" 'Eintrag ab dieser Spalte in der Zieltabelle 
10.
 
11.
Target.Cells.ClearContents 'Alle Inhalte der Zieltabelle löschen 
12.
With Source 
13.
    Set c = .Find(LookFor, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows) 
14.
    If Not c Is Nothing Then 
15.
        firstAddress = c.Address 
16.
        lastRow = 0 
17.
        Do 
18.
            cRow = c.Row 
19.
            If cRow <> lastRow Then 
20.
                Target.Cells(TargetRow, TargetCol).Resize(1, Cols).Value = Cells(cRow, SourceCol).Resize(1, Cols).Value 
21.
                TargetRow = TargetRow + 1 
22.
                lastRow = cRow 
23.
            End If 
24.
            Set c = .FindNext(c) 
25.
        Loop While Not c Is Nothing And c.Address <> firstAddress 
26.
    End If 
27.
End With 
28.
End Sub
Grüße
bastla

[Edit] Löschen der Werte in der Zieltabelle ergänzt [/Edit]
Bitte warten ..
Mitglied: Frank1959
27.03.2012 um 10:06 Uhr
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
Bitte warten ..
Mitglied: bastla
27.03.2012 um 10:13 Uhr
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 ...

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
Bitte warten ..
Mitglied: Frank1959
27.03.2012 um 15:29 Uhr
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
Bitte warten ..
Mitglied: bastla
27.03.2012 um 16:12 Uhr
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
01.
Target.Cells(1, "A").Value = "ProduktNr" 
02.
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]
Bitte warten ..
Mitglied: Frank1959
28.03.2012 um 09:32 Uhr
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
Bitte warten ..
Mitglied: bastla
28.03.2012 um 10:06 Uhr
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 Formatierung 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
Bitte warten ..
Mitglied: Frank1959
28.03.2012 um 11:45 Uhr
Hallo bastla,

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

Danke und Gruß
Frank

4778205461e7202f737c9bba04410244 - Klicke auf das Bild, um es zu vergrößern
50920f67d84fc193aac066cf4e0c7b01 - Klicke auf das Bild, um es zu vergrößern
Bitte warten ..
Mitglied: bastla
28.03.2012 um 14:36 Uhr
Hallo Frank1959!

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

Grüße
bastla
Bitte warten ..
Mitglied: Frank1959
29.03.2012 um 08:30 Uhr
Hallo bastla,

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


00873190a9982999512d1123de2dde81 - Klicke auf das Bild, um es zu vergrößern


Danke und Gruß
Frank
Bitte warten ..
Mitglied: mak-xxl
29.03.2012 um 08:45 Uhr
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
Bitte warten ..
Mitglied: Frank1959
29.03.2012 um 10:00 Uhr
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
Bitte warten ..
Mitglied: mak-xxl
29.03.2012 um 11:14 Uhr
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
Bitte warten ..
Mitglied: bastla
29.03.2012 um 12:10 Uhr
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 ...

Grüße
bastla
Bitte warten ..
Mitglied: Frank1959
29.03.2012 um 14:32 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Microsoft Office
Excel Dateien durchsuchen und Werte einzeln in neue Excel Datei auslesen (1)

Frage von krischanii zum Thema Microsoft Office ...

VB for Applications
gelöst PDF Datei auslesen und per VBA in Excel schreiben (3)

Frage von Julian8990 zum Thema VB for Applications ...

VB for Applications
gelöst Schreiben in andere Excel-Datei macht Worksheet unsichtbar (5)

Frage von Albatros91 zum Thema VB for Applications ...

Entwicklung
gelöst CRV-Datei auslesen und in Excel konvertieren? (15)

Frage von Lisa110 zum Thema Entwicklung ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...