Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Teilbereich aus Zelle auslesen mit VBA

Teilbereich aus Zelle auslesen mit VBA
17.10.2007 22:23:08
Yves
Hallo zusammen,
https://www.herber.de/bbs/user/46855.xls
wie Ihr im beigefügten File sehen könnt, geht es darum eine Wertpapierliste welche wir von einer externen Quelle erhalten. In Spalte A befindet sich die WKN-Nummer in Spalte C ist der zugehörige Kurs mit der entsprechenden Währung ersichtlich. Damit ich diese Liste mit internen Zahlen vergleichen kann, muss ich der WKN-Nr. noch die zugehörige Währung anfügen, da es möglich ist, dass die selbe WKN-Nr. in mehreren Währungen auftaucht.
Dies habe ich, wie im Beispiel ersichtlich, nun mittels Excelformeln "Finden" + "Teil" + "Istfehler" gelöst (Spalte F). Ich würde dies nun gerne ohne Excelformeln in VBA lösen, habe jedoch momentan noch keine Ahnung wie und ob dies überhaupt geht.
Dies wäre die Anforderung:
- WKN in Spalte A vorhanden, muss nicht verändert werden.
- in Spalte C steht der Kurs mit vorangestellter Währung, welche ausgelesen werden sollte. Bei einigen Titeln (wie in Zeile 7) ist keine Währung mit gegeben worden. Es handelt sich hierbei jedoch immer um %-Kurse.
- Bei allen Kursen welche eine Währung drinn stehen haben, müsste ich nun die WKN-Nummer&"."&Währung heraussuchen und in eine neue Zelle schreiben. Bei den Kursen ohne Währung sollte in der neuen Zelle einfach die WKN-Nr. stehen.
Der jetzige Anstz mittels Excel-Formeln sucht in der Kurs-Zelle nach einem Leerschlag, wird dieser nicht gefunden (mittels istfehler-Formel abgefangen) wird in der Spalte F nur die WKN-Nr. eingetragen. Wird der Leerschlag gefunden, holt sich die Formel die WKN-Nr. und stellt dahinter einen Punkt und danach die ersten drei Zeichen der Kursspalte (Währung).
Wie gesagt möchte ich das ganze gerne per VBA-Code lösen, da dies in einen bereits bestehenden VBA-Ablauf eingefügt werden könnte.
Sollte es hierzu keine Möglichkeit geben, müsste ich mittels VBA-Code die Zellen mit den erwähnten Formeln befüllen um ans Ziel zu kommen...
Vielen Dank für Eure Mühe...
Gruss
Yves

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Nachfrage
17.10.2007 23:09:33
Chaos
Servus Yves,
welche Währungen sind denn möglich, nur Euro, oder auch andere und steht die Währung immer vor der Zahl wie im Bsp. ?
Gruß
Chaos

AW: Nachfrage
18.10.2007 08:22:30
Yves
Hallo Chaos,
danke für die Nachfrage.
Es sind auch andere Währungen als Euro möglich, ich könnte bei Bedarf eine Liste hinterlegen mit allen möglichen Währungen. Genau die Währung steht immer vor der Zahl und ist immer dreistellig.
Gruss
Yves

Anzeige
AW: Nachfrage
18.10.2007 08:52:00
Chaos
Servus Yves,
wenn die Währung immer vor dem Betrag steht und immer dreistellig ist, dann ist das kein Problem:
Als Ansatz:

Sub WKN()
Dim zeile As Long, letzte As Long
If Range("A65536").Value  "" Then
letzte = 65536
Else
letzte = Range("A65536").End(xlUp).Row
End if
For zeile = 1 To letzte
If Cells(zeile, 1).Value  "" Then
If Not IsNumeric(Left(Cells(zeile, 3).Value, 3)) Then
Cells(zeile, 6).Value = Cells(zeile, 1).Value & Left(Cells(zeile, 3).Value, 3)
End if
End if
Next zeile
End Sub


ist ungetestet, müsste aber funktionieren.
Gruß
Chaos

