エクセルファイルをHTML化する際のマクロの設定

このQ&Aのポイント
  • エクセルファイルをHTML化する際に、マクロを使用して特定のシートをHTML化しています。しかし、生成されたHTMLファイルがフレーム内でセンタリングされてしまい、ブラウザのウィンドウを大きくするとレイアウトが狂ってしまいます。
  • また、HTMLファイルには特定の記述があり、これを変更することで左詰にすることができました。しかし、マクロで左詰に設定する方法を知りたいです。
  • 上記の課題に対してマクロを使用して左詰にする方法を教えてください。
回答を見る
  • ベストアンサー

エクセルファイルをHTML化する際のマクロの設定

会社のみんなが、手軽に更新履歴を書き込めるように、マクロにてエクセル内のあるシートをHTML化しています。 上記で自動生成したファイルは実はあるHTMLファイルのフレームの部品となっています。(Top、Left、RightのうちのRightです) しかし上記のファイルはなぜか、必ずフレームの中でセンタリングされてしまうため、ブラウザのウインドを大きくすると、レイアウトが狂ってしまい困ってます。(top、leftは左寄せになっています) 何とかマクロの範疇で左寄せにできないでしょうか? 以下マクロのHTML化の部分です。 -------------------------------------------------- 'HTML化始め With ActiveWorkbook.PublishObjects.Add(xlSourceSheet, _ "HTMLのパス", "シート名", "" _ , xlHtmlStatic, "test0001_29648", "") .Publish (True) .AutoRepublish = False End With 'HTML化終了 -------------------------------------------------- ちなみに・・・ 出来上がったHTMLファイルには <div id="test0001_29648" align=center x:publishsource="Excel"> という記述があり、ここを無理やりleftと変えると左詰になりました。 よろしくお願いします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。Wendy02です。 #2372623 と合わせて、こちらに書いておきます。 細かい、部分を手直ししました。 '//*標準モジュール*// 'Option Explicit Sub OutHtml() 'Excel 2002 用(Excel 2003 可) '注意:MYTITLE は、拡張子を入れないでください。 Const MYTITLE As String = "test0001_29648" Dim myPath As String Dim myFName As String Dim ShName As String Const EXT As String = ".mht" '拡張子指定 'フォルダを指定してください。 myPath = ThisWorkbook.Path & "\" ShName = ActiveSheet.Name myFName = myPath & MYTITLE & EXT With ActiveWorkbook.PublishObjects.Add( _        SourceType:=xlSourceSheet, _        Filename:=myFName, _        Sheet:=ShName, _        HtmlType:=xlHtmlStatic, _        Title:=MYTITLE)   .Publish True   .AutoRepublish = False End With ReplaceTextMacro myFName End Sub Sub ReplaceTextMacro(inFname As String) 'ファイル内部書き換え用マクロ Dim inFno As Integer, outFno As Integer Dim outText As String Dim Re As Object Dim TextLine As String Dim Matches As Object, Match As Object Dim buf As String Dim OUTFNAME As String Const REPSTRING As String = "Left" OUTFNAME = Mid(inFname, 1, InStrRev(inFname, ".") - 1) & ".bak" Set Re = CreateObject("VBScript.RegExp") Re.Pattern = "align=([^\s]+)" Re.Global = False inFno = FreeFile() Open inFname For Input As #inFno outFno = FreeFile() Open OUTFNAME For Output As #outFno Do While Not EOF(inFno)   Line Input #inFno, TextLine   If Re.test(TextLine) Then    Set Matches = Re.Execute(TextLine)    Set Match = Matches(0)    buf = Trim$(Match.SubMatches(0))    outText = Replace(TextLine, buf, REPSTRING)    Print #outFno, outText    buf = ""   Else    Print #outFno, TextLine   End If Loop  Close #inFno  Close #outFno    Name inFname As "tmp.mht"  Name OUTFNAME As inFname  Kill "tmp.mht" 'Tmpファイル削除    Set Re = Nothing   End Sub

shing0001
質問者

お礼

