[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『CSVファイルのインポート:前ゼロを入れたい』(MOODY)
CSVファイルのインポート時に前ゼロを入れたいのですが。
CSV形式のファイルをインポートすると、文字データの 01 は数値の 1 になってしまいます。前ゼロを取らずに、文字データ 01 としてセルに入れるにはどうすればよいか教えてください。
EXCELで設定しないなら、文字データをどのように定義すればよいか?
EXCELで、その条件を保存したシートに「外部データの取込み」として
インポートできるか?
解りにくい表現で申し訳ありませんがよろしくお願いします。
(MOODY)
エクセルでメニューバーの「外部データの取り込み」→「データ取り込み」を 選択し、CSVファイルを指定して「元のデータ形式」は「カンマやタブ・・・」に チェックを入れ「次へ」を押し、「区切り文字」は「カンマ」にチェックを入れ 「次へ」を押し、「データプレビュー」の数字の列を選択し「列のデータ形式」の 「G/標準」ではなく「文字列」にチェックを入れ「完了」を押して取り込むと 文字列となりゼロは消えません。(すーさん)
「数字のゼロを文字列として・・・」という意味は、取り込んだあとのセルの書式設定が 文字列になるということではなく、数字のままでゼロ表示をしたいということですか? それならば、セルの書式設定で「ユーザー定義」の「種類」に「00000」のように 桁数分ゼロを指定しておいて、CSVデータを取り込むとできますが・・・・・(すーさん)
こちらは事務局です。 以前の書き込みを消さないで、下に追加で書き込んでください。 一応復元しましたが、間違いがあるかもしれません。 (kazu)
やはりCSVデータを取り込むときに「G/標準」を「文字列」にして取り込まないと ゼロを表示させることは困難なようです。 担当の方に、取り込みのウィザードの「データプレビュー」のとき1列目の 「G/標準」が黒くなっているとき、Shiftキーを押しながら、1番右の列の「G/標準」を 押すと全部が黒くなりますので、「文字列」にチェックを入れて取り込むという操作を お願いすることは無理でしょうか?
取り込むデータの数字の列番号や桁数が決まっているのでしたら、 取り込んだあとで、マクロにより書式設定の変更で文字列にしたり、 桁数分ゼロを並べたりできると思うのですが・・・ シートの隅にコマンドボタンを作成しておき、クリックすれば書式変更の マクロが実行されたら処理としては楽だと思います。(すーさん)
すーさん、ありがとうございます。取り込むデータの列番号、列数は決まっています。 1件のレコードで、例えばAからGまでは固定、Hからはレコードにより、有効列が 幾つか有り、そのあとは固定長のスペースが入った、無効列です。もちろん、 数値データとしてゼロを消したい列もあります。マクロによる書式設定とコマンドボタン について調べます。何か良いアドバイスがあれば、またお願いします。操作の簡素化 として、書式は固定されデータがないシートに、CSVデータをインポートし、一部修正後 再度別CSVファイルとして作成するような操作をできるだけ自動化したいと思います。
「CSV取り込み」というコマンドボタンを作り、クリックするだけで データを取り込めるよう考えてみました。 コマンドボタンのコードは下のように指定しました。 Private Sub CommandButton1_Click() Application.Run ("CSV取り込み") ←実行するマクロ名を指定しています。 End Sub
シートのセルの書式を「文字列」にしても、手動でCSVファイルを取り込むと、やはり 数字のゼロが省略されてしまうので、マクロを作成して実行するとゼロが表示されました。 ただ連続列の場合はOKなのですが、飛び飛びの列のときは「文字列」でも ゼロが消えますので、ユーザー定義で「0000」としてみるとOKでした。 「CSV取り込み」のマクロのコードを下に記載しますので、 モジュールにコピーして応用してみて下さい。
Sub CSV取り込み() '新しいシートを追加し、セルの書式設定をする '(仮にA〜C列を「文字列」に、F列とH列を「ユーザー定義」にしました) Sheets.Add Range("A:C").Select Selection.NumberFormatLocal = "@" Range("F:F,H:H").Select Selection.NumberFormatLocal = "0000"
'追加したシートにCSVファイルを取り込む '(仮にCドライブの直下にある「Book2.csv」という名前のファイル) With ActiveSheet.QueryTables.Add(Connection:= _ "TEXT;C:\Book2.csv", Destination:= _ Range("A1")) .Name = "Book2" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .TextFilePromptOnRefresh = False .TextFilePlatform = 932 .TextFileStartRow = 1 .TextFileParseType = xlDelimited .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = True .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = True .TextFileSpaceDelimiter = False .TextFileColumnDataTypes = Array(2, 2, 2) .TextFileTrailingMinusNumbers = True .Refresh BackgroundQuery:=False End With End Sub
データ列が多くて大変でしょうが、ゼロを表示させる列のみ細かく指定すれば 大丈夫だと思いますので頑張って下さい。(すーさん)
私もマクロしかないと思っていましたが先に書かれてしまいました。 ありがとうございます。
このCSVファイルがどこで発生するのかが良くわからないのと、 前ゼロの[文字]にしたという部分だけが少し気になります。
おまけ、私は↓この方式を使っています。
Private Sub CommandButton1_Click() CSV取り込み ←実行するマクロ名を指定 End Sub
(kazu)
kazuさん、もしマクロの中の「CSVファイル名」の記述の部分を 入力画面より「パス付きで入力されたファイル名」を代入することが できればよいと思うのですが、私には記述の仕方がわかりません。 ご存知でしたら、勉強のため教えてもらえませんか? 人の質問ボードなのに厚かましいと思いますが、よろしくお願い致します。(すーさん)
手でパス名+CSVファイル名を入力するには↓のように、InputBoxを使います。 関係する部分だけ下に書きます。(kazu)
'追加したシートにCSVファイルを取り込む 'ブックがあるフォルダにあるBook2.csvを取り込む ret = InputBox("CSVファイル名を入力してください。") If Len(ret) = 0 Then MsgBox "キャンセルされました" Exit Sub End If csvfile = "TEXT;" & ret With ActiveSheet.QueryTables.Add(Connection:= _ csvfile, Destination:= _
私個人としては、手で入力するのは嫌いなので、↓のように同じフォルダにある CSVファイルを使うようにするのが好みです。
'追加したシートにCSVファイルを取り込む 'ブックがあるフォルダにあるBook2.csvを取り込む wpath = ActiveWorkbook.Path csvfile = "TEXT;" & wpath & "\" & "Book2.csv" With ActiveSheet.QueryTables.Add(Connection:= _ csvfile, Destination:= _
kazuさん、ありがとうございました。 MOODYさん、ret と wpath を利用してマクロ文に下のものを追加・修正すれば、 ブックがあるフォルダにある任意のCSVファイルを取り込むことができます。
Dim ret As String Dim wpath As string
ret = InputBox("CSVファイル名を入力して下さい。") If Len(ret) = 0 Then MsgBox "キャンセルされました" Exit Sub End If wpath = ActiveWorkbook.Path csvfile = "TEXT;" & wpath & "\" & ret & ".csv" With ActiveSheet.QueryTables.Add(Connection:= _ csvfile, Destination:= _ Range("A1")) .Name = ret
これで少しは処理が簡単にできるのではないでしょうか?(すーさん)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.