[[20030503064410]] 『CSVファイル:指定の列幅で読み込ませるには』(音岳) ページの最後に飛ぶ

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

 

『CSVファイル:指定の列幅で読み込ませるには』(音岳)

CSVファイルを読み込む時に指定の列幅で読み込ませるには。

 毎日の定期作業として、コンマ区切りのCSVファイルを読み込みエクセル形式に変換して新たなエクセルファイルで保存しています。(エクセル2000)

 この時、列幅がエクセルの初期設定で表示されますので、見やすいように、毎回8列を手で1列ずつ適切な幅に整形しています。(最大文字数に合わせた列幅変更で列の境界でダブルクリックする方法でできる内容ではありません)この列幅は毎回一定なのでエクセルの設定でファイル読み込み時に設定を固定しておく方法が無いかと、色々調べましたがわかりませんでした。

 設定だけで行う方法は無いのでしょうか。無いとすれば、CSVファイル読み込んだ後マクロでやるしか無いのでしょうか。マクロでしか方法がないとすれば過去ログ[1763]と[398]を参考に作ろうと思っています。よろしくお願いいたします。<m(__)m>


 必要な列幅に設定した、白紙のブックをテンプレートにしてはどうでしょうか?
 (kazu)

 テンプレートという方法があったのですね。テンプレートは普段使わないで、よく知りませんでした。 (kazu)様、大きなヒントになる早い回答をありがとうございました。

 早速研究してみました。ファイル名を[Book]としてファイルの種類を[テンプレート(*.xlt)とし、「C:\Documents and Settings\user\Application Data\Microsoft\Excel\XLSTART」(WindowsXP Pro)に白紙のブックをテンプレート作成しました。

 エクセルを立ち上げると、確かに立ち上げ時のブックのシートは必要な書式スタイルになっていますが、次にcsvファイルをファイル(F)→開く(O)→テキストファイル(*.prn;*.txt;*.csv)で読み込みますと、相変わらず「白紙のブックをテンプレートにする」前と同じ書式スタイルになってしまいます。

 仕方なく、白紙のブックを読み込んだ状態で、次のようなやり方で必要な書式スタイルのままデータを取り込む事ができました。

 データ(D)→外部データの取り込み(D)→テキストファイルのインポート(T)で、ファイルの種類(T)をすべてのファイル(*.*)でcsvファイルを指定し、テキストファイルウィザード(1/3)で、カンマやタブの区切り文字によってフィールドごとに区切られたデータ(D)を選択し、「次へ>」でテキストファイルウィザード(2/3)に移り、「区切り文字」で「カンマ」にチェックを入れ、「完了」をクリックする。「データーのインポート」ダイアログが現れるので、データを返す先を「既存のワークシート」を選択し、「プロパティ(R)...」をクリックして「外部データ範囲のプロパティ」ダイアログで「データのダイアログ」の項目の「列の幅を調整する(A)」のチェックを外して「OK」をクリックして「データーのインポート」ダイアログに戻って「OK」を押すと、ようやく必要な書式スタイルのままデータを取り込む事ができました。

 「外部データ範囲のプロパティ」ダイアログで「データのダイアログ」の項目の「列の幅を調整する(A)」がデフォルトでチェックが付いており、これが初期設定で外れておればこんなややこしい事をせずにファイルの読み込みだけでいけるような気もするのですが・・・。

  (kazu)様がおっしゃっている「白紙のブックをテンプレートにしてはどうでしょうか」という意味はこんな事をせよという意味ではないような気がしますが。テンプレートの使い方がよく分かっていないものですから・・・、何が分かっていないのでしょうか。ヒントでもいただけると大変ありがたいのです。よろしくお願いいたします。<m(__)m>


 申し訳ないです。
 きちんと確かめてから書き込みするべきでした。謝ります。

 (1)データ(D)→外部データの取り込み(D)→データの取り込み(D)で、
   データがおいてあるフォルダを指定すればcsvが自動的に表示されます。
 (2)csvファイルを選択して[開く]ボタンを押します。
 (3)[カンマやタブ...]にチェックが入っているのを確認して、[次へ]ボタンを押し、
   カンマのチェックを追加で押して、[完了]を押します。
 (4)データの取り込み[プロパティ]のボタンを押します。
 (5)[外部データ範囲のプロパティ]の画面で[データのレイアウトを列の幅を調整する]の
   チェックをはずします。
 (6)戻った画面でOKボタンを押します。
 これで、テンプレートで決めた列幅にデータが入ることは入ります。

 結構厄介なので、マクロかなと思います。
 (kazu)

 上の作業をマクロで記録すると↓のようになります。(kazu)
 Sub Macro1()
    Workbooks.Open Filename:= _
        "C:\Documents and Settings\kazu\ApplicationData\Microsoft\Templates\csv用.xlt" _
        , Editable:=True
    Range("A1").Select
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;C:\Documents and Settings\kazu\My Documents\data1.csv" _
        , Destination:=Range("A1"))
        .Name = "data1"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = False
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 932
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = True
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
 End Sub

 大先生 kazu 師に逆らうつもりはありませんが、次のような原始的な方法ではどうで
しょうか。

 @お作りになったテンプレートブックを開いておく
 Aそれとは別に、csv ファイルを開く
 B入力されている全セルをコピー
 Cテンプレートブックの A1 セルを選択。貼り付け。

 なおBで既入力全セルの選択は、どれか一つの入力済みセルを選んでおいて、
 Alt キーを押しっぱなしのまま、egsr と押し、(Alt を放して)エンターで全選択
となります。(途中に空白列や空白行がない限り)(また、Windows の場合です)
 (通りすがりの者)

 [通りすがりの者]さんありがとうございます。
 そうですね、ショートカットを使えばかなり楽になりますね。
 (kazu)

  (kazu)様、(通りすがりの者)様、こんなに早い回答を頂けるなんて驚きました。ありがとうございました。

 (kazu)様の答えに帰着するマクロによる方法を恐れていまして、マクロによる方法にしたくないなという思いがありましたので、(通りすがりの者)様の方法が初心者の私には適しております。
 発想として、既に(通りすがりの者)様の方法でもやっていたのですが、「Alt キーを押しっぱなしのまま、egsr と押し、(Alt を放して)エンター」という方法でなく、単純にワークシート全体をコピー&ペーストしておりましたので、書式スタイルが移行されずに「白紙のブックをテンプレートにする」前と同じ書式スタイルになっていました。
 何故「Alt キーを押しっぱなしのまま、egsr と押し、(Alt を放して)エンター」とすれば書式スタイルが移行されるのかはよく分かていませんが、これから研究してみたいと思っています。

 いずれにしましても、お手数をおかけしましたこの件は一件落着とさせていただきます。予想以上に皆様の暖かいご支援をいただきまして感激しています。また大変勉強になりました。ありがとうございました。<m(__)m>
                                    (音岳)


egsrの分は、表内のいずれかのセルを選択しておいて、ctrl+shift+*で表の全セル選択ができますよ。(vegas)

コメント返信:

[ 一覧(最新更新順) ]


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