質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

4回答

4112閲覧

エクセルVBAについての質問です

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2016/03/07 01:06

エクセルVBA初心者です。よろしくお願いします。
以下のコードを使っています。

セルの内容が変更した場合
Private Sub Worksheet_Change(ByVal Target As Range)
Worksheet_Change_1 Target
Worksheet_Change_2 Target
Worksheet_Change_3 Target
End Sub

Private Sub Worksheet_Change_1(ByVal Target As Range)
1つ目の動作

Private Sub Worksheet_Change_2(ByVal Target As Range)
2つ目の動作

Private Sub Worksheet_Change_3(ByVal Target As Range)
3つ目の動作

3つの動作を記述してるのですが、処理速度は遅くなるのでしょうか?

上記の様にした理由
初心者のため、ネットや知人から教えていただいたコードがつなげられないため。

内容に不備があるかと思いますが、皆様の知恵をお借りしたいと思います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

私はWorksheet_Changeは基本的に遅いと思っています。
また、TargetRangeは1セル、連続した範囲、飛び地状態に選択された範囲(Ctrlキーを押しながらの選択)等があるため、使い分けようと思うと結構高度なコードになります。(ダジャレ?)

質問者様がどのような処理を作成されているのかがわかりませんが、
Worksheet_ChangeなどWorksheetイベントからの起動が必須でないのなら、
ボタンを作成してボタンから起動する、マクロの実行メニューから実行するなどにした方が良いのではないでしょうか?
ちなみにセルから範囲を取得したい場合は、下記のようにすることで範囲も取得できます。

VBA

1Dim oRange As Range 2Set oRange = Application.InputBox("セル範囲を選択してください", Type:=8)

下記のように書かれていますが、

初心者のため、ネットや知人から教えていただいたコードがつなげられないため。

先ず、つなげてみて、
エラーが発生するようなら「どうすればエラーにならないか」を試行錯誤し、
それでも解決できない場合にTeratail等で質問されてみてはいかがでしょうか?
それを繰り返していくことで質問者様のスキルがアップしていくのではと思います。

以上、
ご参考になりますでしょうか?

投稿2016/03/07 02:19

Aeona

総合スコア396

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

case by case としか言いようがありませんが、知っておくべきは、実用的に処理時間が問題になるような場合にどこに時間がかかっているのかを特定するノウハウです。初心者でよく「こういう書きかただと遅くなりますか」とか「これより速くなる書き方はありますか」という質問をする方がいらっしゃいますが、重要なのは、「スループットが実用的に問題になるレベルかどうかを判断できるか」、そして問題だと判断したときに「ボトルネックを特定できるか」です。速度を上げることを考えるのはボトルネックを特定したあとの話です。これらのスキルがないのに細かい速度向上技術の知識を溜め込んでも、まったく役に立ちません。

投稿2016/03/07 01:56

unau

総合スコア2468

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/03/07 02:04

ご回答ありがとうございました。 確かに、ボトルネックと特定するノウハウが無いのが私の現実です。 少しずつ勉強していく次第です。
unau

2016/03/07 02:13 編集

「とにかく何かプログラミング言語を勉強したい」という初心者に対して私がおすすめするひとつが Excel VBA です。普段から業務などに Excel を使っているなら、VBA はよくできた開発環境だと思います。ネット上に情報もたくさんありますし、マクロの記録を使って手作業でやったことがどういうコードになるかを見られるなど、統合開発環境として優れていると思います。自分の役に立つちょっとした機能がすぐ作れるところもよいと思います。 楽しんでください。 また詰まったところがあれば、個々の問題点について具体的に質問するといいと思います。
退会済みユーザー

退会済みユーザー

2016/03/07 02:30

返信ありがとうございます。 現在、私は地方の小売業に従事しています。 VBAを使った業務をしている方は少ないので、業務効率化を狙って勉強しています。 とにかく、VBAを覚えたい気持ちでいっぱいです! これからもよろしくお願いします。
guest

0

もし冗長な処理をしていたらその分だけ遅くはなると思います

ただ実用上問題なければそのままでよいのでは?
例示のものが各々まったく別のことをやっているのなら、敢えて結合することもないかと
→将来2番目の処理だけ外したいとかにも対応できるので

投稿2016/03/07 01:20

dojikko

総合スコア3939

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

処理速度に関して言うと、ループの中で処理できることが
3つに分かれて処理されているのであれば、それだけ遅くなると思います。

実際に3つのSubの中で何をしているのか不明なので、
これくらいしか回答しようがありません。

ループ処理が無いのであれば、処理速度自体は変わらないと思います。

投稿2016/03/07 01:13

hato_pato

総合スコア215

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問