Anzeige
AW: Nachfrage
18.10.2007 14:53:00
Yves
Hallo Chaos,
dein Ansatz funktioniert einwandfrei, werde es heute Abend noch ausgiebig testen.
Vielen Dank für Deine Bemühungen. Somit ist die letzte Hürde zu meiner Depotabstimmung geschafft...
Gruss
Yves

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Teilbereich aus Zelle auslesen mit VBA


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xls)", wähle "Einfügen" und dann "Modul".

  3. Kopiere den folgenden VBA-Code in das Modul:

    Sub WKN()
       Dim zeile As Long, letzte As Long
       If Range("A65536").Value <> "" Then
           letzte = 65536
       Else
           letzte = Range("A65536").End(xlUp).Row
       End If
       For zeile = 1 To letzte
           If Cells(zeile, 1).Value <> "" Then
               If Not IsNumeric(Left(Cells(zeile, 3).Value, 3)) Then
                   Cells(zeile, 6).Value = Cells(zeile, 1).Value & "." & Left(Cells(zeile, 3).Value, 3)
               Else
                   Cells(zeile, 6).Value = Cells(zeile, 1).Value
               End If
           End If
       Next zeile
    End Sub
  4. Schließe den VBA-Editor und kehre zu Excel zurück.

  5. Führe das Makro aus: Gehe zu Entwicklertools > Makros, wähle WKN aus und klicke auf Ausführen.

Dieser VBA-Code durchsucht die Spalte A nach WKN-Nummern und liest die Währung aus der Spalte C aus. Wenn eine Währung vorhanden ist, wird die WKN mit der Währung kombiniert; andernfalls wird nur die WKN in die neue Zelle (Spalte F) geschrieben.


Häufige Fehler und Lösungen

  • Fehler: "Typenkonflikt"

    • Lösung: Stelle sicher, dass die Zellen in Spalte C tatsächlich Text enthalten und nicht leer oder nur numerisch sind.
  • Fehler: "Ausführungsfehler 1004"

    • Lösung: Überprüfe, ob die Spalten korrekt benannt sind. Der Code erwartet, dass WKN in Spalte A und die Preise in Spalte C stehen.
  • Fehler: "Falsche Währung"

    • Lösung: Achte darauf, dass die Währung immer dreistellig ist und direkt vor dem Betrag steht.

Alternative Methoden

Falls du keine VBA-Lösungen verwenden möchtest, kannst du auch die Excel-Funktionen nutzen:

  • Funktion TEIL: Mit dieser Funktion kannst du einen Teil einer Zelle auslesen.

    =WENNFEHLER(WENN(ISTZAHL(SUCHEN(" ",C1)),A1 & "." & TEIL(C1,1,3),A1),A1)

Diese Formel prüft, ob ein Leerzeichen in der Kursspalte vorhanden ist. Wenn ja, wird die WKN und die Währung kombiniert; andernfalls wird nur die WKN verwendet.


Praktische Beispiele

Angenommen, deine Daten sehen so aus:

A C
WKN1 EUR100
WKN2 90%
WKN3 USD200

Nach Ausführung des Makros oder der Formel in Spalte F könnte das Ergebnis so aussehen:

A C F
WKN1 EUR100 WKN1.EUR
WKN2 90% WKN2
WKN3 USD200 WKN3.USD

Tipps für Profis

  • Verwende benannte Bereiche: Um die Lesbarkeit zu erhöhen, kannst du benannte Bereiche in deinem VBA-Code verwenden.
  • Fehlerbehandlung: Implementiere On Error Resume Next, um mögliche Laufzeitfehler abzufangen und den Code robuster zu machen.
  • Optimiere die Performance: Deaktiviere die Bildschirmaktualisierung mit Application.ScreenUpdating = False vor dem Start des Codes und aktiviere sie nach dem Ende wieder.

FAQ: Häufige Fragen

1. Kann ich das Makro für mehrere Arbeitsblätter verwenden?
Ja, du kannst das Makro anpassen, um es auf mehrere Arbeitsblätter anzuwenden, indem du die Schleife so erweiterst, dass sie durch alle gewünschten Blätter iteriert.

2. Funktioniert dieser Code in Excel 2010?
Ja, der VBA-Code ist mit Excel 2010 und neueren Versionen kompatibel.

3. Wie kann ich den Code anpassen, um andere Währungen zu unterstützen?
Du kannst den Code erweitern, indem du eine Liste von Währungen hinzufügst und die Währungsprüfung entsprechend anpasst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige