bommerlunder1972
Goto Top

Excel VBA

Hallo zusammen,

habe ein keines Problem mit Excel. Habe mich schon lange nicht mehr mit der Thematik beschäftigt.
Kurze Problembeschreibung:
Möchte per Makro eine Spalte markieren und in diesem Bereich dann eine Suche laufen lassen.
Der Wert für die Suche kann fest vorgegeben werden.
Evtl. Fehlermeldung bei nicht vorhanden dieses Wertes.
Angenommen der Wert wird in der Spalte gefunden und es ist die Zelle A100, dann möchte ich alle Werte unterhalb von B100 in eine neue Spalte kopieren.
Hört sich einfach an, aber ich habe schon Probleme mit dem Finden des Wertes....

Vielleicht hat jemand eine Idee und auch die Zeit ein paar Zeilen zu schreiben.

Wäre Dankbar

Falls noch etwas an der Beschreibung fehlt, dann bitte eben melden.

Content-Key: 98683

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

Ausgedruckt am: 29.03.2024 um 13:03 Uhr

Mitglied: bastla
bastla 07.10.2008 um 17:40:25 Uhr
Goto Top
Hallo bommerlunder1972 und willkommen im Forum!

Möchte per Makro eine Spalte markieren ...
Soll die Spalte tatsächlich vom Makro markiert werden (und, als Voraussetzung dafür, damit eigentlich im Makro bereits als Konstante eingetragen sein), oder soll das Makro in einer bereits vorweg (von Hand) markierten Spalte suchen?
Kann der Suchwert auch mehrfach vorkommen, und wenn ja, genügt es, das erste Auftreten dieses Wertes zu finden?
Welche Vorgaben gelten für die Zielspalte (in welche kopiert werden soll) - welche Spalte (ev auch fixer Abstand zur Suchspalte), einfügen wieder unterhalb von Zeile 100, ...?
Genügt es, wenn die Werte der Zellen unterhalb von B100 in die Zielspalte übertragen werden, oder werden auch die Formatierungen benötigt?

Ein Grundgerüst könnte jedenfalls so aussehen:
Suchbegriff = "Dein Suchbegriff"  
Zeile = 3         'Suche beginnt in dieser Zeile der markierten Spalte  
AbstandQuelle = 1 'Spaltenabstand für Quelle der Kopie  
AbstandZiel = 4   'Spaltenabstand für Ziel der Kopie  
ZeileZiel = 10    'Zeile der Zielspalte, ab welcher die Werte eingefügt werden sollen  

Spalte = ActiveCell.Column
Gefunden = False
Do While Cells(Zeile, Spalte).Value <> 0 And Zeile <= 65536
    If Cells(Zeile, Spalte).Value = Suchbegriff Then
        Gefunden = True
        Exit Do
    End If
    Zeile = Zeile + 1
Loop
If Gefunden Then
    Range(Cells(Zeile, Spalte).Offset(1, AbstandQuelle), Cells(Zeile, Spalte).Offset(0, AbstandQuelle).End(xlDown)).Copy
    Cells(ZeileZiel, Spalte).Offset(0, AbstandZiel).Activate
    ActiveSheet.Paste
Else
    MsgBox """" & Suchbegriff & """ konnte nicht gefunden werden!", vbCritical, "Nicht gefunden ..."  
End If
Grüße
bastla

P.S.: Der Titel dieses Beitrages lässt sich sicherlich noch etwas informativer formulieren (etwa "Excel - Per VBA Wert suchen und abhängig davon weitere Werte kopieren") ...
Mitglied: bommerlunder1972
bommerlunder1972 07.10.2008 um 18:54:10 Uhr
Goto Top
Vielen Dank schon mal für die prompte Antwort.

Zu den Fragen:

Soll die Spalte tatsächlich vom Makro markiert werden (und, als Voraussetzung dafür, damit eigentlich im Makro bereits als Konstante eingetragen sein), oder soll das Makro in einer bereits vorweg (von Hand) markierten Spalte suchen?

Die Markierung soll lediglich als Suchkriterium dienen. Vielleicht ist sowas auch per Quelltext möglich. Der gesuchte Wert soll aus einer Spalte heraus gesucht werden.

Kann der Suchwert auch mehrfach vorkommen, und wenn ja, genügt es, das erste Auftreten dieses Wertes zu finden?

Falls es möglich ist die Suche auf eine Spalte zu minimieren, ist der gesuchte Wert nur einmal vorhanden.

Welche Vorgaben gelten für die Zielspalte (in welche kopiert werden soll) - welche Spalte (ev auch fixer Abstand zur Suchspalte), einfügen wieder unterhalb von Zeile 100, ...?

Die Vorgabe kann Fix gestaltet werden. Einfügen ab der Zeile G16.

Genügt es, wenn die Werte der Zellen unterhalb von B100 in die Zielspalte übertragen werden, oder werden auch die Formatierungen benötigt?

Hier reichen die Werte. Die Zellen sind Standard formatiert.

Werde mich gleich an die Arbeit machen und die Geschichte versuchen mit deinem Grundgerüst umzusetzen. Mal schauen wie weit ich komme.
Komme halt aus der Netzwerkwelt und habe von VBA wenig Ahnung. Bin einfach für jede Hilfe dankbar.

Danke nochmal
Mitglied: bastla
bastla 07.10.2008 um 21:23:59 Uhr
Goto Top
Hallo bommerlunder1972!

