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

Forumthread: Zahlen suchen und eine andere Spalte schreiben

Zahlen suchen und eine andere Spalte schreiben
Martin
Beispiel-Datei: https://www.herber.de/bbs/user/63480.xls
Guten Tag
Ich habe folgende Probleme, die ich gerne mit Makro erledigen würde, mir jedoch die Kenntnisse für fehlen:
1.) Die Zahl in rot sollte in die Spalte C (grün) geschrieben werden. Falls es mehrere Zeilen unterhalb der roten Zahl hat, einfach bei allen Zeilen die gleiche Zahl (z.B. C13 - C19: "1729")
2.) Aus Spalte D sollte nur die Zahl (meistens eine 119....) in die Spalte E (gelb markiert) geschrieben werden.
Für jegliche Hilfe danke ich schon herzlichst im voraus.
Martin
Anzeige
AW: Zahlen suchen und eine andere Spalte schreiben
28.07.2009 14:39:05
Tino
Hallo,
geht es hiermit?
Option Explicit Function ZahlAusString(varWert As Variant) Dim objReg Set objReg = CreateObject("VBScript.RegExp") With objReg .Pattern = "\D" .Global = True ZahlAusString = .Replace(varWert, "") End With If IsNumeric(ZahlAusString) Then ZahlAusString = ZahlAusString * 1 Set objReg = Nothing End Function Sub Test() Dim meAr1, meAr2 Dim Bereich As Range Dim A As Long Dim Wert With Sheets("Tabelle1") 'Tabellenname anpassen Set Bereich = .Range("A2", .Cells(.Rows.Count, 1).End(xlUp)) meAr1 = Bereich meAr2 = .Range(Bereich.Offset(0, 2), Bereich.Offset(0, 4)) Set Bereich = .Range(Bereich.Offset(0, 2), Bereich.Offset(0, 4)) End With For A = 1 To Ubound(meAr1) If IsNumeric(meAr1(A, 1)) And Not IsDate(meAr1(A, 1)) And meAr1(A, 1) <> "" Then Wert = meAr1(A, 1) ElseIf meAr1(A, 1) <> "" And IsDate(meAr1(A, 1)) Then meAr2(A, 1) = Wert meAr2(A, 3) = ZahlAusString(meAr2(A, 2)) End If Next A Bereich = meAr2 End Sub Gruß Tino
Anzeige
AW: Zahlen suchen und eine andere Spalte schreiben
29.07.2009 08:37:42
Martin
Hallo Tino
Besten Dank nochmals für den Code. Er funktioniert wunderbar. Leider ist er etwas zu kompliziert für mich, um selber nachzuvollziehen, was genau da abgeht.
Wäre es dir (oder jemand anders) evt. möglich, mir eine kurze Zeile-für-Zeile Beschreibung zu schicken, was denn genau wo passiert. Möglicherweise kann ich Teile davon für andere Makros auch gebrauchen....
Vielen herzlichen Dank schon im voraus.
Martin
Anzeige
AW: Zahlen suchen und eine andere Spalte schreiben
30.07.2009 08:24:54
Tino
Hallo,
so habe mal jede Menge Kommentare eingetragen, vielleicht Hilft Dir dies ja.
Option Explicit
'Funktion erwartet einen Wert von Typ Variant und 
'gibt als Rückgabe auch einen Varianten (zur Sicherheit) Datentyp. 
Function ZahlAusString(varWert As Variant)
Dim objReg
'einfach mal Google suchen nach: Reguläre Ausdrücke / Regular Expressions 
Set objReg = CreateObject("VBScript.RegExp")
With objReg
    .Pattern = "\D"
    .Global = True
    ZahlAusString = .Replace(varWert, "")
End With
If IsNumeric(ZahlAusString) Then ZahlAusString = ZahlAusString * 1
Set objReg = Nothing
End Function

Sub Test()
Dim meAr1, meAr2     '2 Array- Variablen Typ Variant 
Dim Bereich As Range 'Range Variable 
Dim A As Long        'Zähler 
Dim Wert             'Variant Variable 


With Sheets("Tabelle1") 'Tabellenname anpassen 
'Bereich ab A2 bis zur letzten gefüllten in Spalte A festlegen 
    Set Bereich = .Range("A2", .Cells(.Rows.Count, 1).End(xlUp))
'diesen Bereich in einem Array speichern 
    meAr1 = Bereich
'ein zweites Array anlegen, Spalte C bis E 
    meAr2 = .Range(Bereich.Offset(0, 2), Bereich.Offset(0, 4))
'Bereich auf Spalte C bis E festlegen 
    Set Bereich = .Range(Bereich.Offset(0, 2), Bereich.Offset(0, 4))
End With

'Schleife 1. Index bis zum letzten Index der Array 
For A = 1 To Ubound(meAr1)
    'ist Wert eine Zahl und kein Datum und nicht leer 
    If IsNumeric(meAr1(A, 1)) And Not IsDate(meAr1(A, 1)) And meAr1(A, 1) <> "" Then
     Wert = meAr1(A, 1) 'diesen Wert in einer Variablen speichern 
    ElseIf meAr1(A, 1) <> "" And IsDate(meAr1(A, 1)) Then 'Wert nicht leer und ist ein Datum 
     meAr2(A, 1) = Wert 'den gespeicherten wert in die Array schreiben 
     meAr2(A, 3) = ZahlAusString(meAr2(A, 2)) 'die Zahl mit der Funktion oben extrahieren 
    End If
    
Next A

Bereich = meAr2 'alle Daten in den Bereich zurückschreiben 
End Sub

Gruß Tino
Anzeige
AW: Zahlen suchen und eine andere Spalte schreiben
30.07.2009 10:09:53
Martin
Herzlichen Dank, Tino!
Das ist wirklich eine Riesenhilfe. Genial!
Viele Grüsse
Martin
Zahlen in andere Spalte übertragen
28.07.2009 14:39:58
Erich
Hi Martin,
zu 1.) erst mal eine Frage: Sollen wirklich die Farben maßgeblich sein?
Machbar wäre auch (sogar einfacher), alle Zahlen aus Spalte A zu übertragen.
Ziel wäre rechts neben allen Zahlen in Spalte B (also in Spalte C)
Woher kommen die Farben? Manuell oder per Makro?
Spalte A enthält außer den (roten) Zahlen nur Texte. Die Datums sind gar kleine Datumse, sondern Texte.
zu 2.)
Das ginge auch mit einer Formel ( von http://www.excelformeln.de/formeln.html?welcher=103 ):
 DE
5Amortisation 11918821191882

Formeln der Tabelle
ZelleFormel
E5{=SUMME((TEIL(0&D5;KGRÖSSTE(WENN(ISTZAHL(TEIL(0&D5;ZEILE($1:$256); 1)*1); ZEILE($1:$256); 1); ZEILE($1:$256)); 1)*1) * 10^(ZEILE($1:$256)-1))}
Enthält Matrixformel:
Umrandende
{ } nicht miteingeben,
sondern Formel mit STRG+SHIFT+RETURN abschließen!
Matrix verstehen


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Zahlen in andere Spalte übertragen
28.07.2009 14:52:09
Martin
Hallo Erich und Tino
Besten Dank für die Antworten.
@ Erich: im viel längeren Original gibt es keine Farben, die habe ich nur in der kurzen Beispiel-Datei eingefügt, d.h. die Farben sind gar nicht massgeblich, sondern nur zur Orientierung.
Die Zahlen in rot sind die Konto-Nummern mit den Buchungen in diesem Konto darunter. Ich möchte, dass bei allen Buchungszeilen die Konto-Nr. (rot) in Spalte C geschrieben wird, damit ich die Buchungs-Liste nach Konto-Nr. sortieren/auswerten kann.
Ich hoffe, ich habe das verständlich ausdrucken können.....
Besten Dank nochmals für deine Hilfe
Martin
Anzeige
AW: Zahlen in andere Spalte übertragen
28.07.2009 14:59:02
Tino
Hallo,
mein Code orientiert sich nicht an den Farben.
Gruß Tino
AW: Zahlen in andere Spalte übertragen
28.07.2009 15:11:06
Martin
Hallo Tino
Besten Dank für den Code. Er sieht etwas kompliziert aus für meine Vorkenntnisse, aber ich werde ihn heute abend Zeile für Zeile durchgehen.
Herzlichen Dank nochmals.
Martin
Zahlen übertragen und extrahieren
28.07.2009 15:15:41
Erich
Hi Martin,
willst du die Formel für die Zahlenextraktion in Spalte E verwenden?
Wenn ja, kannst du die Schleife über Spalte D und die Funktion (von Tino)
in diesem Makro weglassen:

Option Explicit
Sub UebertragKto()
Dim zz As Long, dblW As Double
For zz = 2 To Cells(Rows.Count, 1).End(xlUp).Row      ' Ende Sp. A
If Application.IsNumber(Cells(zz, 1)) Then dblW = Cells(zz, 1)
If Not IsEmpty(Cells(zz, 2)) Then Cells(zz, 3) = dblW
Next zz
For zz = 2 To Cells(Rows.Count, 4).End(xlUp).Row      ' Ende Sp. D
dblW = ZahlAusString(Cells(zz, 4))
If dblW  0 Then Cells(zz, 5) = dblW
Next zz
End Sub
Function ZahlAusString(varWert As Variant) As Double
Dim objReg As Object, varErg
Set objReg = CreateObject("VBScript.RegExp")
With objReg
.Pattern = "\D"
.Global = True
varErg = .Replace(varWert, "")
End With
If IsNumeric(varErg) Then ZahlAusString = varErg * 1 Else ZahlAusString = 0
Set objReg = Nothing
End Function
Noch eine Frage:
In der Beispielmappe ist es so, dass die gelben Zellen in Spalte E immer genau neben grünen Zellen stehen.
Ist das sicher immer so oder nur hier zufällig?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Zahlen übertragen und extrahieren
28.07.2009 15:36:20
Martin
Hallo Erich
Besten Dank nochmals. In jeder Buchungszeile hat es in der Beispielsdatei eine grüne und eine gelbe Zelle. Die grüne für die Konto-Nr. und die gelbe für die Vertragsnummer, die aus Spalte D gezogen werden soll, die leider aus der Nummer auch noch Text beinhaltet.
Ich werde mir das Makro heute abend mal intensiv anschauen, da es noch ein wenig kompliziert ausschaut für mich.
Danke für die Hilfe.
Martin
Anzeige
Zahlen übertragen + extrahieren
28.07.2009 19:41:22
Erich
Hi Martin,
so ist das vielleicht noch ein wenig einfacher und klarer:

Option Explicit
Sub UebertragKto()
Dim zz As Long, dblKto As Double, lngVertr As Long
For zz = 2 To Cells(Rows.Count, 1).End(xlUp).Row         ' bis Ende Sp. A
If Application.IsNumber(Cells(zz, 1)) Then
dblKto = Cells(zz, 1)                           ' Konto merken
ElseIf Not IsEmpty(Cells(zz, 2)) Then
Cells(zz, 3) = dblKto                           ' Konto eintragen
lngVertr = ZahlAusString(Cells(zz, 4))          ' Vertrag extrahieren
If lngVertr  0 Then Cells(zz, 5) = lngVertr   ' Vertrag eintragen
End If
Next zz
End Sub
Function ZahlAusString(varWert As Variant) As Long
Dim objReg As Object, varErg
Set objReg = CreateObject("VBScript.RegExp")
With objReg
.Pattern = "\D"
.Global = True
varErg = .Replace(varWert, "")
End With
If IsNumeric(varErg) Then ZahlAusString = varErg
Set objReg = Nothing
End Function
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Zahlen suchen und in andere Spalte übertragen


Schritt-für-Schritt-Anleitung

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

  2. Neues Modul hinzufügen: Klicke mit der rechten Maustaste auf "VBAProject (DeinDateiname)" und wähle Einfügen > Modul.

  3. Code einfügen: Kopiere und füge den folgenden Code in das Modul ein:

    Option Explicit
    Sub UebertragKto()
       Dim zz As Long, dblKto As Double, lngVertr As Long
       For zz = 2 To Cells(Rows.Count, 1).End(xlUp).Row ' bis Ende Sp. A
           If Application.IsNumber(Cells(zz, 1)) Then
               dblKto = Cells(zz, 1) ' Konto merken
           ElseIf Not IsEmpty(Cells(zz, 2)) Then
               Cells(zz, 3) = dblKto ' Konto eintragen
               lngVertr = ZahlAusString(Cells(zz, 4)) ' Vertrag extrahieren
               If lngVertr <> 0 Then Cells(zz, 5) = lngVertr ' Vertrag eintragen
           End If
       Next zz
    End Sub
    
    Function ZahlAusString(varWert As Variant) As Long
       Dim objReg As Object, varErg
       Set objReg = CreateObject("VBScript.RegExp")
       With objReg
           .Pattern = "\D"
           .Global = True
           varErg = .Replace(varWert, "")
       End With
       If IsNumeric(varErg) Then ZahlAusString = varErg
       Set objReg = Nothing
    End Function
  4. Makro ausführen: Schließe den VBA-Editor und kehre zu Excel zurück. Drücke ALT + F8, wähle UebertragKto und klicke auf Ausführen.


Häufige Fehler und Lösungen

  • Fehler beim Ausführen des Makros: Stelle sicher, dass die Makros in deinen Excel-Einstellungen aktiviert sind. Gehe zu Datei > Optionen > Trust Center und aktiviere die Makros.

  • Falsche Datenübertragung: Überprüfe, ob die Daten in der richtigen Spalte stehen. Die Spalte A sollte die Konto-Nummern enthalten, Spalte D die Vertragsnummern.


Alternative Methoden

Wenn du keine Makros verwenden möchtest, kannst du auch Formeln einsetzen. Zum Beispiel kannst du die Funktion SUMME oder WENN verwenden, um Werte aus einer Spalte zu übernehmen.

Eine Formel könnte wie folgt aussehen:

=WENN(ISTZAHL(A2);A2;"")

Diese Formel überprüft, ob in Zelle A2 eine Zahl steht und überträgt diese in die entsprechende Zelle.


Praktische Beispiele

  • Zahl in Spalte suchen: Wenn du in Spalte A nach einer bestimmten Zahl suchst, kannst du die Funktion VERGLEICH verwenden:

    =VERGLEICH(1729;A:A;0)
  • Wert in andere Spalte übertragen: Um den Wert aus Spalte D in Spalte E zu übertragen, kannst du einfach die folgende Formel in Zelle E1 schreiben:

    =D1

Tipps für Profis

  • Verwende INDEX und VERGLEICH zusammen, um flexibler nach Werten in einer Tabelle zu suchen und diese zu übertragen. Dies ist besonders nützlich, wenn du nicht nur nach einer festen Zahl suchst.

    =INDEX(B:B;VERGLEICH(1729;A:A;0))
  • Wenn du mit großen Datenmengen arbeitest, kann es sinnvoll sein, die Daten zuerst in Tabellenform zu formatieren. Dies erleichtert die Handhabung und die Anwendung von Formeln.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass nur Zahlen aus einer bestimmten Spalte übernommen werden?
Verwende die Funktion ISTZAHL, um sicherzustellen, dass nur Zahlen übernommen werden.

2. Was tun, wenn ich eine Fehlermeldung beim Ausführen des Makros erhalte?
Überprüfe die VBA-Einstellungen und stelle sicher, dass die Makros aktiviert sind. Wenn das Problem weiterhin besteht, überprüfe deinen Code auf Schreibfehler.

3. Kann ich auch Text in Zahlen umwandeln?
Ja, du kannst die Funktion ZahlAusString verwenden, um aus einem als Text gespeicherten Wert eine Zahl zu erzeugen.

4. Welche Excel-Version benötige ich für die beschriebenen Funktionen?
Die beschriebenen Funktionen und Makros sind in den meisten modernen Excel-Versionen (Excel 2010 und neuer) verfügbar.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige