[三流君] −−> [VBAで楽しく] −−> [バックナンバー一覧]
−−> No.102 Excel 範囲を選択して、カンマ区切りのファイルを作る

Excel 範囲を選択して、カンマ区切りのファイルを作る

メルマガ発行内容

<Excel 範囲を選択して、カンマ区切りのファイルを作る>

どうも、三流プログラマーのKen3です。 今回は、 Excelで範囲を選択して、カンマ区切りのファイルを作ってみたいと思います。 たいした内容じゃないのですが。 http://www.ken3.org/p/f/lzh/office-019.lzh に今回のサンプル保存されてます。 あわせてみてください。

/* * 1.プログラムは流用と新機能の作成? */

Excel範囲をHTMLのテキストファイルにするプログラムを作成ました。 詳細は、 http://www.ken3.org/backno/backno_vba17.html の [No.80 Excelのセル範囲をHTMLの表(.html)にしてみる] [No.81 セルの右寄せ、中央寄せをHTMLの表にしてみる] [No.82 背景色、フォントカラーをHTMLの表にしてみる] [No.83 改行LFを<BR>などHtml用にエンコードして書き込む] を見てください。 なんていつもの過去マガの宣伝は置いといて、 今回は、HTML部分をCSVの出力に変えて、作ってみたいと思います。 まずは、流用して、工夫も無しに出力してみました。
Sub Main()

    'Application.InputBoxでセルを選択させる
    Dim objTARGET As Range '選択されたセルの集合
    Set objTARGET = Application.InputBox(prompt:="セルを選択", Type:=8)
    If IsEmpty(objTARGET) Then 'キャンセルが押されたかチェックする
        MsgBox "キャンセルが押されました"
        Exit Sub
    End If
    
    'ファイル名を作成 ファイル名は自分のパス+\test.html
    Dim strFNAME As String   'ファイル名保存用
    strFNAME = ThisWorkbook.Path & "\test.csv" 'ファイル名を作る

    'テーブルデータを作成する
    Call MAKE_CSV_FILE(strFNAME, objTARGET)

    'できたファイルをメモ帳で表示して確認する
    Shell "notepad.exe " & strFNAME '手抜きでShellで起動
    
    '終わりの挨拶
    MsgBox strFNAME & "を作成しました"
    
End Sub
'ファイル名とセルの範囲RANGEを受け取り、 'ファイルを開きカンマ区切りのファイルを作成する
Sub MAKE_CSV_FILE(strFNAME As String, objHANI As Range)

    'ファイルをオープンする
    Dim FNO      As Integer  'ファイル番号
    FNO = FreeFile '空いてるファイル番号を取出す
    Open strFNAME For Output As #FNO  'テキストファイルを新規作成

    '行、列でループを作る
    Dim y As Integer
    Dim x As Integer
    For y = 1 To objHANI.Rows.Count         '行のループ
        For x = 1 To objHANI.Columns.Count  '列のループ
            Print #FNO, objHANI.Cells(y, x).Value;
            Print #FNO, ",";
        Next x
        Print #FNO, ""  '改行のみ出力
    Next y

    'ファイルをクローズする
    Close #FNO

End Sub
ファイルを開いて、何も考えないで出力してみました。 ポイントは、 ~~~~~~~~~~~~ For y = 1 To objHANI.Rows.Count '行のループ For x = 1 To objHANI.Columns.Count '列のループ Print #FNO, objHANI.Cells(y, x).Value; Print #FNO, ","; Next x Print #FNO, "" '改行のみ出力 Next y で、セルの範囲をループさせて、 .Valueをそのまま出力してます。

/* * 2.実行テスト */

