見出し画像

複数行の数字のみを足し算するKeyboard Maestroマクロ

複数行に並んでいる数字を足し算したいことってありますよね。

自分の場合、常にExcelが起動しているので、サクっとペーストすることが多いのですが、次のように数字以外が混じっているとやっかいです。

1200円
240円
¥3,600

Keyboard Maestroを使って解決する方法を考えてみます。

1. シンプルなロジック

  • 変数「Local__Input」を対象にします。

  • 変数「Local__Sum」を、いったん「0」にします。

  • For Each Item in a Collection Execute Actionsを使って、「Local__Input」から1行ずつ取り出し、「Local__Sum」に足していきます。

実行すると、次のようなメッセージが表示されます。

変数はすべて「Local」でスタートしているため、変数のクリーンアップは不要です。

ドットがある場合

小数点の数字がある場合はどうでしょうか?

問題なく計算されます。

カンマがある場合

カンマがある場合には計算されません。

そこでSearch and Replace Variable Using Regular Expressionアクションを使って、「,」を削除します。

テキストがある場合

次のようにテキストがある場合は、少しトリッキーです。

数字以外の正規表現は「[^0-9]」で表現できますが、「.」や改行なども対象になってしまうため、期待どおりの結果になりません。

改行と「.」も対象外になるように次のように指定します(なぜかカンマは除外しなくても大丈夫のよう…)。

(?m)[^0-9\n.]

計算結果に桁区切りのカンマを入れる

次のアクションを加えることで計算結果に桁区切りのカンマを入れます。

ここまでのまとめ

ここまでのまとめです。

計算後の処理

ここまでは計算結果をメッセージとして表示していました。

計算後、次のようなプロセスを想定します。

  • 元のテキストに続けて、カンマ付きの数字をペーストする → [ペーストする]

  • (ほかのアプリケーションなどにペーストするために)カンマ付きの数字を保持 → [値のみ保持する]

  • 結果だけ見る → [ただ、閉じる]

Prompt for User Inputアクションを設定します。

ワークフローとしてはこんな感じ。

ExcelやGoogle スプレッドシートで複数列に対応したい

タブを改行に置換するアクションをはさむことで対応します。

微調整(1)カウント

計算の対象となる値の数をカウントするようにしてみました。

まず、Search and Replace Variableアクションで空行を削除します。

Filterアクションの「Line Count」で変数「Local__Input」の行数をカウントし、変数「Local__Counter」に入れます。

微調整(2)平均

ダイアログボックス内に平均を表示するようにしました。

次のように整数で丸めた数字、丸めていない数字を併記しています。

平均は「7161」(7161.26666667)

平均の計算

変数を参照するときには変数名だけでOKです。
なお、「/」の前後にスペースは任意です。

四捨五入

ROUND()は必ず大文字にします。「,」に続く数が表示する小数点の位置です。

元ネタ

こちらの記事を参考にしました。

ダウンロード


ここから先は

78字

¥ 100

定期マガジンを購読されるとサンプルファイルをダウンロードいただけます。 https://note.com/dtp_tranist/m/mebd7eab21ea5