Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1088to1092
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

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
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
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
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

362 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige