ファイルのマージ

1.htmlファイルの任意の場所にvbaで作成したタグを埋め込む方法

まずは任意のタグを埋め込むhtmlファイルのサンプルを作成

<html>
  <head>
    <title>エクセル マクロ テスト</title>
    <meta http-equiv="Content-Type" content="text/html; 
                     charset=Shift_JIS" />
  </head>
  <body>
    <h1>Fool For the City</h1>
    <hr>
    <br>
<!---Target-->
    <hr>
    <div align="right">
      Media Kiss Lab
    </div>
  </body>
</html>

ここでは<!—Target–>をターゲットとする。

次にエクセルファイルを開いてvbaを作成する。

CommandButtonを1つ配置して、それをクリックしたら実行するプログラムにする。

Private Sub CommandButton1_Click()
'変数の宣言
Dim xlAPP As Application
Dim SFILE As Variant
Dim WFILE As Variant
Dim intFFIN As Integer
Dim intFFOUT As Integer
Dim strREC As String
Dim CNT As Integer


'挿入用HTMLを作成
'vbNewLineは改行の意味なので適当にHTMLを生成してくださいwww
'SHTMLという変数に差し込みたいHTMLを全て入れるのがポイントね
'このサンプルではvbaが組み込まれたシートのX=3,Y=7からY軸を下に
'確認していき空白になるまで繰返しテーブルタグに入れるって書いてます
CNT = 7
SHTML = SHTML & "<table>" & vbNewLine
Do While Cells(CNT, 3) <> ""
  SHTML = SHTML & "  <tr><td>" & vbNewLine
  SHTML = SHTML & "  " & Cells(CNT, 3) & vbNewLine
  SHTML = SHTML & "  </td></tr>" & vbNewLine
  CNT = CNT + 1
Loop
SHTML = SHTML & "</table>"


'読込む用のHTMLファイルを選択する
'読込むHTMLが固定の場合はSFILEにPathを書いてね
SFILE = _
  Application.GetOpenFilename( _
    Filefilter:="HTML(*.html),すべてのファイル(*.*)" _
    , FilterIndex:=1 _
    , Title:="元ファイルを選択" _
    , MultiSelect:=False _
    )

'キャンセルボタンを押された場合はこのコードは終了します
If SFILE = False Then
  Exit Sub
End If

'書き込む用のHTMLファイルを選択する
'初期のファイル名はmarge.htmlになってるので
'ここは適当に変更してみてね
Set xlAPP = Application
xlAPP.StatusBar = "保存ファイル選択"
WFILE = _
  xlAPP.GetSaveAsFilename( _
  InitialFileName:="marge.html", _
  Filefilter:="HTML(*.html),すべて(*.*)" _
  , Title:="保存ファイル選択" _
  )

'キャンセルボタンを押された場合はこのコードは終了します
If WFILE = False Then
  Exit Sub
End If

'読み込み用HTMLのオープン
intFFIN = FreeFile
Open SFILE For Input As #intFFIN

'書き込み用HTMLのオープン
intFFOUT = FreeFile
Open WFILE For Output As #intFFOUT

'読み込み用ファイルを1行づつ読込んでる
Do Until EOF(intFFIN)
  Line Input #intFFIN, strREC
  '差換える文字列を発見したらSHTMLで置換する
  '差換える文字列は適当に変更してね
  strREC = Replace(strREC, "<!---Target-->", SHTML)
  'ファイルに書き出す
  Print #intFFOUT, strREC
Loop

'処理が終わった後は閉じますねwww
Close #intFFIN
Close #intFFOUT
xlAPP.StatusBar = False

MsgBox ("処理が完了したよ(^^)")

End Sub

さて、このままでも問題は無いのだけど・・・どうせなら他のアプリケーションに読ませる可能性も考慮して

出力ファイルの文字コードをEUCにするコードも考えてみよう

Private Sub CommandButton1_Click()
'変数の宣言
Dim xlAPP As Application
Dim SFILE As Variant
Dim WFILE As Variant
Dim intFFIN As Integer
Dim strREC As String
Dim CNT As Integer
Dim txt As Object


'挿入用HTMLを作成
'vbNewLineは改行の意味なので適当にHTMLを生成してくださいwww
'SHTMLという変数に差し込みたいHTMLを全て入れるのがポイントね
'このサンプルではvbaが組み込まれたシートのX=3,Y=7からY軸を下に
'確認していき空白になるまで繰返しテーブルタグに入れるって書いてます
CNT = 7
SHTML = SHTML & "<table>" & vbNewLine
Do While Cells(CNT, 3) <> ""
  SHTML = SHTML & "  <tr><td>" & vbNewLine
  SHTML = SHTML & "  " & Cells(CNT, 3) & vbNewLine
  SHTML = SHTML & "  </td></tr>" & vbNewLine
  CNT = CNT + 1
Loop
SHTML = SHTML & "</table>"


'読込む用のHTMLファイルを選択する
'読込むHTMLが固定の場合はSFILEにPathを書いてね
SFILE = _
  Application.GetOpenFilename( _
    Filefilter:="HTML(*.html),すべてのファイル(*.*)" _
    , FilterIndex:=1 _
    , Title:="元ファイルを選択" _
    , MultiSelect:=False _
    )

If SFILE = False Then
  Exit Sub
End If

'書き込む用のHTMLファイルを選択する
'初期のファイル名はmarge.htmlになってるので
'ここは適当に変更してみてね
Set xlAPP = Application
xlAPP.StatusBar = "保存ファイル選択"
WFILE = _
  xlAPP.GetSaveAsFilename( _
  InitialFileName:="marge.html", _
  Filefilter:="HTML(*.html),すべて(*.*)" _
  , Title:="保存ファイル選択" _
  )
  
If WFILE = False Then
  Exit Sub
End If

'読み込み用HTMLのオープン
intFFIN = FreeFile
Open SFILE For Input As #intFFIN

'書き込み用HTMLのオープン
Set txt = CreateObject("ADODB.Stream")
txt.Type = 2
'文字コードをEUC-JPにセットしている。UTF-8の場合はそのままUTF-8とすればオッケー
txt.Charset = "EUC-JP"

txt.Open

'読み込み用ファイルを1行づつ読込んでる
Do Until EOF(intFFIN)
  Line Input #intFFIN, strREC
  '差換える文字列を発見したらSHTMLで置換する
  '差換える文字列は適当に変更してね
  strREC = Replace(strREC, "<!---Target-->", SHTML)
  'オブジェクトに一時的に書き出す
  txt.writetext strREC, 1
Loop

'txtというオブジェクトに格納していたのを指定したファイル名で書き出してます。
'2は新規作成か上書き保存というオプション。デフォルトの1は新規作成はするが
'上書きはしない
txt.savetofile (WFILE), 2


'処理が終わった後は閉じますねwww
txt.Close
Set txt = Nothing
xlAPP.StatusBar = False

Close #intFFIN

MsgBox ("処理が完了したよ(^^)")

End Sub

さぁ、どこが変わってるかわかったかな?
コメントを参考にして自分の環境に合わせて自由に使ってみてください(^^)

あっ!
吐き出すHTMLファイルの文字コードを変える場合は、最初に作成したHTMLのMETAタグの
文字コードも修正が必要ですよ(^^;)

<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" />
  ↓
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP" />
office/2003/excel/vba00.txt · 最終更新: 2010/08/08 15:01 by miyako
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0