Excelのこととか色々

マクロをどんな Excel ファイルにも実行できるように設定して、3秒かかる操作も1秒で完了。あといろいろ書いてみます・・・

【Excel/VBA のこと12...はてなブログでも使えるHTMLのテーブル作成】

【Excel/VBA のこと 12】

f:id:tuna-kichi:20200223230704p:plain

私は、Excel で仕事をすることが多いためか、

表(テーブル)を使ってまとめるのが好きです。

比較するものの数が少なくても、Excelで表にして、

メールに貼り付けて、報告します。

 

表を使った方が見やすいだろう と思うことがあるので、

過去の記事でも少しだけ、表を使っています。

 

このブログは、はてなブログですが、

Excel で作成した表をそのまま貼り付けることはできず、

HTMLでテーブルを作成する必要があるのでちょっと大変です。

Excel のように簡単にはできません。

 

そこで、Excel で表を作成して、HTMLの記述に変換するマクロを考えました。

Excel で表を作成したら、あとはブログのHTML編集にコピペするだけです。

 

 _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

HTMLのテーブルのタグ

HTMLで表を作成するためには、以下のように記述します。


<Table>・・・ここからテーブル(表)が始まります。
 <Tr>・・・行の一列目がここから始まります。(Table Row の略かな?)
  <Td>・・・実際のデータを入力します。(Table Data の略かな?)
  </Td>・・・<Td> を閉めます。(一つの箱に入れるデータはここまで)
 </Tr>・・・<Tr>を閉めます。(列はここまで)
</Table>・・・テーブルはここまでです。

青字の部分が HTML タグと呼ばれるもので、

テーブルを作成する最低限必要なものです。

上記の場合は、一行一列なので、一つの箱だけ作られます。

 こんな感じ↓

データ

 

Excelシートの準備

やりたいことは、表を Excel で作成して、

その表をHTMLの記述に変換して、ブログにコピーする です。

まずは、以下のように、Excel のシートを設定しました。

 

セルC2 以降にマクロで作成したHTMLの記述を記述する と決めました。

表は、列C 以外のどの場所に作成してもOK。

たぶん、なんとなく赤点線くらいの範囲です。 

f:id:tuna-kichi:20200523220621p:plain

 

試しに、小学生の算数にでてきそうな表を作ってみました。

作成したら、その範囲を選択。

そしてマクロを実行します。

f:id:tuna-kichi:20200523232006p:plain


マクロ

標準モジュールに記述してくださいね。

どんな Excel ファイルでも実行できるようにしたい場合は、

個人用マクロブックの標準モジュールに記述してください。

 

www.tuna-kichi.com

 

***************************************************************************
Sub CreateTable() 

 Dim HLastR As Long 'HTML記述用に使用
 Dim FirstCol As Long
 Dim LastCol As Long
 Dim TotalCells As Long
 Dim i As Long

 TotalCells = Selection.Count  '選択された範囲の総セル数
 FirstCol = Selection(1).Column  '先頭列
 LastCol = Selection(Selection.Count).Column  '最終列

 'セルが1つしか選択されていない場合はメッセージを表示して、終了
 If TotalCells = 1 Then
  MsgBox "表が選択されていません。終了します。"
  End 'マクロを終了させます
 End If

 '列Cを空欄にする
 Columns(3).ClearContents

 Cells(2, 3) = "<table>" 'C2から書き始める

 For i = 1 To TotalCells
   '最終行を取得する。「Ctrl+↑キー」と同じ動き
  HLastR = Cells(Rows.Count, 3).End(xlUp).Row + 1
  'Selection(i)の列が、先頭列と同じ場合<tr>を記述する
  If Selection(i).Column = FirstCol Then 
   Cells(HLastR, 3) = "<tr>"
  End If

  HLastR = Cells(Rows.Count, 3).End(xlUp).Row + 1 '最終行を取得する
  Cells(HLastR, 3) = "<td>" & Selection(i) & "</td>" '実際のデータ

  HLastR = Cells(Rows.Count, 3).End(xlUp).Row + 1 '最終行を取得する。
  'Selection(i)の列が、最終列と同じ場合</tr>を記述する
  If Selection(i).Column = LastCol Then 

   Cells(HLastR, 3) = "</tr>"
  End If
 Next i

 HLastR = Cells(Rows.Count, 3).End(xlUp).Row + 1 '最終行を取得する
 Cells(HLastR, 3) = "</table>" '最後にテーブルを閉める

 Range(Cells(2, 3), Cells(HLastR, 3)).Copy  'HTMLの記述をコピーする

End Sub
***************************************************************************

ポイントは、以下で使用している、赤字のところ

TotalCells = Selection.Count  '選択された範囲の総セル数
FirstCol = Selection(1).Column  '先頭列
LastCol = Selection(Selection.Count).Column  '最終列 

 

Selection.Count で、選択している範囲のセルの数を数えます。

表の左上からスタートして、右に進み、最終列まで行ったら

2行目に移り、左から数えていきます。

 

Selection(1) は、下表の場合は 「果物名」

Selection(8) は、「130」(みかんの値段)を表します。

f:id:tuna-kichi:20200523223352p:plain


Selection(1).Column は、最初のセルの列を取得できます。

(「果物名」の列の 「E」、または、「5」)

つまり、表の先頭列を、取得できるのです。

 

Selection(Selection.Count).Column で、選択されているセルを数えて、

その範囲の列数を取得できます。

 

これで、どの列から初めて、何列分処理を繰り返す 

というマクロが書けます。

 

注意が必要なところは、HTMLを記述するたびに、

最終行を再取得していかなければなりません。

一度だけしか、最終行を取得しないと、どんどん上書きされ、

最終的に </table> しか残りません。

 

このマクロを実行すると、こんな結果になります。

f:id:tuna-kichi:20200523230047p:plain

 

最後にHTMLを記述したセルをコピーするようにしたので、

Range(Cells(2, 3), Cells(HLastR, 3)).Copy

後は、はてなブログのHTML編集に張り付けるだけ。

 

貼り付けて・・・

f:id:tuna-kichi:20200523230517p:plain


「編集見たまま」に、移動してみると、こんな感じで表が作成できました。

ここまでできれば、色や、中央揃えなどはそんなに大変ではないので、

ネット検索で編集してください。

果物名 値段 個数
リンゴ 100 1
みかん 130 2
バナナ 110 5

 

個人用マクロブックの標準モジュールに記述すれば、 

リボンに登録して、いつでも使えます。

登録方法はこちらを参考にしてください。

 

www.tuna-kichi.com

  

 

こういう、マクロを作ると、すごく楽しいし、うれしいです。

きっと、この思想は別の作業の自動化に役に立つはず。

Excel から HTMLへ・・・これもハイブリッドといえるかなぁ・・・

 

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

  Graspyで無料プログラミング講座を受講する