色々ありがとうございました 完璧です!! 大変助かりました

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 あッ、大変、すみません。一目で、コードが間違っているのが分かりました。ここで書いている時点では、コードは実際に動かしてはいませんが、間違いはないと思います。私は、寝ぼけていたのかもしれませんね。 下から14行上、Else から、3行目 (ライン除く) Write #outFno, outText  ↓ Print #outFno, outText です。 それと、 一番上から、9行目(ライン除く) Const REPSTRING As String ="Left" '新しい置換値 なお、そちらExcel 2002 ですから、 align=Left のほうがよいでしょうね。8/30付けのご質問で再確認しました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 >取り込んでReplaceとなると、面倒そうですね。 そんなことはないです。以下を見ていただければよいのですが、マクロのできる方でしたら、何だこんなものっていう感じだと思います。ただ、ちょっと気になることがあって、正規表現検索に切り替えました。私の方では、3DCenter とか、3DLeft になっていますので、その用意のためです。 もっと簡単にするなら、ScriptingObjectのテキストストリームで、(テキスト)ファイルを一気に読み込んで、それをReplace して、吐き出せばよいです。例えば、今、ごらんになっている、ここのページ全部を一括で読むことも可能です。それと、必ず、「align=center」というようになっているなら、それでよいはずです。昔は、理論的には可能でも、出来ませんでしたが、今は可能になりました。 VBAの変数のテキストバッファの大きさは忘れましたが、数万行だったと思います。汎用性を考えたのでやめました。 なお、ファイル名(INFNAME)はキメウチですから、定数の行を削除して、それを、プロシージャの引数にして、元のコードのサブルーチンにすれば出来上がります。 '----------------------------------------------------------- Sub ReplaceTextMacro() Dim inFno As Integer, outFno As Integer Dim outText As String Dim Re As Object Dim TextLine As String Dim Matches As Object, Match As Object Dim OutFname As String Const INFNAME As String = "test0001.mht" 'ファイル名 Const REPSTRING As String = "3DLeft" '新しい置換値 OutFname = Mid(INFNAME, 1, InStrRev(INFNAME, ".") - 1) & ".bak" Set Re = CreateObject("VBScript.RegExp") Re.Pattern = "align=([^\s]+)" Re.Global = False inFno = FreeFile() Open INFNAME For Input As #inFno outFno = FreeFile() Open OutFname For Output As #outFno Do While Not EOF(inFno)   Line Input #inFno, TextLine   If Re.Test(TextLine) Then    Set Matches = Re.Execute(TextLine)    Set Match = Matches(0)    Buf = Trim$(Match.SubMatches(0))    outText = Replace(TextLine, Buf, REPSTRING)    Write #outFno, outText    Buf = ""   Else    Print #outFno, TextLine   End If Loop  Close #inFno  Close #outFno  'ファイル名の交換  Name INFNAME As "tmp.mht"  Name OutFname As INFNAME  Name "tmp.mht" As OutFname    Set Re = Nothing   End Sub '-----------------------------------------------------------

shing0001
質問者

お礼

ありがとうございます!! ここまで面倒見ていただいて感謝感謝です!! 大変助かりました。 早速使ってみます。

shing0001
質問者

補足

すみません!! やってみたところ <div id="test0001_29648" align=center x:publishsource="Excel"> ⇒ "<div id=""test0001_29648"" align=3DLeft x:publishsource=""Excel"">" となってしまい、””(ダブルクォーテーションマーク)が画面に現れてしまいます。 ナゼでしょうか? ちなみに、上記のsubをFunction化してファイル名を引数渡しにしているます。 ※スミマセンマクロは初心者なモノで・・・

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 どうもデフォルトでなっているようで、設定を探してみましたが、見つかりません。 それなので、一旦吐き出した後に、そのファイルを取り込んで、Replace で、align=center をalign=left に、書き換えてしまったらどうですか? 今調べてみましたが、align=*** は、そのファイル(シート)で一意のようですから、問題ないと思います。

shing0001
質問者

お礼

そうですか・・・・ 取り込んでReplaceとなると、面倒そうですね。 とにかく動かすことが先決ですから、エクセルで横幅をすごく長くして、無理やり左寄せにすることで、一時しのぎにします。(フレームの幅に入りきらない部品HTMLは左寄せになるらしい) その後でじっくりご提案のやり方を作りこんでいきます。 (もちろん、平行して他の方法の検索も探してみます) ありがとうございました。

関連するQ&A

  • エクセルをHTML化するときに1行目に空白が入るのですが・・

    前に同じ内容でHTMLの左寄せの話を投稿した者です。 今度は1行目の空白について教えてください。 【経緯は前回と同じです】 会社のみんなが、手軽に更新履歴を書き込めるように、マクロにてエクセル内のあるシートをHTML化しています。 上記で自動生成したファイルは実はあるHTMLファイルのフレームの部品となっています。(Top、Left、RightのうちのRightです) しかし上記のファイルはなぜか、必ず1行目にかなり大きい空白が入るため、見た目が非常に不細工です。(Rigthのフレームだけデータの始まりがかなり下のほうになる) 何とかマクロの範疇でHTML化したときに、上部の空白の大きさのコントロールはできないでしょうか?? 以下マクロのHTML化の部分です。 -------------------------------------------------- 'HTML化始め With ActiveWorkbook.PublishObjects.Add(xlSourceSheet, _ "HTMLのパス", "シート名", "" _ , xlHtmlStatic, "test0001_29648", "") .Publish (True) .AutoRepublish = False End With 'HTML化終了 --------------------------------------------------

  • アイコンがエクセルのアイコンになってしまう

    エクセルシートに対して Sub test() With ActiveWorkbook.PublishObjects.Add(xlSourceSheet, "c:\test.html", ActiveSheet.Name, "", _ xlHtmlStatic, "", "") .Publish (True) .AutoRepublish = False End With End Sub をすると、HTMLファイルが作成できますがアイコンがエクセルのhtmlになってしまいます。 普通のhtmlファイルにする方法はありますか? アクセスの場合は、htmlにエクスポートすると普通のhtmlのアイコンになります。 バージョンは2003です。

  • マクロを組んだエクセルファイルにHTMLからリンクをかけると上手く動かない

    マクロを組んだエクセルファイルにHTMLからリンクをかけると、そのエクセルファイルをマクロ上から終了すると、終了できません。シートが残ってしまいます。リンクをかけずに直接起動するとちゃんとマクロ上から終了できます。どのような解決法があるでしょうか??

  • 図形をコピーするマクロ(エクセル)

    以下のマクロで、シート上にある図形(四角形 1)を、選択状態にあるセルの上に移動させることができます。 Sub test() Dim seru As Range On Error GoTo Errorline Set seru = Range(ActiveCell.Address) ActiveSheet.Shapes("四角形 1").Select With Selection.ShapeRange .Left = seru.Left .Top = seru.Top End With Errorline: End Sub 移動ではなくコピーにするには、どう変えればいいでしょうか?

  • エクセルマクロでファイルを開かず行をしらべたい

    こんにちは! エクセルマクロでファイルを開かず一番下の行を調べたいのですが、どうしたらよいでしょうか? 色々試行錯誤して、下記を組んでみましたが、上手くできませんでした。 test1のエクセルに下記のマクロを入れてあります。 C直下のtestフォルダの中のtest2.xlsのsheet1のファイルを読み込みたいです。 Dim line As Long Dim names As String names = "C:\test\[test2.xls]sheet1" line = ExecuteExcel4Macro("'" & names & "'!R1C1").End(xlUp).Row 「ファイルを開かず一番下の行を調べる」ことができれば、上記のマクロを動くようにするでも、別のマクロを提示するでも構いませんので、アドバイスのほどよろしくお願いいたします。

  • エクセルのマクロでHTMLファイルを出力するには

    エクセルのマクロでHTMLファイルを出力するには 下記アドレスのソースをもとに、エクセルでHTMLファイルを複数出力できたらと考えています。 内容は、sheet1のA列にテキストが入っていると、それを任意のファイル名(ダイアログ)でテキストとして保存が可能になるソースです。 ttp://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_040.html 出来ればこれを以下のように変えたいと考えております。 ●シート名「1」~「50」の計50シートのA列のテキストを、 それぞれのシート名+任意の文字列で保存をしたい。 ●ファイル名の任意の文字列については、シート内のセル (例:sheet1のA4)に記載されている内容としたい。 ●ファイル形式は、HTML形式で保存をしたい。 ●保存先のフォルダは任意のディレクトリ内 (例:C:\Documents and Settings\All Users\デスクトップ)の配下に、 シート内のセル(例:sheet1のA3)に記載されている内容を フォルダ名として、新規に作成し、その中に保存したい。 恐れ入りますが、ご回答よろしくお願いいたします。

  • Excel マクロ 別のファイルの情報をコピーして貼り付ける

    Excel 2007のマクロで、別のファイルの情報をコピーして貼り付ける マクロを作成しています。 別ファイルが1つであれば下記のマクロでできました。 他に別ファイルがもう1つあり、全部で2つのファイルからそれぞれ 必要なシートから情報をコピーしたいと思います。 ※各シート名は異なります。 別ファイルが2つになった場合、マクロをどのように記載すればよろしいでしょうか。 よろしくお願いいたします。 Sub Test1() Dim myCellall As Range Set myCellall = Sheets("すべて").Range("A1") With Workbooks.Open("\") With .Worksheets("すべて") .Range(.Range("A1"), .Cells.SpecialCells(xlCellTypeLastCell)).Copy myCellall End With .Close False End With End Sub

  •  エクセルに写真を挿入するマクロを組んでいます。

     エクセルに写真を挿入するマクロを組んでいます。 2003までは問題なく動作していたマクロが、 2007では位置調整がうまく行きません。  そこでネットで検索して With Selection .Left = Range("C6").Left .Top = Range("C" & rowa).Top End With のように Selection.Left を使えば解決するとありましたが、 (1)WIN VISTAのエクセル2007では おなじひとつのエクセルファイルの あるシートではコード通りが位置でるのに 違うシートでは縦位置がずれる。 (2)WIN XPのエクセル2007では すべてのシートで縦位置がずれる。 ただし、ずれの位置は(1)よりは少ない。 といずれのOSでも不具合が出ます。  事情によりエクセル2007でこのマクロを使用しなければならなくなり 非常に困っております。 どなたか解決方法をご存知の方、よろしくお願いします。  なお、(2)のWIN XPでは、エクセル2003も入っており、 その中では、全く問題なくマクロが動作しています。 実際のコードは下の通りです。 Sub 写真呼出(koumoku, jpgf, tr As Variant) Dim rowa As String ActiveWindow.ScrollColumn = 1 ActiveWindow.ScrollRow = tr ←選択したセルの行ナンバー ActiveSheet.Pictures.Insert(motopath & "写真\" & koumoku & "\" & jpgf & ".JPG").Select Selection.Name = "写真" Selection.ShapeRange.LockAspectRatio = msoTrue '縦横比の固定 Selection.ShapeRange.Height = 480 'Selection.ShapeRange.IncrementLeft 100 ←不具合が出たので止めた部分 'Selection.ShapeRange.IncrementTop 40  ←不具合が出たので止めた部分 rowa = tr + 2 With Selection .Left = Range("C6").Left .Top = Range("C" & rowa).Top End With End Sub

  • エクセルのマクロについて教えてください。

    現在エクセルで作ったファイルを14人に回覧で送信しようとしています。 それをマクロを使ってボタン一つで14人に送信します。 それぞれのアドレスはセルの【q12~q25】に入っています。 そのファイルデータは14人の共有サーバーに有り、14人誰でもそのボタン一つでファイルを更新したら14人に送信するようにマクロをくもとしているのですが上手くいきません。 メール送信のBSMTP.DLLなどは出来るだけ使いたくありません。 下記のがマクロです。 質問をまとめますと (1)マクロはどこがおかしいのでしょうか? (2)どのPCでもBSMTP.DLLなどは使用せず送信マクロを使えるように出来るのでしょうか?以前似たようなマクロ組んだら他のPCではメール送信出来ませんでした。 マクロは ***************************************** ActiveWorkbook.HasRoutingSlip = True With ActiveWorkbook.RoutingSlip .Recipients = Array(Union(Range("q12"), Range("q13"), Range("q14"), Range("q15"), Range("q16"), Range("q17"), Range("q18"), Range("q19"), Range("q20"), Range("q21"), Range("q22"), Range("q23"), Range("q24"), Range("q25"))) .Subject = "掲示板更新のお知らせ" .Message = "掲示板ファイルが更新されましたので確認してください。" .Delivery = xlOneAfterAnother .ReturnWhenDone = True .TrackStatus = True End With ActiveWorkbook.Route End Sub ***************************************** です。 宜しくお願いいたします。

  • エクセルのマクロについて

    エクセル2010を使用しています。 図面中の図形描画で描かれた四角のオブジェクトを 結合したセル(G7:H8)の中央に移動させるマクロを組みました。 マクロを組み実行したところ、動作はOKなのですが、 保存の際エラーが発生し修復しますか?となってしまいます。 続行すると、 修復されたレコード: /xl/drawings/drawing1.xml パーツ内のスケッチ (図形描画) と表示されます。 作成したマクロは以下の通りです。 おかしいところをご指摘ください。 よろしくお願いします。 Sub 打合図() ' ' 打合図 Macro ' ActiveSheet.Shapes.Range(Array("AutoShape 12")).Select Selection.Cut Range("G7:H8").Select ActiveSheet.Paste With Selection .Top = (Range("G9").Top - Range("G7").Top - .Height) / 2 + Range("G7").Top .Left = (Range("I7").Left - Range("G7").Left - .Width) / 2 + Range("G7").Left End With Range("N8").Select End Sub

専門家に質問してみよう