<Excelセルの結合を探る、結合セルをHTML表化する>
どうも、三流プログラマーのKen3です。 今回は、 Excelの結合されたセル から HTMLの表を作成してみたいと思います。 結合されたセルの処理やHTMLの表作成で、 何かの参考となれば、幸いです。 ※まだまだ、まともなツールへの道は遠いけどね・・・ http://www.ken3.org/p/f/lzh/office-020.lzh に今回のサンプル保存されてます。 あわせてみてください。 関連項目は、 Excel HTML表作成ツールもどき No.80 Excelのセル範囲をHTMLの表(.html)にしてみる No.81 セルの右寄せ、中央寄せをHTMLの表にしてみる No.82 背景色、フォントカラーをHTMLの表にしてみる No.83 改行LFを<BR>などHtml用にエンコードして書き込む http://www.ken3.org/backno/backno_vba17.html も合わせてみて下さい。/* * 1.事前調査、セルの結合 */
隣や下のセルをつなげて、1つのセルにする。 そんな表を見たことありますよね。 ↑セルプロパティの設定画面 プロパティを知りたかったので、 いつものマクロ記録で記録してみました。 ^^^^^^^^^^^^^^^^^^ Range("B6:C6").Select With Selection .HorizontalAlignment = xlRight .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = True End With Range("D6:D7").Select With Selection .HorizontalAlignment = xlRight .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = True End With さてと、それらしいのは、 おっ、.MergeCells = Trueってのが怪しそうですね。 .MergeCellsにカーソルを合わせて、 F1(Help)を押して、探ってみます。 MergeCells プロパティ True の場合、セル範囲またはスタイルが結合セルを含みます。 値の取得および設定が可能です。バリアント型 (Variant) の値を使用します。 解説 結合されたセルが含まれるセル範囲を選択すると、指定したセル範囲と実際の セル範囲が異なる場合があります。選択したセル範囲のアドレスを調べるには、 Address プロパティを使用します。 使用例 次の使用例は、セル A3 がある結合セル範囲に値を設定します。 Set ma = Range("a3").MergeArea If Range("a3").MergeCells Then ma.Cells(1, 1).Value = "42" End If なんだか、よくわからないなぁ(笑)。/* * 2.簡単に確認してみる。 */
Range("B6:C6").Select を結合したので、 ? Range("A6").MergeCells False ? Range("B6").MergeCells True ? Range("C6").MergeCells True と、B6とC6が結合されているのは、わかった。 Dim ma As Range Set ma = Range("b6").MergeArea Debug.Print ma.Address Set ma = Range("c6").MergeArea Debug.Print ma.Address とやると、 $B$6:$C$6 $B$6:$C$6 と同じ値が表示される。 左上の値を(1,1)判断するために、 Dim ma As Range Set ma = Range("b6").MergeArea Debug.Print ma.Address Debug.Print ma.Cells(1, 1).Address とテストすると、 $B$6:$C$6 $B$6 cells(1,1)で左上を判断できるので、(結合されたはじめの位置を知りたいので) 現在のセルが結合されているか?は、 .MergeCellsで判断 .MergeAreaで結合範囲を取り出しcells(1,1).addressで左上判断 これを組み込んでみます。/* * 3.HTML作成データに組み込む */
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 |
Sub MAKE_HTML_TABLE(strFNAME As String, objHANI As Range) Dim strCOLOR As String Dim strR As String Dim strG As String Dim strB As String Dim objMA As Range 'リンクの範囲 Dim strTD As String 'ファイルをオープンする 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 '列のループ 'ALIGNを調べて書き込む Select Case objHANI.Cells(y, x).HorizontalAlignment Case xlRight: strTD = "<TD ALIGN='RIGHT'" Case xlLeft: strTD = "<TD ALIGN='LEFT'" Case xlCenter: strTD = "<TD ALIGN='CENTER'" Case Else 'その他設定無しのとき strTD = "<TD" End Select 'バックカラーを調べる strCOLOR = Right("000000" & Hex(objHANI.Cells(y, x).Interior.Color), 6) If strCOLOR <> "FFFFFF" Then '白以外の時処理 strR = Mid(strCOLOR, 5, 2) strG = Mid(strCOLOR, 3, 2) strB = Mid(strCOLOR, 1, 2) strTD = strTD & " BGCOLOR=#" & strR & strG & strB End If 'セルの結合を判断する If objHANI.Cells(y, x).MergeCells = True Then '結合セルか? Set objMA = objHANI.Cells(y, x).MergeArea 'エリアを取り出す If objMA.Cells(1, 1).Address = objHANI.Cells(y, x).Address Then '左上なら If objMA.Columns.Count <> 1 Then strTD = strTD & " COLSPAN=" & objMA.Columns.Count End If If objMA.Rows.Count <> 1 Then strTD = strTD & " ROWSPAN=" & objMA.Rows.Count End If Print #FNO, strTD & ">"; 'タグを閉じ出力 Else '結合セルでその他なら、データを書かないでOKなら strTD = "" 'タグをクリア(データを出さない) End If Else Print #FNO, strTD & ">"; 'タグを閉じ出力 End If 'フォントの色を調べる strCOLOR = Right("000000" & Hex(objHANI.Cells(y, x).Font.Color), 6) If strCOLOR <> "000000" Then '黒以外の時処理 strR = Mid(strCOLOR, 5, 2) strG = Mid(strCOLOR, 3, 2) strB = Mid(strCOLOR, 1, 2) If strTD <> "" Then '出力ありなら Print #FNO, "<Font Color=#" & strR & strG & strB & ">"; End If End If If strTD <> "" Then '出力ありなら 'セルの中身を変換して書き込む*018で追加 Print #FNO, htmlEnCode(objHANI.Cells(y, x).Value); 'フォントのタグを閉じる If strCOLOR <> "000000" Then '黒以外の時処理 Print #FNO, "</Font>"; End If 'タグを閉じる Print #FNO, "</TD>"; End If Next x Print #FNO, "</TR>" '行の終了タグ Next y 'HTMLのタグを閉める Print #FNO, "</TABLE>" Print #FNO, "</BODY></HTML>" 'ファイルをクローズする Close #FNO End Sub |
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 |
Function htmlEnCode(strMOTO As String) As String Dim strCHK As String 'チェックする文字 Dim strSET As String 'セットする文字 Dim strWORK As String '結果を入れる作業変数 Dim n As Integer 'カウンター '結果をまず初期化する strWORK = "" '文字数分ループする For n = 1 To Len(strMOTO) strCHK = Mid(strMOTO, n, 1) 'チェックする文字を取り出す Select Case Asc(strCHK) '文字をチェックする Case &H20: strSET = " " 'スペース Case &H3C: strSET = "<" '< Case &H3E: strSET = ">" '> Case &H26: strSET = "&" '& Case &H22: strSET = """ '" Case &HA: strSET = "<br>" '改行 Case Else: strSET = strCHK 'その他の文字はそのままセット End Select '文字列を作る strWORK = strWORK & strSET Next n '作られた文字列をリターン値としてセットする htmlEnCode = strWORK End Function |
ここまで、読んでいただきどうもです。ここから下は、三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、
気になったジャンル↓を選択してください。 人気記事(来場者が多いTOP3): Excel関係: Access関係: その他:VBAの共通関数やテキストファイルの操作など 開発時の操作: [F1を押してHELPを見る]/ [Debug.Print と イミディエイトウインドウ]/ [実行時エラーでデバッグ]/ [ウォッチ式とSTOP]/ [参照設定を行う] 仕様書(設計書?) XXXX書類: [基本設計書や要求仕様書]/ [テスト仕様書 テストデータ]/ [バグ票]/ [関数仕様書]/ [流れは 入力・処理・出力] ※↑文章の味付けが変わっていて、お口に合うかわかりませんが。。。 |
Blogとリンク:[三流君の作業日記]/
[VBAやASPのサンプルコード]/
広告-[通販人気商品の足跡]