Liebe VBA-Community,
ergänzend zu meiner Frage hier: http://www.vba-forum.de/forum/View.aspx?ziel=60061-Makro_gesucht
Da ich o.a. Beitrag als gelöst markiert habe, meine Frage in diesem Beitrag noch einmal:
Ich habe die Ausgabe nun etwas verändert. Dabei und bei der Verwendung von Exchtdaten ist mir aufgefallen, dass das Makro bei der Ausgabe von Zahlen mit drei Kommastellen, das Komma weglässt.
D.h. dass z.B. aus 265.559,888 (Input) 265.559.888 (Output) werden.
Option Explicit
Public out As Range 'erste Zelle in Ausgabetabelle
Public ctZ As Integer 'Zeile in Ausgabetabelle
Public ctS As Integer 'Spalte in Ausgabetabelle
Sub durchlauf()
Dim firstpos As Range 'erste Zelle in Eingabetabelle
Dim ze As Integer 'Zeile in Eingabetabelle
Dim sp As Integer 'Spalte in Eingabetabelle
Dim aktSP As String 'Inhalt erste Zeile der aktuellen Spalte
Dim aktZE As String 'Inhalt erste Spalte der ersten Zeile
Dim wert As String 'Inhalt der aktuellen Zelle
Set firstpos = Sheets("input").Range("A1")
Set out = Sheets("output").Range("A1")
ze = 0
sp = 0
ctZ = 0
ctS = 0
While firstpos.Offset(0, sp + 1).Value <> 0 'solange es spalten gibt
sp = sp + 1
While firstpos.Offset(ze + 1, 0).Value <> 0 'solange es zeilen gibt
ze = ze + 1
wert = firstpos.Offset(ze, sp).Value
If wert <> Str("0") And wert <> "" Then 'wenn etwas in Zeile Zeile steht
aktSP = firstpos.Offset(0, sp).Value
aktZE = firstpos.Offset(ze, 0).Value
ausgabe aktSP, aktZE, wert
End If
Wend
ze = 0
ctS = 0
'ctZ = ctZ + 1
Wend
End Sub
Function ausgabe(ze, sp, wert)
out.Offset(ctZ, ctS).Value = ze
out.Offset(ctZ, ctS + 1).Value = sp
out.Offset(ctZ, ctS + 2).Value = wert
ctZ = ctZ + 1
End Function
Input:
|
Spalte1 |
Spalte2 |
Spalte3 |
Spalte4 |
Zeile1 |
265.559,888 |
60,000 |
|
10,000 |
Zeile2 |
|
40,000 |
20,000 |
40,000 |
Zeile3 |
30,000 |
|
10,000 |
20,000 |
Zeile4 |
|
|
70,000 |
20,000 |
Zeile5 |
50,000 |
|
|
10,000 |
Output:
Spalte1 |
Zeile1 |
265.559.888 |
Spalte1 |
Zeile3 |
30 |
Spalte1 |
Zeile5 |
50 |
Spalte2 |
Zeile1 |
60 |
Spalte2 |
Zeile2 |
40 |
Spalte3 |
Zeile2 |
20 |
Spalte3 |
Zeile3 |
10 |
Spalte3 |
Zeile4 |
70 |
Spalte4 |
Zeile1 |
10 |
Spalte4 |
Zeile2 |
40 |
Spalte4 |
Zeile3 |
20 |
Spalte4 |
Zeile4 |
20 |
Spalte4 |
Zeile5 |
10 |
Wie kann ich das verhindern?
Also Laie habe es mit Dim Wert As Double versucht, aber dann sind die Typen unverträglich.
Danke für eure Hilfe!
LG Bernhard
|