まりふのひと

GoogleカレンダーをExcelにつなげて印刷したい-3

いきさつ

  1. GoogleカレンダーをExcelにつなげて印刷したい-1
    • いきさつは上記サイトにある‥‥ (たぶん)
    • GoogleカレンダーOutlook経由で csvファイルに出力するまでは出来た‥‥ で、終わった。
  2. GoogleカレンダーをExcelにつなげて印刷したい-2
    • Googleカレンダーの「内容」欄(列)に HTMLコードがあるものがあり、Excelの書式設定では対応できない(取り除けない)ことが判った...

内容欄(列)の HTMLコードを削除する

 これは前回の宿題で、VBAで対応するしかないと、Google先生に参考になるサイトを教えてもらった。

事前調査

改行コードを使う【vbCrLf、vbLf、vbCrがあります】|大体でIT

daitaideit.com

要旨

  • 改行コードは、3種類あって、「vbCrLf」と「vbLf」、「vbCr」です。
     エクセルやVBAで改行を使うのであれば、「vbLf」を使いますWindowsのメモ帳などのテキストファイルでは、改行コードは「vbCrLf」となります。
  • 改行を削除する方法は、2種類あって、「Replace」と「Clean」があります。
     応用が利くので、「Replace」を覚えておくと便利です。無駄な改行を削除するには、Replaceをループして使います。

文字列に改行コードが含まれるか判定する【InStr関数】【ExcelVBA】 | VBA Create

vba-create.jp

  • セル内の改行 Alt + Enter ではvbLfの改行です。
  • 他システムからエクスポートされたCSVファイルなどはvbCrLfの形も多いです。
  • という事は、vbLfだけの判定では改行チェックとしては、弱いかもしれません。
  • 逆に改行コードを判定するのではなく、指定の改行コードに変換してしまうのも手です。

セル内の改行を検索/置換する | 日経クロステック(xTECH)

xtech.nikkei.com

 「ホーム」タブ右端の「検索と選択」ボタンをクリックして「置換」を実行しよう。表示される「置換」ダイアログボックスの「検索する文字列」ボックスをクリックしたら、[Ctrl]キーを押しながら[J]キーを押そう。この[Ctrl]+[J]キーが改行コードを意味するのだ。
 [Ctrl]+[J]キーを入力しても「検索する文字列」ボックスは何も変化しない。だがそれでいいのだ。

UTF-8とUTF16の違いは?

atmarkit.itmedia.co.jp

 UTF-8英数は1バイトで表現し、日本語は3バイトで表現するようになっています。

バイナリダンプ アプリ
  • PowerShell の Format-Hex コマンドでファイルダンプしてみたが、日本語が表示されず、位置を特定し難しいので諦めた。
  • FavBinEdit窓の杜よりダウンロードした。
    • このアプリに決めたのは、サンプル画像に日本語が表示されていたから...

マクロ(VBA)でHTMLタグ等を取る

  1. Googleカレンダーでは‥‥
    • 右図はたまたま見つけたもの。
  2. Exelにつなぐと‥‥
    • 改行されていない。
    • 後半はhtmlタグだらけ...
  3. VBAで行ったことは‥‥(完成版)
    1. " " を " " に置換(Replaceコマンド)
    2. "<br>" を vbLf(行内改行)に置換(Replaceコマンド)
    3. vbCrLf を vblf に置換(Replaceコマンド)
      • これには苦労した。(後述
    4. HTMLタグを "" に置換
      • Replaceコマンド*1では出来なかったので、マクロの記録を貼り付けた。
    5. 連続した vbLf(行内改行)を1っにする(Replaceコマンド)
    6. 先頭のvbLfを取る(Left)
    7. 末尾のvbLfを取る(Right)
    8. 前後のスペースは機ある度に取っている(Trim)
  4. 結果は

空白行が取れない原因は...

 上記 3.3 は当初無かった。無くても上手く処理されていたように見えたのだが、気になるカレンダーが見つかった。

  1. Googleカレンダーの内容
    • 「普通」だと思うのだが...
  2. Outlook経由で見た Excelのセル
    • 英語で、カレンダーには無い情報が書かれている。
    • 空白行は取ったはずなのだが...
  3. SimpleTranslate/Firefox に頼んで翻訳してもらうと‥‥
    • Google Meet をもっと勉強しろ‥‥ と、言っているようだ。
    • Googleカレンダーで何処かを触ったのだろう...
  4. 16進数でダンプするしかないと思い‥‥
    1. メモ帳に貼り付け、memo.txt で保存した。
    2. FavBinEdit でダンプした‥‥
      • コード "2D"(半角ハイフン)の前を見ると、 "0D 0A 0D 0A" となっている。
         その前の "E3 80 82" は句点「。」
      • Googleが書いた時は 0D0A(VBA の vbCrLf)になるのかなぁ~ Windowsだから...
  5. "0D0A" が連続していることがわかったので‥‥
    1. vbCrLf を vbLf に置換した後、
    2. vbLf & vbLf を vbLf に置換するようにした。

編集後記

  • Windows(=Googleカレンダー)の改行は 0D0A であることをうっかり忘れていた。
  • Excelのセルに "0D0A" が「ある」ということが判ったが、今後に役立つことは無いだろう...
  • 今は 休腰きゅうよう中‥‥ 来週から 田んぼ/水路 の土浚いを始める予定なので、色々調べたいこと(解っても恐らく役に立たない...)もあるが、 アップすることにした。
  • 次回は、自分のために全手順を整理したい...


*1:Replace(セルの値,"<*>","")