[[20030513200016]] 『CSVファイルのインポート:前ゼロを入れたい』(MOODY) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『CSVファイルのインポート:前ゼロを入れたい』(MOODY)

CSVファイルのインポート時に前ゼロを入れたいのですが。

CSV形式のファイルをインポートすると、文字データの 01 は数値の 1 になってしまいます。前ゼロを取らずに、文字データ 01 としてセルに入れるにはどうすればよいか教えてください。

EXCELで設定しないなら、文字データをどのように定義すればよいか?

EXCELで、その条件を保存したシートに「外部データの取込み」として
インポートできるか?

解りにくい表現で申し訳ありませんがよろしくお願いします。
(MOODY)


 エクセルでメニューバーの「外部データの取り込み」→「データ取り込み」を
 選択し、CSVファイルを指定して「元のデータ形式」は「カンマやタブ・・・」に
 チェックを入れ「次へ」を押し、「区切り文字」は「カンマ」にチェックを入れ
 「次へ」を押し、「データプレビュー」の数字の列を選択し「列のデータ形式」の
 「G/標準」ではなく「文字列」にチェックを入れ「完了」を押して取り込むと
 文字列となりゼロは消えません。(すーさん)

すーさんへ、ご回答ありがとうございます。実は、「外部データの取り込み」で「列のデータ形式」を「G/標準」のまま、数字のゼロを「文字列」として取り込みたいのです。なので、もとのCSVデータを作るときにどのようにかする、または、インポートするEXCELシート側で列に対して、あらかじめなんらかの固定的な定義をしておくような方法はないでしょうか?

 「数字のゼロを文字列として・・・」という意味は、取り込んだあとのセルの書式設定が
 文字列になるということではなく、数字のままでゼロ表示をしたいということですか?
 それならば、セルの書式設定で「ユーザー定義」の「種類」に「00000」のように
 桁数分ゼロを指定しておいて、CSVデータを取り込むとできますが・・・・・(すーさん)

 こちらは事務局です。
 以前の書き込みを消さないで、下に追加で書き込んでください。
 一応復元しましたが、間違いがあるかもしれません。
(kazu)

kazuさん、書き込みを消して申し訳ありませんでした。すーさん、ありがとうございます。数字のままではなく、文字列に変換してゼロを表示して取り込みたいのです。実は、CSVファイルのデータ項目が100個(列)以上あり、CSVデータを扱う人間がEXCEL(いや、パソコン操作)を理解できないので、できる限り、操作を少なくしたいのです。よろしくお願いします。

 やはり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

 これで少しは処理が簡単にできるのではないでしょうか?(すーさん)

皆さんありがとうございます。EXCELのマクロも初めてなので、勉強させていただきます。
実際に処理としては、VBで作る部分もあるので、VB中で、DBグリッドなどを使って
やる方法と一緒に検討します。(MOODY)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.