6

Excel 2000 で VBA を使用してセミコロンで区切られた CSV ファイルを開くにはどうすればよいですか?

サンプルデータ

An ID;TEST20090222
A Name;Firstname Surname
A Date;11.05.2000

Country:;SomeCountryName
Currency;EUR
CostA;
CostB;
CostC;
Part1;10;20;30
Part2;;;;
Part3;34;56;87

コード

Excel 2003 11.8231.8221 SP3 と VBA 6.5.1025 では、次の VBA コードでセミコロン区切りのファイルを開くことができます。

Workbooks.OpenText filename:=myFilename, _
    DataType:=xlDelimited, Semicolon:=True, Local:=True

ただし、Excel 2000 9.0.8961 SP1 で VBA 6.5.1025 を使用して同じコードを実行すると、次のエラーが発生します。

コンパイル エラー: 名前付き引数が見つかりません

これは -- 私が思うに -- Excel 2000 は名前付き引数 "Local" を認識していないためです。

そのため、「Local:=True」の部分を削除しました。しかし、問題は、CSV ファイルの行全体が、セミコロンで区切られた個別の部分に分割されるのではなく、1 つのセルに書き込まれることです。

インターネットで解決策を検索しましたが、有用で簡潔なものは見つかりませんでした。

何か案は?

[2009年2月17日更新]

マクロレコーダーでユーザーlcからの提案を試しました。しかし、結果は混乱を招きました。

メニューの File->Open... で CSV ファイルを開き、CSV ファイルを選択すると、セミコロンで区切られたデータが正しく解析されます。記録されたコードは次のように単純です。

Workbooks.Open filename:= _
               "D:\testdata\Example 01 CSV\input.csv"

しかし、その VBA コードをマクロで使用すると、各行が再び 1 つのセルに収まってしまいます。

ユーザー barrowcからの提案に従って、Windows の [地域と言語のオプション] 設定も [ドイツ語 (スイス)] から [英語 (米国)] に変更しました。Excelを再起動しても何も変わらず、同じ問題が発生しました。

ユーザー Remouのシステムでなぜ動作しているのか不思議です。どの地域と言語の設定がありますか?

4

8 に答える 8

4

[2009.02.22更新]

それまでの間、Workbooks.OpenText を使用する代わりに、インポート関数を自分で作成することで問題を解決しました。

CSV ファイルをテキスト ファイルとして開き、1 行ずつ読み取り、各行をセミコロンで区切られた要素に分割し、各要素をセルに書き込みます。

Sub ImportCSVFile(filepath As String)
    Dim line As String
    Dim arrayOfElements
    Dim linenumber As Integer
    Dim elementnumber As Integer
    Dim element As Variant

    linenumber = 0
    elementnumber = 0

    Open filepath For Input As #1 ' Open file for input
        Do While Not EOF(1) ' Loop until end of file
            linenumber = linenumber + 1
            Line Input #1, line
            arrayOfElements = Split(line, ";")

            elementnumber = 0
            For Each element In arrayOfElements
                elementnumber = elementnumber + 1
                Cells(linenumber, elementnumber).Value = element
            Next
        Loop
    Close #1 ' Close file.
End Sub

Shasur からインスピレーションを得ました: http://vbadud.blogspot.com/2007/06/vba-read-text-files-with-leading.html

ユーザー RemouWorkbooks.OpenTextのシステムでは動作するように見えても、自分のシステムでは動作しない理由はまだわかりません。オペレーティング システムの言語 (英語) と地域と言語の設定 (ドイツ語、スイス) に関係があるのではないかと思いますが、よくわかりません。

とにかく、回避策は私にとってはうまくいきます。あなたの提案と助けてくれてありがとう!

于 2009-03-24T16:27:38.650 に答える
2

これはExcel2000で機能することがわかりました。

Workbooks.OpenText filename:=myFilename, _
    DataType:=xlDelimited, Semicolon:=True
于 2009-02-16T18:00:41.503 に答える
2

確かではありませんが、マクロを記録して同じことを行い、それが生成する VBA コードを確認することができます。何が欠けているかについてのヒントがそこにあるかもしれません。

于 2009-02-16T17:45:42.633 に答える
2

もう 1 つの回避策 - .csv ファイルの名前を .txt に変更し、OpenText メソッドを使用します。

于 2010-05-27T14:24:40.947 に答える
2

Excel 2000のOpenTextメソッドは次のとおりです。

OpenText メソッド

解析されたテキスト ファイル データを含む 1 つのシートを含む新しいワークブックとして、テキスト ファイルを読み込んで解析します。

構文

.OpenText( Filename, Origin, StartRow, DataType, TextQualifier, ConsecutiveDelimiter, Tab, Semicolon, Comma, Space, Other, OtherChar, FieldInfo, DecimalSeparator, ThousandsSeparator )

ソース

Excel 2003 バージョンは次のとおりです。

OpenText メソッド [Excel 2003 VBA 言語リファレンス]

解析されたテキスト ファイル データを含む 1 つのシートを含む新しいワークブックとして、テキスト ファイルを読み込んで解析します。

.OpenText( FileName, Origin, StartRow, DataType, TextQualifier, ConsecutiveDelimiter, Tab, Semicolon, Comma, Space, Other, OtherChar, FieldInfo, TextVisualLayout, DecimalSeparator, ThousandsSeparator, TrailingMinusNumbers, Local )

ソース

これLocalは実際には Excel 2003 の新しいパラメータであり、Excel 2000 では機能しません。

誤った動作の原因についてはわかりません。パラメータは次のLocalように定義されます。

ローカル オプションのバリアント。マシンの地域設定を区切り記号、数値、およびデータの書式設定に使用する必要がある場合は、 Trueを指定

Excel 2000 PC の地域設定を再確認し、データが誤って解釈される可能性があるものがないかどうかを確認することをお勧めします。また、 Excel 2000 メソッドでパラメータDecimalSeparatorとパラメータを明示的に指定してみて、それが役立つかどうかを確認してください。ThousandsSeparator

于 2009-02-16T22:30:42.853 に答える