[三流君] −−> [VBAで楽しく] −−> [バックナンバー一覧]
−−> No.080 Excelのセル範囲をHTMLの表(.html)にしてみる

Excelのセル範囲をHTMLの表(.html)にしてみる

メルマガ発行内容

<Excelのセル範囲をHTMLの表(.html)にしてみる>

どうも、三流プログラマーのKen3です。 今回は、 Excelの表をHTMLの表にしてみたいと思います。 標準であるけど、練習を兼ねて。 http://www.ken3.org/p/lzh/office-015.lzh に今回のサンプル保存されてます。 あわせてみてください。

/* * 1.仕様書、書いてますか? */

まずは、要求をまとめるんだっけ。 セルの範囲を選択させる ファイル ブックのパス\test.htmlでHtmlのテーブルを作成する IEを起動して、test.htmlを表示する。 なんかラフ過ぎない? 仕様書 書く側 と 受取り側(要求仕様書、基本設計書、詳細設計書) http://www.ken3.org/vba/doc.html では、もっと詳細に書いてた気がするけど。

/* * 2.初期捜査、初動捜査 */

セルの範囲を選択するのは、 Dim objHANI As Range '選択されたセルの集合 とオブジェクト変数を宣言してから、 Set objHANI = Application.InputBox(prompt:="セルを選択", Type:=8) .InputBoxを使用して、セルを選択させる ポイントはType:=8で文字列ではなくオブジェクトを返すことです。 Application.InputBox で Rangeを受け取る解説は、 No.11 InputBox関数で簡単な値を受け取る http://www.ken3.org/backno/backno_vba03.html#11 を参照してください。 InputBox関数とApplication.InputBoxメソッドの違いが書いてあります。 選択されたか?をチェックしたいので、 If IsEmpty(objHANI) Then 'キャンセルが押されたかチェックする MsgBox "キャンセルが押されました" End If と IsEmpty関数を使用してチェックしてます。 選択された範囲に対して、 MsgBox objHANI.Rows.Count '行数 MsgBox objHANI.Columns.Count '列数 を取り出すことができます。 No.51 Excel Range オブジェクトを使う http://www.ken3.org/backno/backno_vba11.html#51 で、 objHANI.Rows.Countの行カウントと、 ~~~~~~~~~~~ objHANI.Columns.Count列カウントです。 ~~~~~~~~~~~~~~ Rangeについて、軽く書いてます。 範囲が選択できたら、ファイルの書き込みかぁ、 パターン化になっているけど、 Freeファイルであいているファイル番号を取り出し、 Open Write Close Print #FNO, "XXXXXXX"; とセミコロンを付けると改行されないのもポイントです。 テキストファイル関係は、 ^^^^^^^^^^^^^^^^^^^^^^^^ No.27 テキストファイル処理 ファイルへの書き込み http://www.ken3.org/backno/backno_vba06.html#27 Open Close Print # No.29 テキストファイル処理 ファイルからの読み込み http://www.ken3.org/backno/backno_vba06.html#29 Line Input # Eof関数 No.31 Write #で ””を付けた書き込み http://www.ken3.org/backno/backno_vba07.html#31 Write # No.33 FreeFile関数で空いてるファイル番号を返す方法 http://www.ken3.org/backno/backno_vba07.html#33 FreeFile で、簡単な解説を書いてます。 IEの起動は、 ^^^^^^^^^^^^^^ Dim objIE As Object 'IEオブジェクト参照用 と、オブジェクト変数を定義して、 'インターネットエクスプローラーのオブジェクトを作る Set objIE = CreateObject("InternetExplorer.application") CreateObjectを使用して、IEのオブジェクトを作成。 objIE.Visible = True '見えるようにする(お約束) objIE.Navigate strFNAME '文字列で指定したURLに飛ぶ と、メソッド(動作)を使用して、URLを開きます。 No.50 IE起動 CreateObject("InternetExplorer.application") http://www.ken3.org/backno/backno_vba11.html#50 で、 IEのオブジェクト、起動方法を解説してます。

/* * 3.固定処理で作成するか */

Sub test15_1()

    'Application.InputBoxでセルを選択させる
    Dim objHANI As Range '選択されたセルの集合
    Set objHANI = Application.InputBox(prompt:="セルを選択", Type:=8)
    If IsEmpty(objHANI) Then 'キャンセルが押されたかチェックする
        MsgBox "キャンセルが押されました"
        Exit Sub
    End If

    'ファイルをオープンする
    Dim FNO      As Integer  'ファイル番号
    Dim strFNAME As String   'ファイル名保存用
    FNO = FreeFile '空いてるファイル番号を取出す
    strFNAME = ThisWorkbook.Path & "\test.html" 'ファイル名を作る
    Open strFNAME For Output As #FNO  'テキストファイルを新規作成

    'HTMLのヘッダーを書く
    Print #FNO, "<HTML><HEAD><TITLE>"
    Print #FNO, "テーブル作成"
    Print #FNO, "</TITLE></HEAD>"
    Print #FNO, "<BODY>"
    Print #FNO, "<TABLE border=1>"  'テーブルの開始

    '行、列でループを作る
    Dim y As Integer
    Dim x As Integer
    For y = 1 To objHANI.Rows.Count         '行のループ
        Print #FNO, "<TR>";  '行の開始タグ
        For x = 1 To objHANI.Columns.Count  '列のループ
            'セルの値を<TD>で囲って出力
            Print #FNO, "<TD>" & objHANI.Cells(y, x).Value & "</TD>";
        Next x
        Print #FNO, "</TR>"  '行の終了タグ
    Next y

    'HTMLのタグを閉める
    Print #FNO, "</TABLE>"
    Print #FNO, "</BODY></HTML>"

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

    'おまけでIEを起動して、表示
    Dim objIE    As Object  'IEオブジェクト参照用
    'インターネットエクスプローラーのオブジェクトを作る
    Set objIE = CreateObject("InternetExplorer.application")
    objIE.Visible = True '見えるようにする(お約束)
    objIE.Navigate strFNAME  '文字列で指定したURLに飛ぶ

    '終わりの挨拶
    MsgBox strFNAME & "を作成しました"

End Sub
なんか、調べたことを縦につなげただけですね。 これだと、エラーが起きたときの切り分けや、汎用性が無い、 そこで、関数分割します。

/* * 4.分割のポイント */

分割のポイントは、 メインの流れを処理するルーチン と 各機能を処理するサブルーチン に分け、変数で値を渡しながら処理します。 関数に汎用性を持たせる、共通に使える関数作り http://www.ken3.org/vba/vba-hanyo.html も合わせて読んでみてください。 まずは、メイン処理のブロックを分けます。 これは、慣れないうちは日本語の箇条書きのイメージで書きます。
Sub Main()
    'セル範囲の選択
    'ファイルを開き、データの書き込み
    'IEの起動、テスト表示
End Sub
と、3つのブロックに分ける予定です。 次は、何を貰って、何をやらせて、何を返すか?と関数の設計です。 セル範囲の選択、 これは、エクセルの.InputBoxを使うので、ユーザー関数は無しで、 ファイルを開き、データの書き込み処理では、 パラメータでファイル名とセルのオブジェクトを受け取ります。 処理は、ファイルを開き、セルの内容を出力します IEの起動、テスト表示部では、 確認したいファイル名を受け取り、 IE起動、URLを開きます。
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.html" 'ファイル名を作る

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

    'できたファイルをIEで表示して確認する
    Call IE_OPEN_URL(strFNAME)  'ファイル名を渡す

    '終わりの挨拶
    MsgBox strFNAME & "を作成しました"
    
End Sub
'ファイル名とセルの範囲RANGEを受け取り、 'ファイルを開きHTMLのテーブルを作成する
Sub MAKE_HTML_TABLE(strFNAME As String, objHANI As Range)

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

    'HTMLのヘッダーを書く
    Print #FNO, "<HTML><HEAD><TITLE>"
    Print #FNO, "テーブル作成してみました"
    Print #FNO, "</TITLE></HEAD>"
    Print #FNO, "<BODY>"
    Print #FNO, "<TABLE border=1>"  'テーブルの開始

    '行、列でループを作る
    Dim y As Integer
    Dim x As Integer
    For y = 1 To objHANI.Rows.Count         '行のループ
        Print #FNO, "<TR>";  '行の開始タグ
        For x = 1 To objHANI.Columns.Count  '列のループ
            'セルの値を<TD>で囲って出力
            Print #FNO, "<TD>" & objHANI.Cells(y, x).Value & "</TD>";
        Next x
        Print #FNO, "</TR>"  '行の終了タグ
    Next y

    'HTMLのタグを閉める
    Print #FNO, "</TABLE>"
    Print #FNO, "</BODY></HTML>"

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

End Sub
'URLを受け取り、IEを起動、URLを開く
Sub IE_OPEN_URL(strURL As String)

    'IEを起動して、表示
    Dim objIE    As Object  'IEオブジェクト参照用
    
    'インターネットエクスプローラーのオブジェクトを作る
    Set objIE = CreateObject("InternetExplorer.application")
    
    objIE.Visible = True '見えるようにする(お約束)
    objIE.Navigate strURL  '文字列で指定したURLに飛ぶ

End Sub
分割をすると、保守性があがったと思います。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 何をやっているのかが、各関数にわけると、わかりやすいと思います。

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

さて、テストしますか。 まぁ、それなりに動いてます。 が、 いろいろと穴があります。 ^^^^^^^^^^^^^^^^^^^^^^^^ http://www.ken3.org/p/lzh/office-015.lzh に今回のサンプル保存されてます。 あわせてみてください。 数字が左詰になっているよ、、、 バックカラーが変わっていない、、 テストすればするほど、いろいろとでてきます。 要望がまとまってきたら、機能追加ですよね。 次回は問題点のまとめ方と機能追加です。 プログラム作りは簡単で面白いなぁと感じるような 解説/メールマガジンを書きたいと思ってますが、 なかなかうまくは行いかないね。。 拾い読みして、 1つでも何かの参考となれば幸いです。 Excel/Access大好き、三流プログラマーKen3でした。

フィードバック

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

評価・感想

No.080を読んだ満足度(評価)は?
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に流れてるし
プログラミング以外でも知りたいことは多くって、
[人間関係] -- で、客先・上司、まわりに気を使い。
[プログラマーの自己啓発] -- プログラムだけじゃなくいろいろと向上したいよ
[コーチング・育成] -- 先輩になったら後輩(部下)の面倒をみてね。
そんなこんなでプログラマーっていろいろと大変なんだってば・・・