前任者が作成したEXCELファイルがあります。
VBAとユーザーフォームを作成して、ACCESSのようにまったくEXCELを知らない人でもルーティン作業ができるようになっています。
ただACCESSと違って、それを修正するのが大変です。
項目が1列又は1行増えるだけで、修正する箇所が何箇所も出てきます。
そこで少し作り変えようと思っているのですが、VBAと関数の混同は良くないのでしょうか?
① Application.WorksheetFunction.sum ではなく、
② シート作業列にSUM関数を入れる
②の場合では、他のモジュールやフォームからも参照できます。
又、変更するたびに①を実行させる必要もありません。
VBAとシート上の関数の混同は不都合はあるのでしょうか?
教えて下さい。
No.1
- 回答日時:
ただ単にVBAの組み方が悪いだけだと思います。
感じとしては
・VBAでの集計時の最終行を固定されているのではないでしょうか?
→ 最終行を調べる方法はいろいろありますので、事前に調べて最終行を調べて変数にする。
・VBAでの集計範囲を固定されているのではないでしょうか?
→ 集計範囲をグローバル変数にしておいて1ヶ所を修正するだけで済むようにする。
回答くださりありがとうございます。
質問の書き方が良くありませんでした。申し訳ありません。
SUMは一つの例です。
>ただ単にVBAの組み方が悪いだけ
その修正のために
・「シート上に直接関数を入れ、計算」
・「その値をVBAでも使用(参照セルの値として)」
以上二つのことに不都合、又は良くない事があるのでしょうか?
前任者は以前IT関連で仕事をしていました。
私は独力で勉強してきました。
すべてVBAでと言われれば、それでも修正は可能です。
しかし、シート上に関数を入れれば簡単だという所でもVBAを使用しているので、疑問を持った次第です。
No.2ベストアンサー
- 回答日時:
「VBAとワークシート関数の混同は邪道」ではないと思います。
ただ次の点を注意する必要があるかと思います。
1.一番大きいのは「処理速度」です。
・セルに計算式を設定されていると、EXCELはセルに値を設定するごとに【再計算】が行われしまうことが、処理速度が大幅に低下
することがあります。
そのため、プログラムを実行する場合【自動計算】を一時的にストップさせています。
Application.Calculation = xlManual
※処理完了後は「Application.Calculation = xlAutomatic」にします。
・ただ注意しないといけないのは「計算を手動」にした場合、関数で計算した値をプログラムで参照したい場合【再計算が必要】かも
知れません。そのときは一時的に再計算をした方が間違いないかと思います。
Range("B12").Calculate … 特定セルだけ再計算
Worksheets(1).Calculate … 特定シートだけ再計算
Application.Calculate … 開いているすべてのブックを再計算
2.処理ロジック
上記1.のように「再計算」を都度行う必要がある場合、漏れなく(ミス無く)対応が必要です。
そのため、過去のプログラムを修正する場合はミスが無いようにしっかりとプログラム内容を理解することが求められます。
※しっかりテストすれば良いのかも知れませんが…
3.セルにプログラムで毎回計算式を設定するのなら…
もしプログラムでセルに毎回計算式を設定するのなら「Application.WorksheetFunction」で計算した方が良いかも知れません。
初めから計算式を設定するのなら「ユーザに式を触らせないようにシート保護」した方が良いかと思います。
その場合、プログラムでセルに値を設定する場合、セルに書き込みできるように「シートの保護解除」等が必要になります。
◆VBAとワークシート関数の混同は邪道ではないですが、色々な問題点を意識して、プログラムを作成しないと思わぬ所で
落とし穴があるかも知れませんので注意が必要ですね。
色々と大変だと思いますが頑張ってください。
回答ありがとうございます。
邪道ではないとの回答にほっといたしました。
又、具体的コードを記入して教えてくださり大変感謝いたします。
1.処理速度について
テストでは問題ないようです。
【手動→再計算】は現実的ではないのです。
そこにこのプログラムの作り方の問題(コードではなく)があると思うのです。
値を1ヶ変更する度に、label.captionに表示された小計やら総計やらを再計算して表示させているのです。
そのため値を1ヶ変更する度に【手動→再計算】が必要になります。
エクセル・フォームを使用せず、シートで作成した方がずっと簡単なのですが、エクセルがまったくできない数人の為に作成したものです。
かゆい所に手が届くようなコードが至る所にあり、大変分かりすらいものとなっています。
しかし使用する方は、きれいなフォームで満足しています。
2.処理ロジック
3.シートの保護
もおっしゃるとおり、落とし穴にはまらぬよう気をつけます。
励ましまでいただき、本当にありがとうございます。
No.3
- 回答日時:
邪道ではないですが
VBAのコードがシンプルになる様でよいですが
>項目が1列又は1行増えるだけで、修正する箇所が何箇所も出てきます。
項目が一列ふえるのは、データシートの構成が悪い
行が増えるに対応できないはVBAのコードが悪い
教えていただきありがとうございます。
>VBAのコードがシンプルになる
はい、まったくその通りに感じます。
>データシートの構成が悪い
こちらもその通りです。
社員データの下、数行空けて(後残り2行)顧客データがあります。
他にも多々。
邪道ではないとのこと安心しました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel VBA 最終行を取得しVlookup関数をコピーする方法をコーディングで教えてください。 3 2023/05/11 13:14
- Visual Basic(VBA) ExcelのVBAを使い、複数シートの同一箇所を、同一条件にて一括でソルバーを回す方法について 1 2022/04/23 11:49
- その他(パソコン・スマホ・電化製品) EXCELのSUMPRODUCT関数について 2 2022/09/21 17:30
- Excel(エクセル) Excel 散布図グラフ 外れ値 セル番地参照方法 4 2022/04/19 18:56
- Excel(エクセル) エクセル VBAでBook モジュールのプロシージァ(コード)に除外シートを設定したい 1 2023/01/11 15:53
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Visual Basic(VBA) VBA 検索と入力 Excel ブック ぶぶぶ シート ししし 列V 検索対象の列です 最終行は、お 6 2023/05/17 01:40
- Excel(エクセル) エクセル バーコード作成で他のシートを参照するには? 2 2023/05/03 16:57
- Excel(エクセル) シートが違う2枚のエクセルシートにある数値を別シートにコピーしたい(VBA?) 8 2022/03/31 12:24
- Excel(エクセル) エクセル・スプレッドシートで、一定数を超えたらゼロから再累計する方法 8 2022/05/28 03:52
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
排他的論理和 BCC(水平パリテ...
-
Javaを使った行列計算
-
やってみてもわからないので教...
-
変化させるセルが変化しない
-
VBAでの勤務時間計算
-
Excel VBAの残業時間の合計計算...
-
[ASP]日付と時間の比較
-
ファイルから数式を読み込む
-
SNRの計算の仕方
-
C# 計算処理中に実行中ウィン...
-
MATLABの積分について
-
モジュラス103の計算とは何でし...
-
C言語で、漸化式を使ってパスカ...
-
VBAで関数をつくる
-
0xf0=256?
-
エクセルで特定のセルのみを任...
-
傾いた四角形内の範囲の条件式
-
VBとVBAの違い
-
Java 電卓の連続計算
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
VBAの再計算が反映されない件に...
-
排他的論理和 BCC(水平パリテ...
-
EXCELなどで「返す」という表現
-
C言語の課題で、1年の秒数を計...
-
バッチファイルでウインドウを...
-
骨折リスク評価のFRAXについて...
-
変化させるセルが変化しない
-
CとFORTRANの計算速度はどちら...
-
なぜオーバーフローになるので...
-
数値計算の高速化 (cos, sin, exp)
-
モジュラス103の計算とは何でし...
-
C# 計算処理中に実行中ウィン...
-
モジュロ
-
引き放し法による除算アルゴリ...
-
60進数の四則計算
-
C言語についてです。 再帰を使...
-
Perlで時間の計算
-
CRC8を教えてください
-
傾いた四角形内の範囲の条件式
おすすめ情報