プログラムが完成したら、テスト、不具合修正、またテスト・・ といった作業になるのかなぁ。 データを用意して、テストしてみました。 日付 単価 数量 合計金額 備考 2003/6/7 22:34 10 5 50.0 文字列は、、、 2003年6月7日 12.5 5 62.5 文字列は、、、 平成15年6月7日 25.5 1.15 29.3 文字列は、、、 H15.6.7 750 1.3 975.0 文字列は、、、 合計は表示形式で小数点以下1位まで。 日付は=Now()関数と表示形式を変えてます。 上記の表を変換してみました。 すると、変換結果は、 日付,単価,数量,合計金額,備考, 2003/06/07 22:34:14 , 10 , 5 , 50 ,文字列は、、、, 2003/06/07 22:34:14 , 12.5 , 5 , 62.5 ,文字列は、、、, 2003/06/07 22:34:14 , 25.5 , 1.15 , 29.325 ,文字列は、、、, 2003/06/07 22:34:14 , 750 , 1.3 , 975 ,文字列は、、、, でした。 う〜ん、一工夫必要ですね。 ^^^^^^^^^^^^^^^^^^^^^^^^^^ まず、気になるのは、実害は無いかもしれないが、 カンマが1つ多く出力されている(行最後のカンマ) 日付,単価,数量,合計金額,備考,←の最後の改行前のカンマ これは、 For x = 1 To objHANI.Columns.Count '列のループ Print #FNO, objHANI.Cells(y, x).Value; Print #FNO, ","; Next x データ出力 Print #FNO, objHANI.Cells(y, x).Value; カンマを出力 Print #FNO, ","; とペアで出力しているからです。 これを、値の前にカンマを出力すように変更してみます。 For x = 1 To objHANI.Columns.Count '列のループ Print #FNO, ","; Print #FNO, objHANI.Cells(y, x).Value; Next x これだけだと、今度は、先頭にカンマが付く(笑) ,日付,単価,数量,合計金額,備考 カンマを出力してからデータを書いてるので、あたりまえか。。。 なので、もう一工夫、 For y = 1 To objHANI.Rows.Count '行のループ Print #FNO, objHANI.Cells(y, 1).Value; '先頭項目の出力 For x = 2 To objHANI.Columns.Count '列のループ Print #FNO, ","; Print #FNO, objHANI.Cells(y, x).Value; Next x Print #FNO, "" '改行のみ出力 Next y と、先頭項目を出力後、カウンタを2からスタート、 カンマを出力後、データを出してみました。 ※小細工だけどね。 'ファイル名とセルの範囲RANGEを受け取り、 'ファイルを開きカンマ区切りのファイルを作成する
Sub MAKE_CSV_FILE(strFNAME As String, objHANI As Range)

    'ファイルをオープンする
    Dim FNO      As Integer  'ファイル番号
    FNO = FreeFile '空いてるファイル番号を取出す
    Open strFNAME For Output As #FNO  'テキストファイルを新規作成

    '行、列でループを作る
    Dim y As Integer
    Dim x As Integer
    For y = 1 To objHANI.Rows.Count         '行のループ
        Print #FNO, objHANI.Cells(y, 1).Value; '先頭項目の出力
        For x = 2 To objHANI.Columns.Count  '列のループ
            Print #FNO, ",";
            Print #FNO, objHANI.Cells(y, x).Value;
        Next x
        Print #FNO, ""  '改行のみ出力
    Next y

    'ファイルをクローズする
    Close #FNO

End Sub

/* * 3..Value , .Value2 , .Text */

