Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1648to1652
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
Inhaltsverzeichnis

Excel Dokument mit Makro durchsuchen

Excel Dokument mit Makro durchsuchen
05.10.2018 12:45:17
Tuvux
Hallo zusammen, ich benötige Mal Expertenwissen!
Folgendes Problem: Ich lasse mit einem Makro ein Excel Tabellenblatt nach Schlagworten durchsuchen, so sieht das dann aus:
Public Sub Instrsuche()
With ActiveWorkbook.ActiveSheet
If .FilterMode Then
.ShowAllData
End If
End With
Rows("7:7").Select
Selection.AutoFilter
Dim intwort As String, intgef As Integer, wks1 As Worksheet, Zelle As Range
Range("a7:o1000").ClearContents
Set wks1 = ThisWorkbook.Sheets("Portfolio FA_RG")
intgef = 8
intwort = InputBox("Suchbegriff oder (*) eingeben:")
If intwort = "" Then Exit Sub 'Bei Abbruch gibt Inputbox einen Leerstring aus
For Each Zelle In wks1.Range("a4:s" & wks1.UsedRange.Rows.Count)
If InStr(1, Zelle.Value, intwort, vbTextCompare) Then
Cells(intgef, 1) = wks1.Cells(Zelle.Row, 1)
Cells(intgef, 2) = wks1.Cells(Zelle.Row, 5)
Cells(intgef, 3) = wks1.Cells(Zelle.Row, 6)
Cells(intgef, 4) = wks1.Cells(Zelle.Row, 7)
Cells(intgef, 5) = wks1.Cells(Zelle.Row, 8)
Cells(intgef, 6) = wks1.Cells(Zelle.Row, 12)
Cells(intgef, 7) = wks1.Cells(Zelle.Row, 13)
Cells(intgef, 8) = wks1.Cells(Zelle.Row, 10)
Cells(intgef, 9) = wks1.Cells(Zelle.Row, 11)
Cells(intgef, 10) = wks1.Cells(Zelle.Row, 14)
Cells(intgef, 11) = wks1.Cells(Zelle.Row, 15)
Cells(intgef, 12) = wks1.Cells(Zelle.Row, 16)
Cells(intgef, 13) = wks1.Cells(Zelle.Row, 17)
Cells(intgef, 14) = wks1.Cells(Zelle.Row, 18)
Cells(intgef, 15) = wks1.Cells(Zelle.Row, 19)
intgef = intgef + 1
End If
Next
Application.Wait Now + TimeValue("00:00:01")
Rows("7:7").Select
Selection.AutoFilter
End Sub

