- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル 関数内でCellsを使うと処理キャンセル)
エクセル 関数内でCellsを使うと処理キャンセル
このQ&Aのポイント
- VBAの関数内でCellsを使用すると、処理がキャンセルされてエラー値が返ってくる現象が発生しています。
- 具体的な処理は、和暦の扱いでCurrentNendoという変数を使用し、E列の指定行に年号の頭1桁を設定するものです。
- 関数内でのCellsへの値の設定が正常に行われないため、エラーが発生しています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
ユーザー定義関数からでは,別途セルを触ることは出来ません。アナタが試みたように,別のプロシジャに切り離してもダメです。 ごくシンプルな解決方策としては,E列セルにふつーにエクセルのワークシート関数を並べておいて,計算で結果を出させてしまうだけでOKのようにも見えます。 たとえばD列にあなたのnendo関数を置いているなら E6: =LEFT(D6,1) などのように。 既にユーザー定義関数を使って計算させていることから,シートには生データだけを記入させておきたいといった要請は弱いと考えられますが,敢えてE列には必ず生データを記入しておきたい(させたい)ということでご相談の状況が発生しているのだとすると,前述したようにE列に「値を記入する」にはユーザー定義関数とは違う由来のプロセスを用意する必要があります。 既存の仕込みを変えたくないという事なのでやりにくいですが,今のご質問のユーザー定義関数のプロセスを通常のマクロのプロセスに作成し直すのも一つの方法です。 または,シートにchangeイベントを別途仕込んでおき,「既存のユーザー定義関数に引数として与えているセル」の変更を受けてE列に所定の値を計算させ記入させる方法がツカエルかもしれません。 最悪シートのcalculateイベントを仕込み,ユーザー定義関数が再計算される都度,E列を漏れなく書き換えていくことも,やればできます。通常はあまりに非効率なので,こういう使い方はしませんが。
お礼
回答頂き、ありがとうございます。 確認が遅れ、お礼が遅れてしまい申し訳ありません。 まず、ユーザー定義関数からのセル操作が出来ないということがハッキリしたことはとても大きな事実でした。 基本的なことなのかもしれませんが、VBA自体ACCESSで扱ってきたことが多くEXCELに関しては無知でした。 事実を知らぬまま今の方策に固執してしまう可能性もあり、大きくタイムロスする可能性もありましたのでとてもありがたかったです。 また別の方策も何点か教え頂いたこと、配慮に感謝します。 今週はこれで業務が終了ですので、来週アドバイスに基づき別の方策を練ることにします。 ありがとうございました。