Excelの計算精度はIEEE 754準拠

excelってどんな精度なのかと調べてみた

Microsoft Excel は、IEEE 754 の仕様に基づいて設計され、浮動小数点数の格納方法と計算方法を決定していました

Excel で浮動小数点演算の結果が不正確になる可能性がある | Microsoft Docs

java のdoubleとかと同じ制度だね

検索でOR条件・AND条件を使う

Outlookのクイック検索(Ctrl+Eキー)の検索はデフォルトでは単語「or」条件なので不便。
そういうときは「AND」をつかいましょう。

 タコ AND イカ
 タコ OR イカ
 タコ NOT イカ

これだけ覚えておけばOK。

「プログラムにコマンドを送信しているときに、エラーが発生しました。」となったらDDE無視をOFFに

数日前からエクセルをダブルクリックすると
「プログラムにコマンドを送信しているときに、エラーが発生しました。」
といったエラーになってしまう。

f:id:GARAPON:20200625225028p:plain
エラー

エクセルを一旦起動してからファイルから開いたり、ドラッグアンドドロップすればファイルは開くのだが
メールの添付はひらけなくなるし非常に不便。

対処は何かと調べてみたらすぐ見つかった。
Excel でコマンドをプログラムに送信するときにエラーが発生しました | Microsoft Docs

んでこの対処の中のこれをやるだけでOKでした!

  1. [ファイルオプション] を選択し > Optionsます。
  2. [詳細設定] を選択して [全般] セクションまでスクロールし、[全般] 領域の [動的データ交換 (DDE) を使用している他のアプリケーションを無視する] チェックボックスをオフにします。
  3. [OK] を選択します。


DDEはWindows2.0の頃の遺産でOLEやCOMにとってかわられているので、DDEを使用しているアプリケーションを無視するのは正しいと思うのですが、いまだにWindowsシェルの関連付けとかでは使われているので、そのDDE命令をエクセルが無視しちゃうということなんでしょうかね?
でもだとするとExcelの壮大なバグですよね。。。。


参考DDEをつかったいたずら

DDEが有効だとこんな悪さができます。ここでは電卓立ち上げているだけですが、ファイルひらいただけでCMD乗っ取れるので、実質なんでもできちゃう恐ろしい仕組みです。
binary-pulsar.hatenablog.jp

結合セルを解除して値を埋め、埋めた個所の文字色を変更するショートカット

いやーやはりエクセルは魔術ですね。最高です。
列結合した表を成型するマクロの記事に対しこのブクマ。破壊力抜群ですね。

【エクセルVBA】一瞬で結合セルを解除して値を埋めるマクロ

Ctrl+A→Alt→H→M→U→Ctrl+G→Alt+S→K→Enter→Shift+−→↑→Ctrl+Enter でできるよ。なお実務でスムーズにやると変態扱いされる模様/あ、日本語入力時は=をEnterで確定させてね

2020/06/18 10:05
b.hatena.ne.jp

Ctrl+A→Alt→H→M→U→Ctrl+G→Alt+S→K→Enter→Shift+−→↑→Ctrl+Enter

やっていることはシンプルで

  1. Ctrl+A→Alt→H→M→U   表の結合を解除して、
  2. Ctrl+G→Alt+S→K→Enter 空白セルを選択
  3. Shift+−→↑→Ctrl+Enter 選択したすべてのセルに一つ上のセルを参照する数式を設定

としている。

これが

f:id:GARAPON:20200619210054p:plain
before

Ctrl+A→Alt→H→M→U→Ctrl+G→Alt+S→K→Enter→Shift+−→↑→Ctrl+Enter

一発で

こうなる

f:id:GARAPON:20200619210059p:plain
after



さらに

ALT→h→f→1→↓(矢印キーで任意の色を選ぶ)→ENTER

までやると自動で埋めたセルの文字を薄くなる

f:id:GARAPON:20200619210729p:plain
まさにエクセル芸

つまり

Ctrl+A→Alt→H→M→U→Ctrl+G→Alt+S→K→Enter→Shift+−→↑→Ctrl+Enter
→ALT→h→f→1→↓(矢印キーで任意の色を選ぶ)→ENTER

これが
f:id:GARAPON:20200619210054p:plain

こうなる
f:id:GARAPON:20200619210729p:plain

まとめ

エクセルは最高!

VBAで正規表現のやりかた2種類

久々にVBAをいじいじしてます。
正規表現を使おうとしたら2つやり方があったので整理。
正規表現というよりVBAにおけるインポートのやり方2種類ですね。
参照設定を使うと配布しにくいので、直よびするほうが好きです。

  1. Microsoft VBScript Regular Expressions 5.5を読み込むパタン

参照設定から「Microsoft VBScript Regular Expressions 5.5」を参照設定

    Dim re As RegExp
    Set re = New RegExp
    re.Pattern = "^[0-9]+$"
    re.Test("01234") 
  1. VBScriptを直よびするパタン

CreateObjectで読み込んじゃう

    Dim re As RegExp
    Set re = CreateObject("VBScript.RegExp")
    re.Pattern = "^[0-9]+$"
    re.Test("01234") 
   


参考
garapon.hatenablog.com
garapon.hatenablog.com

マクロにデジタル署名をつけると快適

セキュリティが強化されてからマクロを使う際に確認ダイアログが出るのが一般的です。
オンデマンドの実施であればダイアログ出てきて、承認してというのでそれほど不便もないのですが
先述した振り分けでマクロ使う場合など自動実行したい場合、確認ダイアログが出ると不便なので
そういう時はデジタル署名を付けましょう。
garapon.hatenablog.com

自分のデジタル署名書をつくる

1,C:\Program Files\Microsoft Office\Office16\SELFCERT.EXE を使って適当な証明書を作ります。
2,署名をつけたいプロジェクトを開いて「ツール」⇒「デジタル署名」で1で作った証明書を選択。


これでOK。
このあとOfficeを再起動して、一度証明書を信頼してしまえば以後ダイアログは出なくなります。

Outlookの自動仕分けからマクロを呼び出す

最近アラートメールをたくさん受信するので快適に処理するためOutlookマクロというかVBAでゴリゴリいじろと思ったら振り分けルールと通知からどうやっても処理の選択にスクリプトが出てこない。
調べてみたら2017 年 5 月以降にリリースされた Outlook 2016 の修正プログラム、または 6 月以降にリリースされた Outlook 2013 の修正プログラムによってOutlookの自動仕分けルール内からスクリプトを呼び出すことができなくなっていたので対処。

以下レジストリに値をセット
Outlook2016 : HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Security\
Outlook2013 : HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Outlook\Security\

  • 名前 : EnableUnsafeClientMailRules
  • 種類 : REG_DWORD
  • データ : 1

参考
https://support.microsoft.com/ja-jp/help/3191893/how-to-control-the-rule-actions-to-start-an-application-or-run-a-macro


また、仕分けで呼び出せるマクロは 引数は MailItem または MeetingItem 型のsubであることが必要なのできをつけましょう。
こんな感じ

Sub mailRule(mail As Outlook.MailItem)
   MsgBox mail.Subject
End Sub