Wie kann ich im Makro vorgeben, dass er nur bestimmte Spalten durchsucht? Bsp. Nur die Spalten "a:f" und "g:i" sollen durchsucht werden und die restlichen Daten unbeachtet bleiben? Vielen Dank im Voraus! Grüße

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel Dokument mit Makro durchsuchen
05.10.2018 12:53:16
Matthias
Hi
For Each Zelle In wks1.Range("A4:I" & wks1.UsedRange.Rows.Count)
Nur die Spalten "a:f" und "g:i" sollen durchsucht werden
Gibts in Deinem Excel noch was zwischen "f" und "g" ;-)
Gruß Matthias
AW: Excel Dokument mit Makro durchsuchen
05.10.2018 12:59:38
Tuvux
Sorry, der Fehler ist mir gar nicht aufgefallen...grrr.
Sollte heissen: nur die Spalten "a:d" und dann erst wieder "g:i" sollten durchsucht werden.
Gruß
warum machst Du nicht einfach 2 Schleifen? owT
05.10.2018 13:24:33
Matthias
AW: warum machst Du nicht einfach 2 Schleifen? owT
05.10.2018 13:39:48
Tuvux
Leider sind meine Kenntnisse dahingehend beschränkt :-(
Ich habe die Tabelle vor längerer Zeit von einem ehemaligen Kollegen, der nicht mehr da ist übernommen und kämpfe mich da durch. In der Regel klappt das recht gut, aber jetzt nicht wirklich. Kannst du mir dazu ein Beispiel erstellen?
Anzeige
AW: warum machst Du nicht einfach 2 Schleifen? owT
05.10.2018 13:52:44
Werner
Hallo,
so?
Public Sub Instrsuche()
Dim intwort As String, intgef As Integer, wks1 As Worksheet
Dim Bereich As Range, Zelle As Range
Application.ScreenUpdating = False
With ActiveWorkbook.ActiveSheet
If .FilterMode Then .ShowAllData
.Rows("7:7").AutoFilter
.Range("A7:O1000").ClearContents
Set wks1 = ThisWorkbook.Sheets("Portfolio FA_RG")
intgef = 8
intwort = InputBox("Suchbegriff oder (*) eingeben:")
If intwort = "" Then Exit Sub 'Bei Abbruch gibt Inputbox einen Leerstring aus
With wks1
letzte = .UsedRange.Rows.Count
Set Bereich = Union(.Range("A4:D" & letzte), .Range("G4:I" & letzte))
End With
For Each Zelle In Bereich
If InStr(1, Zelle.Value, intwort, vbTextCompare) Then
.Cells(intgef, 1) = wks1.Cells(Zelle.Row, 1)
.Cells(intgef, 2) = wks1.Cells(Zelle.Row, 5)
.Cells(intgef, 3) = wks1.Cells(Zelle.Row, 6)
.Cells(intgef, 4) = wks1.Cells(Zelle.Row, 7)
.Cells(intgef, 5) = wks1.Cells(Zelle.Row, 8)
.Cells(intgef, 6) = wks1.Cells(Zelle.Row, 12)
.Cells(intgef, 7) = wks1.Cells(Zelle.Row, 13)
.Cells(intgef, 8) = wks1.Cells(Zelle.Row, 10)
.Cells(intgef, 9) = wks1.Cells(Zelle.Row, 11)
.Cells(intgef, 10) = wks1.Cells(Zelle.Row, 14)
.Cells(intgef, 11) = wks1.Cells(Zelle.Row, 15)
.Cells(intgef, 12) = wks1.Cells(Zelle.Row, 16)
.Cells(intgef, 13) = wks1.Cells(Zelle.Row, 17)
.Cells(intgef, 14) = wks1.Cells(Zelle.Row, 18)
.Cells(intgef, 15) = wks1.Cells(Zelle.Row, 19)
intgef = intgef + 1
End If
Next
Application.Wait Now + TimeValue("00:00:01")
.Rows("7:7").AutoFilter
End With
Set wks1 = Nothing: Set Bereich = Nothing
Application.ScreenUpdating = True
End Sub
Wozu ist denn das Wait Now im Code?
Gruß Werner
Anzeige
das Programm wartet 1 Sekunde ... owT
05.10.2018 15:04:53
Matthias
Hallo
Application.Wait Now + TimeValue("00:00:01")

Das Programm wartet 1 Sekunde
Und auf UsedRange.Rows.Count
würde ich nicht unbedingt setzen. Das geht schnelle daneben als erwünscht.
Gruß Matthias
Danke. :-D
05.10.2018 15:09:24
Werner
Hallo Matthias,
danke für deinen Hinweis :-D Das mit dem Wait ist mir schon klar, nur erschließt sich anhand vom Code der Sinn nicht.
Dein Meinung zu Used Range teile ich, nur weiß ich leider nicht in welcher Spalte die letzte belegt Zeile ermittelt werden muss, wehalb ich beim Used Range geblieben bin.
Gruß Werner
Anzeige
wenn der Code schneller als die Tabelle ist ...
05.10.2018 15:33:58
Matthias
Hallo
Das mit dem Wait mache ich auch teilweise so, aber eher mit TimeSerial(0,0,1)
Der Code ist machmal schneller als man will, deshalb baue ich das auch ab und zu ein.
Gruß Matthias
Tastatur kaputt...
09.10.2018 08:18:54
Werner
Hallo,
.... oder weshalb sonst reicht es nicht für eine Rückantwort auf die angebotene Hilfe?
Gruß Werner

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige