ExcelVBAで結合セルの入力規則の値を削除する方法

ローグライクゲームかと思うくらいに

ExcelVBAに触らない期間があると、すぐに記憶・技術の全てがLV.1まで戻ってしまうのが悩みのタネのサジマです。

今回はいわゆる見積書のようなものを作成していた時に問題に直面しました。入力規則で設定してある値を選択すると、条件に従って算出された金額が表示される、という単純なもの。正しく計算結果を返すということは当然のことながら大前提ですが、それを印刷して提示する必要もありました。

[ad_contents]

スポンサーリンク

セルの削除とクリアの違い

今更なにを、ではありますが、「セルのデータを消す」という表現に様々ありますね。

Range("A1").Delete
 →セルを削除し、左か上の方向にシフトする
Range("A1").Clear
 →セルの値と書式をクリアする
Range("A1").ClearContents
 →セルの値をクリアする
Range("A1").ClearFormats
 →セルの書式をクリアする

一般的に用いられていそうな「削除」という言葉を使ってしまい、なおかつそれを額面通り受け取ると、マクロで処理するにつれ、どんどことセルが消えていく悲しさ。実際は、新人さんなど不慣れな方がやっちゃうくらいだと思いますが。

結合セルの入力規則の値を削除する

さて、今回の見積書のネックは、使用環境。キーボードなし、タブレットPCのみで値を操作する予定があったのです。

実機確認の結果、タブレットPCでexcelの入力規則の値を変えるのは、なかなかに手間になるケースがあり得るということが分かりました。iPad等他のタブレット端末ならば別かもしれませんが、少なくともその環境化では①反応しない②異なった値を誤選択してしまう回数が大半を占めました。

原因のひとつは、プルダウンボタンが小さすぎて視認性も悪いこと。さらに、一度値を入力した状態で再選択をする場合、更に変更が難しくなります。

ちなみにボタンが小さい件、Excel2013では「コマンド間隔」をマウスではなくタップ用にすることができますが、入力規則のプルダウンボタンのサイズは非可変です。どうにかして頂けたら嬉しいように思います。

デザインや用途等を検討した結果、入力したデータをクリアするマクロを作り、操作開始時に必ずそれを押すことにしました。

ところが、印刷する前提だったため、入力規則を設定したセルを、周囲のセルと結合させていました。そのセルを単純に「Range("A1").ClearContents」でクリアしようとすると「いつもの」=「実行時エラー:1004」がでました。

入力規則を設定したセルにある値は、ClearContentsでは削除できないのか?などと早とちりしかけましたが、マクロを指定して実行する(Alt+F8などで画面出現)と、下記エラーが出てきてくれました。

マクロ実行画面
マクロ実行画面
VBAのエラー「この操作は結合したセルには行えません」
エラー内容がはっきりしました

つまりは、「指定するRangeを含む結合セルの値をクリアする」という指定をする必要があるということで、下記の通りにしたら、問題なく処理できました。

Range("A1").MergeArea.Clearcontents

以上、備忘録でした。