当初、ホームページビルダーに頼っていましたが、細かい部分の変更が困難なためタグを覚えました。このホームページの大部分がデータ量の多いExcel の表に基づいていて、さらにタイ文字を表示させるという課題もあり、悪戦苦闘の連続でした。
Excelの表をページに貼り付ける、自分なりの方法を紹介します。プロの方なら他の方法(例えばperl言語CGIとデータベースの併用等々)をとり、なんと稚拙なやり方と笑われかねないですが。
ここでは、簡略のため表データは A1 cellから詰まっているとします。
表題、罫線、field などの設定は応用問題です。
ワークシートを2つ挿入して、シート名 "webpage" "webstyle" にします。
挿入しなくても Sheet2,Sheet3 が表示されている場合はシート名を定義します。
webstyleのシートのA列のトップから次のような汎用の記述を記入しておきます。
(注)必ずA列のみに書いてください。
書き加えたい事が後々出てくるかもしれませんので、途中空白cellを作ってもかまいません。途中挿入をしないで、50行以内にしてください。(50行あれば十分と思います。)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta http-equiv="Content-Style-Type" content="text/css">
<title>Excelの表</title>
</head>
<body>
-----
-----
<table>
webstyle のシートの A列 の51行目以降に次のようなtable以外の汎用の記述を記入しておきます。
(注)必ずA列のみに書いてください。
書き加えたい事が後々出てくるかもしれませんので途中空白cellを作ってもかまいません。50行以内にしてください。
</table>
</body>
</html>
html 文書のファイルを可視化するソフトウェアーをブラウザ(例えばインターネットエクスプローラ(IE)など)と呼んで良いと思います。いずれもオリジナルの文書に文法上エラーがあっても原則的無視します。特に新しい定義が必要な場合以外 </tabel>, </font> などの "終わりを宣言する" 記述がなくても動作は同じです。つまり"51行目以降" の記述は必要ないのです。さらに言えば、</td>, </tr> も不必要ですがここでは、文法に忠実な表記をしています。
編集画面
Sub makeWeb()
Dim x, y, i, j, n As Integer
Dim w As String
n = 1 ’n はwebpageのシートに作る行の連番
For i = 1 To 50
w = Worksheets("webstyle").Cells(i, 1)
If w = "" Then
Else
Worksheets("webpage").Cells(n, 1) = w
n = n + 1
End If
Next i
y = Activecell.CurrentRegion.Rows.Count
x = Activecell.CurrentRegion.Columns.Count
For i = 1 To y
Worksheets("webpage").Cells(n, 1) = "<tr>"
n = n + 1
For j = 1 To x
Worksheets("webpage").Cells(n, 1) = "<td>" & Cells(i, j) & "</td>"
n = n + 1
Next
Worksheets("webpage").Cells(n, 1) = "</tr>"
n = n + 1
Next
For i = 51 To 100
w = Worksheets("webstyle").Cells(i, 1)
If w = "" Then
Else
Worksheets("webpage").Cells(n, 1) = w
n = n + 1
End If
Next i
End Sub
50行で足りない場合は 上記の For i = 1 To 50 、For i = 51 To 100 の部分を
For i = 1 To 100、For i = 101 To 150 の如く換えます
貼り付け後の画面は次のようです。
マクロ編集画面を閉じ、Sheet1 に戻り、Alt + F8 または ツール → マクロ →マクロの実行(makeWeb)をクリックします。
本マクロは悪意を持つものでなく、実行してもシステムになんら影響を与えません。
(注) 本例は簡略を旨としているため次の条件が必須です。Excel では1つの cell 内で改行したい場合は、Alt + Enter を使います。しかし、ここで紹介する方法で元のデータにこのような改行設定をしていると、次項の notepad に作成されるテキストに不要な引用符 " が表示されます。
これを防ぐためには元のデータには改行の設定をしないでください。設定済みのデータを使って、特に改行を指定したい場合には元のデータを別のファイルにコピーしたうえ、指定解除し改行箇所に<br>を挿入しておけば解決します。
最初に作った、新しいシート(シート名 webpage)にはmetaタグなどを含む原稿が出来ているはずですので、これをnotepadなどに貼り付ければよいわけです。
ファイルの保存には「名前を付けて保存」を選び、sample.html など拡張子を付けなければなりません。
タイ語など特殊な文字が含まれていると保存の前に警告が表示されます。
次のようなプロシージャーを加えてください。
Sub NotePadCopy()
Dim MyRange as Range
Set MyRange = Worksheets("webpage").Range("a1").CurrentRegion
MyRange.Copy
Shell "notepad.exe", vbNormalFocus
SendKeys ("%EP")
SendKeys ("%FA")
SendKeys ("sampleweb.html")
End Sub
1回の操作でうまくいかなくて、引き続き try する場合や異なるデータを使いたい場合があります。
その際、ワークシート、sheet名 webpage には前回操作した原稿が残っている事を忘れてはいけません。
そのような時は、webpage のシートデータを消去してからにします。
タイ文字に限りませんが、Unicodeを使う以外はコード表示にしなければなりません。
とても人間のする作業ではありません。VBA で例えば次のようにします。
ワークシートを追加挿入し、sheet名を code とします。
このシートに、次のような変換コード付の表を作っておきます。また、タイ文字の全体範囲を範囲名 moji と名づけておきます。 なを、範囲名の付け方は次のようにします。 ワークシート webpage をアクティブにして、次のプロシージャーを実行すれば、コード変換できます。
Sub codechange()
Dim MySheet As Object
Set MySheet = Worksheets("code")
For Each c In MySheet.Range("moji")
If c.Value = "" Then
Else
ActiveSheet.Cells.Replace What:=c.Value, replacement:="" _
& Trim(Str(c.Range("A2").Value)) & ";"
End If
Next
End Sub
this page top