こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセル表を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>

セルを書き換えた方が早いですが、名前がバラバラですし、何千行もあり、作業が大変なので、マクロを書き換えた方が早いかと思いましたので。
宜しくお願いします。

投稿日時 - 2019-05-27 11:34:13

QNo.9620558

困ってます

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

参考に
Sub convertHTML2()
  Dim ws As Worksheet
  Dim htmlFile As String
  Dim i As Long, j As Long

  Set ws = ThisWorkbook.Worksheets(1)  
  htmlFile = ActiveWorkbook.Path & "\ファイル名.html"
  Open htmlFile For Output As #1
  i = 1
  Print #1, "<table>"
  Do While ws.Cells(i, 1).Value <> ""
    Print #1, vbTab & "<tr>";
    j = 2
    Do While ws.Cells(i, j).Value <> ""
      Print #1, "<td>" & ws.Cells(i, j).Value & "</td>";
      j = j + 1
    Loop
    Print #1, "<td>" & ws.Cells(i, 1).Value & "</tr>" & vbCr;
    i = i + 1
  Loop
  Print #1, "</table>"
  Close #1
  MsgBox htmlFile & "に書き出しました"
End Sub

投稿日時 - 2019-05-27 13:28:39

お礼

おかげさまでうまくできました。
ありがとうございました。

投稿日時 - 2019-05-27 14:22:35

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

横に何列も氏名と色2組で並んでいるのでしたら。

Sub Example()
Dim ws As Worksheet
Dim htmlFile As String
Dim i, j As Long

Set ws = ThisWorkbook.Worksheets(1)
htmlFile = ActiveWorkbook.Path & "\ファイル名.html"
Open htmlFile For Output As #1

Print #1, "<table>"
For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
Print #1, vbTab & "<tr>";
For j = 1 To Cells(i, Columns.Count).End(xlToLeft).Column Step 2
Print #1, "<td>" & ws.Cells(i, j + 1).Value & "</td>" & "<td>" & ws.Cells(i, j).Value & "</td>";
Next j
Print #1, "</tr>" & vbCr;
Next i
Print #1, "</table>"
Close #1
MsgBox htmlFile & "に書き出しました"
End Sub

投稿日時 - 2019-05-27 14:22:50

ANo.3

> セルの位置もバラバラなので

バラバラですか?2列しかデータ記載してませんよね。
たかだか2列の列の切り取り挿入なんて手間は大したことがないと思いますが。
2列じゃないのでしたら、本来のデータを示さないと書き替えたマクロは正しく機能しませんよ。

投稿日時 - 2019-05-27 14:00:36

ANo.1

色の列を切り取り
名前の列を選択して「切り取ったセルの挿入」をすれば列が入れかわります。

投稿日時 - 2019-05-27 11:59:58

お礼

セルの位置もバラバラなので切り取ったセルの挿入はものすごく手間がかかりますので…

投稿日時 - 2019-05-27 13:12:01

あなたにオススメの質問