Excel VBA 質問スレッド №2145 (解決済)
ユーザー操作による関数ミスの対応
投稿者 : ギロン 投稿日時 : 2025/09/14(Sun) 17:53:51 OS : 未指定 EXCEL : 未指定
はじめまして。
私は自称マクロ中級者です。
マクロ作成者様に質問&意見をちょうだいしたいです。
私の会社ではパソコンに不慣れな人ばかりで、エクセルの関数も操作ミスでよく壊れています。
セルには関数を入れずにマクロで全てやろうと思ったりもしますが、マクロでするほうが作成効率的にどうなのか?関数のほうがユーザーにとってはどんな計算が行われているかわかりやすいのではないか?(どんな計算が行われているか知りたいて人もいたりします。マクロだと全くわからないので)
などを考えています。
みなさんの経験や意見、対応方法をお聞きしたいです。
よろしくお願いします。
はじめまして。
私は自称マクロ中級者です。
マクロ作成者様に質問&意見をちょうだいしたいです。
私の会社ではパソコンに不慣れな人ばかりで、エクセルの関数も操作ミスでよく壊れています。
セルには関数を入れずにマクロで全てやろうと思ったりもしますが、マクロでするほうが作成効率的にどうなのか?関数のほうがユーザーにとってはどんな計算が行われているかわかりやすいのではないか?(どんな計算が行われているか知りたいて人もいたりします。マクロだと全くわからないので)
などを考えています。
みなさんの経験や意見、対応方法をお聞きしたいです。
よろしくお願いします。
スポンサーリンク
[返信 1] Re : ユーザー操作による関数ミスの対応
投稿者 : てらてら 投稿日時 : 2025/09/15(Mon) 06:15:43
こんにちは。
>セルには関数を入れずにマクロで全てやろうと思ったりもしますが、マクロでするほうが作成効率的にどうなのか?
個人的な意見なのですが、「セルの関数(数式マクロ)」と、「マクロ(VBA)」の使い分けは、VBAは数式マクロで出来る事を包括しているので、簡単な処理で手間を省きたい時には数式マクロを使うようにしています。
ただ、不慣れな人が数式マクロのあるセルに値を上書きしてしまうと、数式マクロは失われてしまいます。
一般的に行われるのが、セルの保護をかける方法じゃないでしょうか。やり方は以下が参考になるかと思います。
https://www.youtube.com/watch?v=ZKLTaWmDKCs
私の場合は、以下のページを参考にして、シート内にある数式マクロを全て走査して数式マクロを復活させるプログラムを作って適当なタイミングで実行させるようにしました。
こちらはVBAになりますが、シートのロックなどとは無関係なので、私にはこちらの方が便利でした。
https://help-vba.com/reformulamakecode/
参考にしてみてください。
こんにちは。
>セルには関数を入れずにマクロで全てやろうと思ったりもしますが、マクロでするほうが作成効率的にどうなのか?
個人的な意見なのですが、「セルの関数(数式マクロ)」と、「マクロ(VBA)」の使い分けは、VBAは数式マクロで出来る事を包括しているので、簡単な処理で手間を省きたい時には数式マクロを使うようにしています。
ただ、不慣れな人が数式マクロのあるセルに値を上書きしてしまうと、数式マクロは失われてしまいます。
一般的に行われるのが、セルの保護をかける方法じゃないでしょうか。やり方は以下が参考になるかと思います。
https://www.youtube.com/watch?v=ZKLTaWmDKCs
私の場合は、以下のページを参考にして、シート内にある数式マクロを全て走査して数式マクロを復活させるプログラムを作って適当なタイミングで実行させるようにしました。
こちらはVBAになりますが、シートのロックなどとは無関係なので、私にはこちらの方が便利でした。
https://help-vba.com/reformulamakecode/
参考にしてみてください。
[返信 2] Re : ユーザー操作による関数ミスの対応
投稿者 : 匿名 投稿日時 : 2025/09/16(Tue) 11:20:02
>ユーザーにとってはどんな計算が行われているかわかりやすいのではないか?
VBA(マクロ)を使っても、計算式などを「仕様書」として作っておけば
どんな計算が行われているかはわかるようにできます。
「仕様書」については、一般的に
「基本仕様書」
「詳細仕様書」
「プログラム仕様書」
「テスト仕様書(単体・結合・総合・運用)」
というのがありますが、このうち、
「基本仕様書」
と呼ばれているものを作る感じです。
基本仕様書は、エンドユーザー(マクロも数式もわからない人)が見てわかる物
が基本です。
例えば、、、
C列:単価(単価マスタシートのIDがB列と一致するもの)
D列:今回納品する数量(手入力)
E列:金額(C列×D列)
・
・
・
みたいに日本語で説明した物です。
>セルには関数を入れずにマクロで全てやろうと思ったりもしますが、
>マクロでするほうが作成効率的にどうなのか?
VBAを使うか(作成効率)の判断をする場合、私的には以下のようになります。
VBA作成時間をイニシャルコスト(マクロ作成時間)とします。
実務作業時間(今回はワークシート上の数式などを修正する時間)をランニングコスト(作業時間)とします。
例えば、
イニシャルコスト:200時間
ランニングコスト:VBAを使わない場合の1回の作業時間 10時間
VBAを使った場合の1回の作業時間 1÷60時間(1分)
(短縮できた時間9時間59分ですが、この例では10時間計算します)
この場合、ランニングコストが、200÷10=20回でイニシャルコストの元が取れる
と計算し、20回を使うかどうかで判断します。
毎月5回ぐらい10時間の作業があるのであれば、
月の作業が、VBAを使わない場合約10時間×5=50時間かかるので、
200÷50=4カ月でイニシャルコストの元が取れる。
となって、その作業が、5カ月以上続くものであれば、
200時間かけてVBAでプログラミングする価値がある。
となります。
ただし、今回のように、数式を修復するだけであれば、
エンドユーザーのExcelファイルは、数式のみを入れておき、
自分で数式修復用VBAを作っておくようにすると思います。
この場合、数式を壊したら連絡をもらうか、
定期的に数式が壊れていないか確認する必要があります。
VBAを使うなら、
エンドユーザーが、数式の入ったシートを見ることも触ることもなく、
エンドユーザーが求める表示フォーマットで値表示するという事をよくやります。
例えば、「エンドユーザーは指定に日付(年月)を入れるだけ」
にしておいて、ボタンを2つ置き、
ボタンAは、月ごと、担当者ごとの集計表、
ボタンBは、月ごと、商品ごとの集計表を表示する。
みたいなものを作ると思います。
特に「パソコンに不慣れな人ばかり」であれば、
式やワークシート関数をエンドユーザーに見せない(見えても意味がないと思う)
ようにします。
エンドユーザーがデータ入力をする場合は、
入力専用シートをを作ります。
そして入力規則、入力フォーム、VBAのユーザーフォーム
などを使ってエンドユーザーの入力補助をする仕組みを作ります。
このようにエンドユーザーの作業を省略させて、
エンドユーザーの求める結果を出す事をVBAで作成し、
エンドユーザーのランニングコストを短く、負担も軽くできれば、
イニシャルコストに多くの時間をかける価値があると思います。
と、こんな感じですかね。
蛇足かもしれませんが、
昔からExcelを使っていた人は知っているのですが、
Excel97くらいの頃は、Excelはデフォルトで3つのシートがありました。
これは、入力用、計算用、出力用と分けるのが標準として使うであろう
という事から、3つのシートをデフォルトにしていたらしいです。
つまり、Excelに詳しくない人は、
入力用しか入力、変更しない、
出力用シートは見る事しかしない、
という様にして、
Excelに詳しい人が、
計算用シートで数式やワークシート関数を使う、
という事を二十数年前に聞いたことがあります。
※あくまでも私が聞いた話で、Microsoftに確認したわけではありません。
>ユーザーにとってはどんな計算が行われているかわかりやすいのではないか?
VBA(マクロ)を使っても、計算式などを「仕様書」として作っておけば
どんな計算が行われているかはわかるようにできます。
「仕様書」については、一般的に
「基本仕様書」
「詳細仕様書」
「プログラム仕様書」
「テスト仕様書(単体・結合・総合・運用)」
というのがありますが、このうち、
「基本仕様書」
と呼ばれているものを作る感じです。
基本仕様書は、エンドユーザー(マクロも数式もわからない人)が見てわかる物
が基本です。
例えば、、、
C列:単価(単価マスタシートのIDがB列と一致するもの)
D列:今回納品する数量(手入力)
E列:金額(C列×D列)
・
・
・
みたいに日本語で説明した物です。
>セルには関数を入れずにマクロで全てやろうと思ったりもしますが、
>マクロでするほうが作成効率的にどうなのか?
VBAを使うか(作成効率)の判断をする場合、私的には以下のようになります。
VBA作成時間をイニシャルコスト(マクロ作成時間)とします。
実務作業時間(今回はワークシート上の数式などを修正する時間)をランニングコスト(作業時間)とします。
例えば、
イニシャルコスト:200時間
ランニングコスト:VBAを使わない場合の1回の作業時間 10時間
VBAを使った場合の1回の作業時間 1÷60時間(1分)
(短縮できた時間9時間59分ですが、この例では10時間計算します)
この場合、ランニングコストが、200÷10=20回でイニシャルコストの元が取れる
と計算し、20回を使うかどうかで判断します。
毎月5回ぐらい10時間の作業があるのであれば、
月の作業が、VBAを使わない場合約10時間×5=50時間かかるので、
200÷50=4カ月でイニシャルコストの元が取れる。
となって、その作業が、5カ月以上続くものであれば、
200時間かけてVBAでプログラミングする価値がある。
となります。
ただし、今回のように、数式を修復するだけであれば、
エンドユーザーのExcelファイルは、数式のみを入れておき、
自分で数式修復用VBAを作っておくようにすると思います。
この場合、数式を壊したら連絡をもらうか、
定期的に数式が壊れていないか確認する必要があります。
VBAを使うなら、
エンドユーザーが、数式の入ったシートを見ることも触ることもなく、
エンドユーザーが求める表示フォーマットで値表示するという事をよくやります。
例えば、「エンドユーザーは指定に日付(年月)を入れるだけ」
にしておいて、ボタンを2つ置き、
ボタンAは、月ごと、担当者ごとの集計表、
ボタンBは、月ごと、商品ごとの集計表を表示する。
みたいなものを作ると思います。
特に「パソコンに不慣れな人ばかり」であれば、
式やワークシート関数をエンドユーザーに見せない(見えても意味がないと思う)
ようにします。
エンドユーザーがデータ入力をする場合は、
入力専用シートをを作ります。
そして入力規則、入力フォーム、VBAのユーザーフォーム
などを使ってエンドユーザーの入力補助をする仕組みを作ります。
このようにエンドユーザーの作業を省略させて、
エンドユーザーの求める結果を出す事をVBAで作成し、
エンドユーザーのランニングコストを短く、負担も軽くできれば、
イニシャルコストに多くの時間をかける価値があると思います。
と、こんな感じですかね。
蛇足かもしれませんが、
昔からExcelを使っていた人は知っているのですが、
Excel97くらいの頃は、Excelはデフォルトで3つのシートがありました。
これは、入力用、計算用、出力用と分けるのが標準として使うであろう
という事から、3つのシートをデフォルトにしていたらしいです。
つまり、Excelに詳しくない人は、
入力用しか入力、変更しない、
出力用シートは見る事しかしない、
という様にして、
Excelに詳しい人が、
計算用シートで数式やワークシート関数を使う、
という事を二十数年前に聞いたことがあります。
※あくまでも私が聞いた話で、Microsoftに確認したわけではありません。
[返信 3] Re : ユーザー操作による関数ミスの対応
投稿者 : そのうち慣れる 投稿日時 : 2025/09/17(Wed) 00:18:49
不慣れというより覚えてもらわないと困るのでは・・・
25年くらい前マックを使ってましたけど、就職するにあたって
多分Wondowsだろうなと思って、ソフトWindows95と
図解入りのWindows95操作入門書買いました
就職してから、エクセル覚えるため安いノート型DOSV機買いました
エクセル入門書なるものも数冊買いました
気構えでは?
不慣れというより覚えてもらわないと困るのでは・・・
25年くらい前マックを使ってましたけど、就職するにあたって
多分Wondowsだろうなと思って、ソフトWindows95と
図解入りのWindows95操作入門書買いました
就職してから、エクセル覚えるため安いノート型DOSV機買いました
エクセル入門書なるものも数冊買いました
気構えでは?
[返信 4] Re : ユーザー操作による関数ミスの対応
投稿者 : 以上 投稿日時 : 2025/09/25(Thu) 21:31:52
関係は壊れないように使えばいいだけ
関係は壊れないように使えばいいだけ
当掲示板について
- Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
- 記事内ではHTMLのタグは使用できません。
- 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
- Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
- Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
( 処理日時 : 2025-10-11 06:07:13 )