マクロでテーブルタグをリストタグに変換する方法

このQ&Aのポイント
  • VBAマクロを使用して、テーブルタグで囲まれた表をリストタグに変換する方法について教えてください。
  • マクロを実行することで、表の内容が<ul>タグと<li>タグで表示されるようになります。
  • 具体的な変換方法は、VBAコード内で表のセルの値を取得し、それを<li>タグで囲むという手順です。
回答を見る
  • ベストアンサー

マクロ テーブルタグをリストタグに書き直したい

下記のVBAコードは表を囲むように選択し、マクロを実行することでテーブルタグのHTML化ができるものです。 表 1 佐藤 東京 2 山田 神奈川 マクロ実行結果 <table>  <tr><td>1</td><td>佐藤</td><td>東京</td></tr>  <tr><td>2</td><td>山田</td><td>神奈川</td></tr> </table> これをリストに書き換えたいです。 <ul> <li>1</li><li>佐藤</li><li>東京</li> </ul> <ul> <li>2</li><li>山田</li><li>神奈川</li> </ul> どうしたら良いでしょうか? 宜しくお願いします。 Sub convertHTML() Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets(1) Dim htmlFile As String htmlFile = ActiveWorkbook.Path & "\table.html" Open htmlFile For Output As #1 Dim i, j As Long i = 1 Print #1, "<table>" Do While ws.Cells(i, 1).Value <> "" Print #1, vbTab & "<tr>"; j = 1 Do While ws.Cells(i, j).Value <> "" Print #1, "<td>" & ws.Cells(i, j).Value & "</td>"; j = j + 1 Loop Print #1, "</tr>" & vbCr; i = i + 1 Loop Print #1, "</table>" Close #1 MsgBox htmlFile & "に書き出しました" End Sub

  • nkmyr
  • お礼率67% (403/600)

質問者が選んだベストアンサー

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (454/691)
回答No.1

改行は vbCrLf でいいでしょうか Sub convertHTML2()  Dim ws As Worksheet  Dim htmlFile As String  Dim i, j As Long  Set ws = ThisWorkbook.Worksheets(1)  htmlFile = ActiveWorkbook.Path & "\table.html"  Open htmlFile For Output As #1  i = 1  Do While ws.Cells(i, 1).Value <> ""   Print #1, "<ul>" & vbCrLf;   j = 1      Do While ws.Cells(i, j).Value <> ""    Print #1, "<li>" & ws.Cells(i, j).Value & "</li>";    j = j + 1   Loop   Print #1, vbCrLf & "</ul>" & vbCrLf;   i = i + 1  Loop  Close #1  MsgBox htmlFile & "に書き出しました" End Sub

nkmyr
質問者

お礼

ありがとうございます。 お陰さまでイメージ通りできました。 テーブル化のコードの違い、改行のvbCrLfの検証をしながら勉強させて頂きます。 

