<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 |
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 |
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 |
↑プロパティの選択画面※ここから冒険して探すのも一つの手です。
? 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 参照 )
ここまで、読んでいただきどうもです。ここから下は、三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、
|
気になったジャンル↓を選択してください。 人気記事(来場者が多いTOP3): Excel関係: Access関係: その他:VBAの共通関数やテキストファイルの操作など 開発時の操作: [F1を押してHELPを見る]/ [Debug.Print と イミディエイトウインドウ]/ [実行時エラーでデバッグ]/ [ウォッチ式とSTOP]/ [参照設定を行う] 仕様書(設計書?) XXXX書類: [基本設計書や要求仕様書]/ [テスト仕様書 テストデータ]/ [バグ票]/ [関数仕様書]/ [流れは 入力・処理・出力] ※↑文章の味付けが変わっていて、お口に合うかわかりませんが。。。 |
Blogとリンク:[三流君の作業日記]/
[VBAやASPのサンプルコード]/
広告-[通販人気商品の足跡]