※ ChatGPTを利用し、要約された質問です(原文:Excelのセルに HTML を貼りつけたい)
ExcelのセルにHTMLを貼りつけたい
2012/01/29 22:39
初めて質問いたします。
Excel2010で、セルにHTMLコードを代入して、HTMLのスタイルが付けられた文字にしたいと思っています。
スタイルはfont color =redと極めてシンプルですが、使用される可能性のある文字が少々特殊で、ヨーロッパ言語やロシア語、アラビア語などどんな文字がくるかわかりません。それでバイナリ扱いにしています。読み込まれるHTMLのエンコードはUTF-16(Unicode)です。
ヨーロッパ語はVBA に直接書くとアクサン/ウムラウトが化けてしまうため、以下のスクリプトではC:\test.html から読み込む形式にしました。HTML スタイルを有効にするために、クリップボードに強引にHTMLコードを書き込み、それを貼りつけています。
●以下は該当箇所を抜粋してそのままテスト可能にしたものです。
Sub test()
Dim CB As New DataObject
Dim S
Set S = CreateObject("ADODB.Stream")
S.Open
S.LoadFromFile "C:\test.html"
S.Position = 0
S.Type = 1
S.Position = 2
ReDim Report(0) As Byte
Report = S.Read()
Debug.Print Report
CB.SetText Report
CB.PutInClipboard
Cells(1, 1).PasteSpecial (xlPasteAll)
End Sub
●test.html の中身は以下です。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd ">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=unicode">
<font color="red">kopp</font>int<font color="red">ás</font>
</body></html>
このコードは動きますが、残念ながらセルに貼り付けられるとアクサン・ウムラウトが落ちてしまいます。
元はkoppintásなのですが、貼り付けるとkoppintasとáが普通のaになってしまいます。
文字コード変化や文字化けはPasteSpecialの寸前まで起きていないことは確認済みですので、このアクサン落ちは明らかに PasteSpecial で起きています。
なお、test.htmlのブラウザ表示をそのままセルに貼り付けた場合は、もちろんアクサンは落ちません。上のスクリプトでは、コピー操作で得た情報ではなく、クリップボードに無理やり書き込んだ情報なので、何か必要な情報が不足しているのではないかと推測しています。
さらに、日本語/ロシア語/ギリシャ語をこのスクリプトで貼り付けた場合、Cells(1, 1).PasteSpecial (xlPasteAll)のところでエラーになってしまい貼りつけられません。アラビア語にいたっては全文字化けてしまいます。
いろいろ試してみて、今のところ PasteSpecial で xlPasteAll を指定した場合のみHTMLコードを何とかスタイル付きでセルに貼り付けられたので (なぜか他の xlPaste はどれもエラーになる) 、仕方なくこれにしてみようかと思っていたのですが、上記のアクサン落ちとキリル文字などでのエラーで困っています。
クリップボードを使わず、素直にHTMLをセルに代入し、HTMLを解釈してもらってスタイルを付けられれば一番よいのですが、何か方法はありますでしょうか。
具体的なコードでなくても、「これを使えばよい」だけでも結構です。
よろしくお願いします。
質問の原文を閉じる
質問の原文を表示する
お礼
アイディアありがとうございます! この処理はループ内で多数繰り返されるので、IEからコピーすると画面がバタバタしそうでこの方法は検討してませんでした。 どうしてもだめな場合に試してみます。