関連するQ&A

  • エクセル表をHTML化

    高橋太郎 赤 佐藤太郎 白 鈴木太郎 黄 山田太郎 青 Sub convertHTML() Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets(1) Dim htmlFile As String htmlFile = ActiveWorkbook.Path & "\ファイル名.html" Open htmlFile For Output As #1 Dim i, j As Long i = 1 Print #1, "<table>" Do While ws.Cells(i, 1).Value <> "" Print #1, vbTab & "<tr>"; j = 1 Do While ws.Cells(i, j).Value <> "" Print #1, "<td>" & ws.Cells(i, j).Value & "</td>"; j = j + 1 Loop Print #1, "</tr>" & vbCr; i = i + 1 Loop Print #1, "</table>" Close #1 MsgBox htmlFile & "に書き出しました" End Sub 以下が結果です。 <table> <tr><td>高橋太郎</td><td>赤</td></tr> <tr><td>佐藤太郎</td><td>白</td></tr> <tr><td>鈴木太郎</td><td>黄</td></tr> <tr><td>山田太郎</td><td>青</td></tr> </table> 下記のようにするにはどうすればよいでしょうか? <table> <tr><td>赤</td><td>高橋太郎</td></tr> <tr><td>白</td><td>佐藤太郎</td></tr> <tr><td>黄</td><td>鈴木太郎</td></tr> <tr><td>青</td><td>山田太郎</td></tr> </table> セルを書き換えた方が早いですが、名前がバラバラですし、何千行もあり、作業が大変なので、マクロを書き換えた方が早いかと思いましたので。 宜しくお願いします。

  • マクロ HTMLタグのクラス名を入れたらエラー

    下記のプログラムはセルに文字を入れてHTML化するものです。 HTMLタグにクラス名を入れると「中断モードでコードを実行することはできません」とエラーメッセージが出ます。 LineData = "<div class=“sample”>” & ws.Cells(i, 1).Value & "</div>" & vbCrLf クラス名の「” ”」が問題だと思いますが、どうしたら良いでしょうか? 宜しくお願いします。 Sub convertHTML()  Dim ws As Worksheet  Dim htmlFile As String  Dim i As Long  Dim LineData As String    Set ws = ThisWorkbook.Worksheets(1)  htmlFile = ActiveWorkbook.Path & "\Sample.html"  Open htmlFile For Output As #1    i = 1  Do While ws.Cells(i, 1).Value <> ""   LineData = "<div id=“sample”>” & ws.Cells(i, 1).Value & "</div>" & vbCrLf   LineData = LineData & "<p>" & ws.Cells(i, 2).Value & "</p>" & vbCrLf   LineData = LineData & "<span>" & ws.Cells(i, 3).Value & "</span>" & vbCrLf   Print #1, LineData   i = i + 1  Loop  Close #1  MsgBox htmlFile & "に書き出しました" End Sub

  • マクロ ランキングの表を作成し、HTML出力 

    A1、B1、C1…にテキストを入れます。 A1 スペシャル B1 (空白) C1 (空白) A2 スズキ B2 2000 C2 1000 A3 タナカ B3 1000 C3 800  ・  ・ 下記のプログラムはセルに空白があるとそこでループが止まってしまいます。 セルの空白で止まるのではなく、最終尾の行に全て空白があると判断した時点でループをストップしたいのです。 上記ではB1とC1に空白があり、B1で止まってしまいます。 アドバイスをお願いします。 Sub convertHTML()  Dim ws As Worksheet  Dim htmlFile As String  Dim i As Long  Dim LineData As String    Set ws = ThisWorkbook.Worksheets(1)  htmlFile = ActiveWorkbook.Path & "\Sample.html"  Open htmlFile For Output As #1    i = 1  Do While ws.Cells(i, 1).Value <> ""   LineData = "<div>" & ws.Cells(i, 1).Value & "</div>" & vbCrLf   LineData = LineData & "<p>" & ws.Cells(i, 2).Value & "</p>" & vbCrLf   LineData = LineData & "<span>" & ws.Cells(i, 3).Value & "</span>" & vbCrLf   Print #1, LineData   i = i + 1  Loop  Close #1  MsgBox htmlFile & "に書き出しました" End Sub

  • リストタグの上に変なスペースが・・・

    下記の1~4のリストを上下の画像(a.jpg/b.jpg)で囲んでいます。 なぜかa.jpgの下だけに10pxくらいのスペースが開いてしまいます。 解消方法を教えていただけないでしょうか? 【html】 <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td><img src="../images/a.jpg" border="0"></td> </tr> <tr> <td background="../images/bg.jpg"><h3> <ul id="pointlist"> <li>1</li> <li>2</li> <li>3</li> <li>4</li> </ul> </h3></td> </tr> <tr> <td><img src="../images/b.jpg"></td> </tr> </table> 【css】 #pointlist { padding-left: 30px; padding-right: 15px; margin: 0px; list-style-type:square; list-style-position:inside; } #pointlist li{ width: auto; float: left; margin-top: 0px; padding-right: 20px; font-size: 0.9em; line-height: 1em; text-align: left; white-space: nowrap; }

  • VBA UTF-8形式で保存したい

    http://officetanaka.net/excel/vba/file/file11.htm UTF-8形式で保存する方法を参考サイトを見つけました。 Sub Sample1() Dim Target As String Target = "D:\Work\Sample.txt" With CreateObject("ADODB.Stream") .Charset = "UTF-8" .Open .WriteText "田中", 1 .SaveToFile Target, 2 .Close End With End Sub Target = "D:\Work\Sample.txt" といった書き込みのプログラムがあります。下のプログラムとタブってしまいます。 htmlFile = ActiveWorkbook.Path & "\Sample.html" 保存指定が2つあり、どちらかに記述してもパスが違いますとエラーメッセージがでます。 正しいUTF-8形式で保存する方法を教えて下さい。 Sub convertHTML()  Dim ws As Worksheet  Dim htmlFile As String  Dim i As Long  Dim LineData As String    Set ws = ThisWorkbook.Worksheets(1)  htmlFile = ActiveWorkbook.Path & "\Sample.html"  Open htmlFile For Output As #1    i = 1  Do While Not (ws.Cells(i, 1).Value = "" And ws.Cells(i, 2).Value = "" And ws.Cells(i, 3).Value = "")   LineData = "<div>" & ws.Cells(i, 1).Value & "</div>" & vbCrLf   LineData = LineData & "<p>" & ws.Cells(i, 2).Value & "</p>" & vbCrLf   LineData = LineData & "<span>" & ws.Cells(i, 3).Value & "</span>" & vbCrLf   Print #1, LineData   i = i + 1  Loop  Close #1  MsgBox htmlFile & "に書き出しました" End Sub

  • 抜き出しマクロ(3)

    以下のプログラムは10行ごとにデータを抜き出すプログラムです。 これに追加して、普段は10行に1個データを抜き出し、前回の結果より絶対値が10増減があったとき、 相対値が10%の増減があった時にもデータを抜き出すようにするにはどうすればいいですか? 例えば以下の通り time result 1   1 2   1 3   1 4   1 5   1 6   1 7   1 8   1 9   1 10   1 11  100 12  500 13  1000 14  1000 15  1000 16  1000 17  1000 18  1000 19  1000 20  1000 21  1000 ・  ・ ・  ・ ・  ・  ↓ time result 1   1 10  1 11  100 12  500 13  1000 20  1000 ・  ・ ・  ・ ・  ・ ここからプログラム(10行ごとに抜き出す) ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ Sub nukitori() Dim X As Worksheet Dim i As Long Dim ii As Long Dim col As Integer Dim Nukitori_Step As Long Nukitori_Step = 10 i = 2 ii = 2 '●●●見出し行が1行目なので2で始める Set X = ActiveSheet '●シートShordataがあったら削除 On Error Resume Next Application.DisplayAlerts = False Worksheets("shortdata").Delete Application.DisplayAlerts = True On Error GoTo 0 Worksheets.Add.Name = "shortdata" '●先ず、見出しをコピー Worksheets("shortdata").Rows(1).Value = X.Rows(1).Value While X.Cells(i, 1) <> "" And i < 65535 For col = 1 To 255 Worksheets("shortdata").Cells(ii, col).Value = X.Cells(i, col).Value Next If i = 2 Then i = 1 i = i + Nukitori_Step ii = ii + 1 Wend End Sub ここからプログラム(10行ごとに抜き出す+増減があった場合も抜き出す) ただし以下の箇所でエラーが起こる If i > 3 And Abs(Cells(i, 1) - Cells(i - 1)) >= 10 Then 中断モードでコードを実行することができませんと。 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ Sub 抽出() Dim i As Long Dim j As Long Dim ws1 As Worksheet Dim ws2 As Worksheet Dim Lastline As Long Dim SelFlg As Boolean '抽出データかどうかの Set ws1 = Worksheets("OriginDT") '元データ Set ws2 = Worksheets("SelectDT") '抽出データ Lastline = ws1.Cells(Rows.Count, 1).End(xlUp).Row '最終行番号を取得 ws2.Cells(1, 1) = ws1.Cells(1, 1) '見出し部分のコピー ws2.Cells(1, 2) = ws1.Cells(1, 2) j = 1 For i = 2 To Lastline SelFlg = False '10で割ったあまりが1(つまり10行おき)または最初のデータのとき If i Mod 10 = 1 Or i = 2 Then ' SelFlg = True '抽出対象にする End If '2行目以降で一つ上の行との差が10以上のとき If i > 3 And Abs(Cells(i, 1) - Cells(i - 1)) >= 10 Then SelFlg = True '抽出対象にする End If If SelFlg = True Then '抽出対象だったらコピー j = j + 1 ws2.Cells(j, 1) = ws1.Cells(i, 1) ws2.Cells(j, 2) = ws1.Cells(i, 2) End If Next End Sub

  • スタイルシート 

    さっそく質問させていただきます。 <table border> <tr> <td rowspan="3"> <h3>AAA</h3> <ul> <li>aaa</li> <li>bbb</li> <li>ccc</li> </ul> </td> <td> <h3>BBB</h3> <ul> <li>aaa</li> <li>bbb</li> </ul> </td> </tr> <tr> <td> <h3>CCC</h3> <ul> <li>aaa</li> <li>bbb</li> </ul> </td> </tr> <tr> <td> <h3>DDD</h3> <ul> <li>aaa</li> <li>bbb</li> </ul> </td> </tr> </table> このタグを記述すると左に右の三つのセルをまたがったセルが表示されると思うのですが、これと同じレイアウトをスタイルシートで表現するにはどのように記述すればよいのでしょうか? 左側に一つのボックスを置いて、その直ぐ隣に三つのボックスを置きたいのです。

    • ベストアンサー
    • CSS
  • おしえてください

    下記ソースを書きました。 AAAのところtextboxにして 値をほかのフォームに飛ばしたいのですが どのように書きなおせばできますか? <?php print "<table border=1>"; for ($i = 1;$i <= 9; $i++) { print "<tr><td>".$i."</td>"; for ($j = 1; $j <= 10; $j++) { if ($j == 10){ continue 2; } print "<td>".AAAA."</td>"; } print "</tr>" ; } print "</table>"; ?>

    • 締切済み
    • PHP
  • テーブルタグ表示が上手くいかない(html・CSS

    下のタグを使うと、ブログに下記画像上部のように表示されているのですが 理想としては画像の下部分のように綺麗に表示したいです。 自分なりに何度かタグを弄っているのですが何度やっても画像上部のように乱れて表示されてしまい ムキー!っとなってます。 大変申し訳ないのですが、画像の下部分のように表示できるタグを教えてください。 何卒お願いします。 画像内のピンクの部分は実際には<img src="で指定された画像になります。 使ったタグ <table border="1"> <td><table id="table-03"> <colgroup> </colgroup><tr> <td><a href="jpg"><img src="i.jpg" alt="" width="150" height="220" class="aligncenter size-full wp-image-227" /></a></td> <td><table id="table-03"> <colgroup> </colgroup> <tr> <tr><td>あああ名</td> <td>いいい</td> </tr> <tr> <td>ううう</td> <td>えええ</td> </tr> <tr> <td>おおお</td> <td>かかかかか~</td> </tr> </table></td> </tr> </table> </DIV> </colgroup><tr> <td><a href="jpg"><img src="i.jpg" alt="" width="150" height="220" class="aligncenter size-full wp-image-227" /></a></td> <td><table id="table-03"> <colgroup> </colgroup> <tr> <tr><td>あああ名</td> <td>いいい</td> </tr> <tr> <td>ううう</td> <td>えええ</td> </tr> <tr> <td>おおお</td> <td>かかかかか~</td> </tr> </table></td> </tr> </table> </DIV>

  • <table>の高さ固定。情報増加時、高さ自動変化

    <table>で<td>の中に入れる文字の行が 多くなったり少なくなったりする形のもので 少ないときは高さを150pxに固定し、 多くなったときは行数に合わせて 自動的に高さが変化するものを作りたいです。 サンプルを作ってみました。 アドバイスをお願いいたします。 <html> <head> <title></title> <body> <table style="width:200px; height:150px; background-color:#ccc; vertical- align:top; display:block; margin:20px;"> <tr> <td> <ul> <li>あいうえお</li> <li>あいうえお</li> </ul> </td> </tr> </table> <table style="width:200px; height:150px; background-color:#ccc; vertical- align:top; display:block; margin:20px;"> <tr> <td> <ul> <li>あいうえお</li> <li>あいうえお</li> <li>あいうえお</li> <li>あいうえお</li> <li>あいうえお</li> <li>あいうえお</li> <li>あいうえお</li> <li>あいうえお</li> <li>あいうえお</li> </ul> </td> </tr> </table> </body> </html>

    • ベストアンサー
    • HTML

専門家に質問してみよう