In der folgenden Version wird der Suchbegriff ("Dein Suchbegriff") in jener (einen) Spalte gesucht, in der sich der Zellcursor beim Start des Makros befindet. Die Suche beginnt in der angegebenen Zeile (3) und endet
- wenn der Suchbegriff gefunden wurde (exakte Übereinstimmung mit Berücksichtigung Groß-/Kleinschreibung) oder
- wenn die erste leere Zelle in der Suchspalte erreicht wird oder
- wenn die Zeile 65536 (letzte Zeile für Excel < 2007) erfolglos durchsucht wurde.

Unter der Annahme einer Fundstelle A100 wird mit der durch "AbstandZeileQuelle" (1) und "AbstandSpalteQuelle" (1) festgelegten Zelle - daher im Beispiel ab B101 - beginnend der mit zusammenhängenden Daten gefüllte Rest der Spalte kopiert (also von B101 bis zur letzten Zelle der Spalte B vor einer leeren Zelle oder bis B65536). Da es ohnehin keine besondere Formatierung gibt, erfolgt einfach ein "Copy" inkl. Rahmen und Formaten. Hinweis: Sollte die Möglichkeit bestehen, dass sich die Fundstelle bereits in Zeile 1 befindet, müsste der zu kopierende (Quell-)Bereich mit einer anderen Technik festgelegt ewrden.

Eingefügt werden die Zellen ab "SpalteZiel/ZeileZiel" (G16) - der Vorgang entspricht einem manuell durchgeführten "Copy/Paste".

Suchbegriff = "Dein Suchbegriff"  
Zeile = 3               'Suche beginnt in dieser Zeile der markierten Spalte  
AbstandSpalteQuelle = 1 'Spaltenabstand für Quelle der Kopie (A100 -> B100)  
AbstandZeileQuelle = 1  'Zeilenabstand für Quelle der Kopie  (     -> B101)  
SpalteZiel = "G"        'Spalte für Ziel der Kopie  
ZeileZiel = 16          'Zeile für Ziel der Kopie  

Spalte = ActiveCell.Column
Gefunden = False
Do While Cells(Zeile, Spalte).Value <> "" And Zeile <= 65536  
    If Cells(Zeile, Spalte).Value = Suchbegriff Then
        Gefunden = True
        Exit Do
    End If
    Zeile = Zeile + 1
Loop
If Gefunden Then
    Range(Cells(Zeile, Spalte).Offset(AbstandZeileQuelle, AbstandSpalteQuelle), Cells(Zeile, Spalte).Offset(AbstandZeileQuelle-1, AbstandSpalteQuelle).End(xlDown)).Copy
    Cells(ZeileZiel, SpalteZiel).Activate
    ActiveSheet.Paste
Else
    MsgBox """" & Suchbegriff & """ konnte nicht gefunden werden!", vbCritical, "Nicht gefunden ..."  
End If
Grüße
bastla
Mitglied: bommerlunder1972
bommerlunder1972 08.10.2008 um 17:15:32 Uhr
Goto Top
Hallo zusammen,

funktioniert noch nicht ganz.
Hatte gerade erst die Zeit gefunden um die Geschichte auszuprobieren.
Es gibt noch Probleme mit dem Suchbegriff.
Ich müßte nach einem Datum incl. Zeitstempel suchen, was folgendermaßen formatiert ist.
12.03.2009 12:00:00
Ich glaube, das es so ohne weiteres gar nicht möglich ist.
Wenn doch, würde es mich natürlich freuen....
Ich habe die Variable als String deklariert.
Und wenn ich die Schleife zum Suchen dann laufen lasse, läuft das Script über die angegebene Stelle hinaus.
Habe gerade schon mal geschaut wie es mit einer Datumsfunktion aussieht um aus diesem Datum und Zeitstempel eine echte Zahl zu machen, bin abernicht fündig geworden.
Hat jemand eine Idee...?

Vielen Dank an bastla für die geleistete unterstützung
Hat mir bis jetzt sehr geholfen
Mitglied: bastla
bastla 08.10.2008 um 19:17:13 Uhr
Goto Top
Hallo bommerlunder1972!

Ich müßte nach einem Datum incl. Zeitstempel suchen, was folgendermaßen formatiert ist.
12.03.2009 12:00:00
Wenn der Wert offensichtlich von Excel als Datum/Zeit interpretiert wird, sollte es mit folgendem Suchbegriff klappen:
Suchbegriff = CDate("12.03.2009 12:00:00")  
Der umgekehrte Weg ("eine echte Zahl machen") sollte zwar auch funktionieren ("12:00:00" wird dann zu 0,5 - Zeitangaben werden als Bruchteile von Tagen gespeichert - und der Datumswert entspricht der Anzahl der Tage ab dem 1.1.1900, also 39.884, daher wäre die gesuchte Zahl 39884,5), aber lesbarer bleibt es sicherlich bei Behandlung als Datums/Zeitwert.

Grüße
bastla
Mitglied: bommerlunder1972
bommerlunder1972 09.10.2008 um 20:20:29 Uhr
Goto Top
Vielen Dank für deine Hilfe.
Hat alles funktioniert.
Ich frage mich nur, was ich für die Zukunft am besten machen kann, um Excel in Verbindung mit VBA auf den Schirm zu bekommen.
Wird in beruflicher Hinsicht immer wichtiger...

Kaufe ich Literatur...?
Wenn ja, kann jemand was empfehlen?
Am besten, denke ich mit Beispielen usw.

Belege ich einen Lehrgang in diese Richtung?
Diese sind sehr teuer und aus der Vergangenheit weiß ich das 80% am Dozenten liegt.

Gibt es im Netz entsprechende Seiten, wo man praktische Beispiele laden kann und auch daran üben kann...?

Oder wächst man einfach mit den Aufgaben...?

Grüße
Bommerlunder1972

Bin Dankbar für jede Antwort