Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Einlesen CSV Datei Formatierung beibehalten

406 views
Skip to first unread message

Clarckkent

unread,
May 5, 2009, 6:08:18 AM5/5/09
to
Hallo Zusammen,
wenn ich eine CSV Datei per Excek-VBA einlese, werden die führenden Nullen
nicht eingelesen. Kann mir eventuell jemand einen Tip geben. Danke.

While Not EOF(1)
n = n + 1
Line Input #1, z
a = Split(z, Chr(9))
If Val(a(1)) <> Cells(n - 1, 2) Then
For i = 0 To UBound(a)
Cells(n, i + 1) = a(i)
Next i
Else
n = n - 1
End If
Wend
Close #1

--
Best regards
Clark

Martin Hentrich

unread,
May 5, 2009, 6:17:45 AM5/5/09
to
On Tue, 5 May 2009 03:08:18 -0700, Clarckkent
<Clarc...@discussions.microsoft.com> wrote:

>werden die f�hrenden Nullen

>nicht eingelesen. Kann mir eventuell jemand einen Tip geben.

Wie ist denn das entsprechende Feld der csv-Datei als Text definiert,
z.B. mittels "..."?

Martin
--
Eure Rede aber sei: Ja, ja; nein, nein.
Was dar�ber ist, das ist vom �bel.
[Mt. 5, 37]

Clarckkent

unread,
May 5, 2009, 6:56:04 AM5/5/09
to
Hallo Martin,
in der CSV Datei steht z.B. 0001 oder 031. Daraus macht Excel beim einlesen
1 bzw. 31. Also die führenden nullen werden einfach abgeschnitten.

--
Best regards
Clark


"Martin Hentrich" wrote:

> On Tue, 5 May 2009 03:08:18 -0700, Clarckkent
> <Clarc...@discussions.microsoft.com> wrote:
>

> >werden die führenden Nullen

> >nicht eingelesen. Kann mir eventuell jemand einen Tip geben.
>
> Wie ist denn das entsprechende Feld der csv-Datei als Text definiert,
> z.B. mittels "..."?
>
> Martin
> --
> Eure Rede aber sei: Ja, ja; nein, nein.

> Was darüber ist, das ist vom Übel.
> [Mt. 5, 37]
>

Andreas Killer

unread,
May 5, 2009, 7:22:50 AM5/5/09
to
On 5 Mai, 12:08, Clarckkent <Clarckk...@discussions.microsoft.com>
wrote:

> wenn ich eine CSV Datei per Excek-VBA einlese, werden die führenden Nullen
> nicht eingelesen. Kann mir eventuell jemand einen Tip geben. Danke.

Das Problem liegt nicht beim Einlesen sondern bei der Zuweisung zur
Zelle. Ist die als "Standard" (oder in einem Zahlenformat) formiert,
dann wandelt Excel einen Text "0001" als Zahl 1 um.

Wenn Deine Zahlen mit führender Null immer an der gleichen Stelle
sind, dann kannst Du die Spalte einfach als Text vor dem Einlesen
formatieren. Andernfalls musst Du das Format via VBA einstellen, z.B.
so:

> While Not EOF(1)
>     n = n + 1
>     Line Input #1, z
>     a = Split(z, Chr(9))
>             If Val(a(1)) <> Cells(n - 1, 2) Then
>                 For i = 0 To UBound(a)

if Left(a(i),1) = "0" then
Cells(n, i + 1).NumberFormat = "@"
endif


>                 Cells(n, i + 1) = a(i)
>                 Next i
>             Else
>             n = n - 1
>             End If
>  Wend
> Close #1

Andreas.

Martin Hentrich

unread,
May 5, 2009, 7:38:09 AM5/5/09
to
On Tue, 5 May 2009 03:56:04 -0700, Clarckkent
<Clarc...@discussions.microsoft.com> wrote:

>in der CSV Datei steht z.B. 0001 oder 031. Daraus macht Excel beim einlesen

>1 bzw. 31. Also die f�hrenden nullen werden einfach abgeschnitten.

Beim Import wird automatisch ein Standardformat angenommen, Excel
macht dann aus allen Daten, die als Zahl darstellbar sind, auch eine
Zahl. Im Textimportassistenten kannst du jedoch das Format �ndern und
so eine Textdarstellung, also incl. der f�hrenden Nullen erzwingen.

Wie ich dachte, reicht dazu leider die Formatierung mit " " nicht
aus.

Im Makro eines solchen Importes steht dann z.B.:

Workbooks.OpenText Filename:="C:\Users\test.txt", Origin _
:=xlWindows, StartRow:=1, DataType:=xlDelimited,
TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True,
Semicolon:=True, _
Comma:=False, Space:=False, Other:=False,
FieldInfo:=Array(Array(1, 2), _
Array(2, 1), Array(3, 2), Array(4, 1))

In der Feldinfo bedeutet (..,2) Text und (..,1) Zahl.

Martin
--
Eure Rede aber sei: Ja, ja; nein, nein.

Clarckkent

unread,
May 5, 2009, 7:56:30 AM5/5/09
to
Vielen Dank zusammen!!
Es hat geklappt.

Noch eine Frage: Wie kann ich dem vba code sagen, das es erst ab zeile 4 des
Textdokumentes importieren soll?
Vielen dank nochmal.

--
Best regards
CK

Andreas Killer

unread,
May 5, 2009, 9:52:52 AM5/5/09
to
Clarckkent schrieb:

> Vielen Dank zusammen!!
> Es hat geklappt.

Sehr schön.

> Noch eine Frage: Wie kann ich dem vba code sagen, das es erst ab zeile 4 des
> Textdokumentes importieren soll?

Hmm, bist Du also noch nicht so bewandert in VBA?

Du läßt einen Zähler mitlaufen und machst eine Abfrage "if Zähler >= 4
then", das wäre schon alles.

dim Cnt as Long

Cnt = 0
While Not EOF(1)
Cnt = Cnt + 1
If Cnt >= 4 Then


n = n + 1
Line Input #1, z
a = Split(z, Chr(9))
If Val(a(1)) <> Cells(n - 1, 2) Then
For i = 0 To UBound(a)

If Left(a(i), 1) = "0" Then _


Cells(n, i + 1).NumberFormat = "@"

Cells(n, i + 1) = a(i)
Next i
Else
n = n - 1
End If
End If
Wend
Close #1

BTW, das nächste Mal bitte die ganze Routine posten, das macht uns das
Helfen und Dir das spätere Einfügen des Codes auch einfacher. Danke.

Andreas.

0 new messages