現在、.Valueで出力してます。 これを表示形式通りで出力できないか?(画面の見た目通り)と思い、 いろいろと見てみると、おっ、.Value2ってあるじゃん。 これ試してみよう。 ↑プロパティの選択画面※ここから冒険して探すのも一つの手です。 ? range("b3").Value 2003/06/07 22:34:14 ? range("b3").Value2 37779.9404351852 あらら、期待ハズレか、、、 おっ、.Textってのがある、これを試してみると、 ? range("b3").Text 2003/6/7 22:34 ? range("b4").Text 2003年6月7日 ? range("b5").Text 平成15年6月7日 と、表示形式が効いて、出力されます。 ※場合によっては、使い分けてみたいですよね。 今回みたいに、プログラムに組み込む前に イミディエイト ウインドウ で 関数やプロパティのテストをすると、簡単でいいですよ。 ? Len(a) とか関数の実行できるので便利です。 (詳細解説は、 http://www.ken3.org/vba/iwind.html 参照 )

/* * 4.終わりの挨拶 */

今回は、 選択範囲をカンマ区切りのCSVファイルにしてみました。 カンマの隣に空白が出力されて、まだまだ使えないルーチンだけどね。 .Value , .Value2 , .Text 似てるけど、少し違うので、みなさんも、探ってみてください。 何かの参考となれば幸いです。 Excel/Access大好き、三流プログラマーKen3でした。

フィードバック

VBA系の→[掲示板]←を覗く、質問を書き込む

評価・感想

No.102を読んだ満足度(評価)は?
5満足(参考になった)
4まぁまぁ(一部参考になった)
3普通(どちらとも言えない)
2なんかなぁ(期待と違った)
1不満(読んで損した気分)
作者に感想・質問を送る場合は下記に気軽に書いてください
あなたのお名前(ニックネーム) さん

作者からの返信は、 不用 E-mail で受信したい
*質問・感想はメルマガで紹介する場合があります

ページフッター(リンクや広告など)


[三流君(TOP ken3.org へ戻る)]
-- [VBA系TOPへ]
---- [VBA系バックナンバー目次へ移動]
------ [VBAでIEを操作 CreateObject("InternetExplorer.application")]・・・実は当店一番人気、VBAでIEを操作するサンプルです
------ [VBAでOutlookの操作 CreateObject("Outlook.Application")]・・・Outlookを使い、メール関係の処理です
------ [Access から Excel 連携 CreateObject("Excel.Application")]・・・人気のAccessからExcelへデータ書き出しなどです
------ [AccessのUserForm/サブフォームを操作]・・・アクセスでフォームを使ったサンプルです
------ [Accessのレポートを操作]・・・レポートを操作してみました
------ [Access クエリー関係やその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です
------ [Excel UserForm(ユーザーフォーム)を操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
------ [ExcelからAccessを操作する]・・・ExcelからAccessのマクロを起動してみました、
------ [Excel関係 関数、その他]・・・その他Excel関係です
------ [VBAでテキストファイル(*.txt,*.html,*.csv)の操作]・・・テキストファイルを使ったサンプルです
------ [VBA 標準関数関係とその他解説]・・・その他、グダグタ解説してます


広告
-- [通販系の売れ筋広告へ] ←主に楽天やAmazonのランキングです
blog
-- [三流君の作業日記] ← 日々の作業を少々
-- [通販あしあと] ← 通販ページの足跡を一覧で羅列

情報を探す

情報を探すならGoogleかな?

↓Web全体、サポート情報(support.microsoft.com)や三流君VBA(ken3.org)から検索する
Google
Web www.ken3.org
www.microsoft.com support.microsoft.com

あとは、項目別にMSでお勉強かな?
◆ マイクロソフト サイトの歩き方
◇ How-To インデックス
◇ FAQ インデックス
◇ スキルレベル別おすすめコンテンツ
◇ テクノロジ マップ
◇ テーマ別技術資料一覧

書籍の購入

Webだけじゃさすがに勉強しきれないので、プログラミング関係の書籍も読んでみては??

コンピュータ書籍の発送がハヤイ専門店

コンピュータの本・専門店
種類が豊富で探し易いです。※在庫ありが48時間以内発送が急ぎで資料や書籍がほしい時、とても助かります。
お奨め本の目次を見るだけでも勉強になったり

amazon.co.jpでキーワード別チェック

下記、私が設定したキーワードですが、こんな感じで資料や書籍を探ってみては?
[VBA全体を把握する] -- やはり全体をさらっと見たいですよね。
[SQL関連でDB力UP] -- システムはデータベース設計が重要
[ADO接続を探る] -- VBAなのでADO接続を押さえておく
[Windows APIを探る] -- さらにAPIになて知ってれば強力だ!
[.NETを探る] -- と言っても時代は.NETに流れてるし
プログラミング以外でも知りたいことは多くって、
[人間関係] -- で、客先・上司、まわりに気を使い。
[プログラマーの自己啓発] -- プログラムだけじゃなくいろいろと向上したいよ
[コーチング・育成] -- 先輩になったら後輩(部下)の面倒をみてね。
そんなこんなでプログラマーっていろいろと大変なんだってば・・・