とうすけろぐ

インプットしてきたことをアウトプットしていかなきゃいけないんじゃないの?

【Excel】オートカルクの合計を取得するマクロを作ってみた!

こんばんは、とうすけです。

昨日は少し体調を崩しましたが、今日は元気です。

突然ですが、みなさん!

エクセルのオートカルクの合計値をコピーできたらなと思ったことはありませんか?

オートカルクの合計値?という方に

f:id:tosk:20160908205453p:plain

選択したセルの数値の合計を、右下(ステータスバー)に表示してくれる機能です。

今回は、このオートカルクの合計値を取得するマクロを作ってみたので紹介したいと思います。

ソース

    Dim a, c As Range
    Dim i As Long
    Dim myDO As New DataObject

    Set a = Selection.SpecialCells(xlCellTypeVisible)

    For Each c In a
        i = i + c.Value
    Next c

    myDO.SetText i
    myDO.PutInClipboard

    MsgBox (i & "をクリップボードにコピーしました。")

説明

ソースを見て分かる人にはバレてしまったと思うのですが、実はオートカルクの合計値を取得しているわけではありません

単純に選択したセルの値を合計してクリップボードにコピーしているだけです。

オートカルクの合計値を取得する方法があればそれを実装したかったのですが、探しても見つからなかったので、この方法で実装してみました。

注意事項

もし、コピペして使用される方がいましたら下記の点に注意してください。

  • セルの値が数値かどうかのチェックをしていないので、選択範囲に数値以外が含まれている場合は実行時エラーになります。

  • 保護がかかっているシートで使う場合にもエラーになります。

  • 「DataObject」を使えるようにする必要があります。下記サイトに手順が書かれていますので参考にしてください。  qiita.com

  ※ちなみに、クリップボードにコピーするところは、このサイトからパクらせていただきました。

苦労した点

簡単なコードなのですが、実は苦労したところがあります。

それは、フィルタで抽出した場合に、非表示のセルの値も合計してしまうところでした。

どういうことかというと

下記のようにB3セルとB6セルを選択した場合、合計値2を取得したいのに f:id:tosk:20160908211557p:plain

非表示になっていたB4セルとB5セルの値も合算され4を取得してしまう f:id:tosk:20160908211604p:plain

これを解決するには、表示されているセルだけを取得するようにしました。

おわりに

私は、このマクロを個人用マクロブック(PERSONAL.XLSB)に保存し、ショートカットキーに[Ctrl]+[Shift]+[c]を割り当てて使用しています。

まだ使い出してから3日しか経っていませんが、今のところ問題なく動作しています。

そして、意外と使う機会が多いです。

これまでは、セルを選択してオートカルクの合計値を電卓に打ち込んでから、別のエクセルファイルに転記するなんて手順でやっていましたが、今は[Ctrl]+[Shift]+[C]からの[Ctrl]+[v]の2ステップでOK!

楽ちんです。

たった1日で即戦力になるExcelの教科書

たった1日で即戦力になるExcelの教科書