• 締切済み

エクセルVBA実行方法

表記についてご教授宜しくお願いいたします。 今は実行ボタンを作成してセルに数字を全て入力した後に実行ボタンをクリックして計算を完成させています。できればセルに入力の都度に例えばエンターキーを押したら実行のようにその都度計算が完成する方法を教えていただきたい。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.6

VBAを学び始めたときに、そういうことをやりたい気持ちになることは判る。 しかしVBAをある程度判って、ボタンなどのコントロール(部品)のイベントプロシージュアーを経験したのちに、勉強しなおすべき課題だと思う。 ワークシートにENTERのキーインで発動するイベントはない。セルの値の変化によって発動するイベントしかない。 これも学び始めは、自分で変化させたセルの値の変化で、またそれが原因でイベントが起こり、ぐるぐる周りの処理になる。それを防ぐため、処理に入る前にイベントを無効にして、主なる処理が終われば、イベントの発動機能を元に戻して出る。こういう細工も必要で、テストをやっていると不手際で、イベントが発動されないことも起こる。慣れると自力で原因がわかり、避けられる(正常に戻せる)ようになる。周りに指導者がいないと質問コーナー利用では心もとない。ただこれを読んだだけですぐわかる人もいるとは思うが。 ーー VBになって、イベント処理方式を取り入れてくれたおかげで、自然に近い処理になるが、Msなどの、ソフト構想力の進歩のおかげです。 エクセルにVBAに限って言えば、バッチ処理(素材的データを完成させて一斉に処理を始める)で十分間に合うと思う。質問者が、他のプロ(ウインドウズ製品など)のハイレベルの処理になじんでしまって、自分もやりたいということだろうと思うが。 ーー (1)VBEの画面で(General≫の方をWorkSheet、(Declaration)の方をChangeを選ぶ (2)変化したセルを制約するためTargetでセル範囲内か判別する (3)既述の、いったんイベント発動を止めて(True)コードを書き、終わるとイベントを発動停止を解除(True)して脱出する。 初心者では、Enableibvents状態がどうなっているか判らなくなる。途中でエラーになると Falseにするの行があっても、そこを通らない組み方になっている場合が起こる。すると イベントが発生すべきなのに、発動しない などのことが注意事項。それと変数の受け渡しなどむつかしい点がある。 こんな質問コーナーに頼るのでなく、エクセルVBAの中級以上(250ページ以上の本)の本を読むこと。 ワークシートのChangeイベントに関する項を探せ。

全文を見る
すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率65% (1636/2481)
回答No.5

仮にE5からE38に数値を入力している場合 Private Sub Worksheet_Change(ByVal Target As Range) If Not Application.Intersect(Target, Range("E5:E38")) Is Nothing Then Application.EnableEvents = False 'イベントを無効にします。有効になるまで各種イベントが発生しないので、Changeイベント内で指定範囲内のセルの書き換えなどした場合の再帰による無限ループがなくなります。 'やりたい計算などのコード Application.EnableEvents = True 'イベントを有効にします。最後に有効にしておかないと以後のイベントに反応しなくなります。 End If End Sub

全文を見る
すると、全ての回答が全文表示されます。
回答No.4

「セルに入力の都度に例えばエンターキーを押したら実行のようにその都度計算が完成する方法」 これだけなら、標準モジュールにPublic Functionを作ることで実装出来る場合があります。

全文を見る
すると、全ての回答が全文表示されます。
  • chie65535
  • ベストアンサー率43% (8542/19422)
回答No.3

追記。 >セルに数字を全て入力した後に実行ボタンをクリックして計算を完成させています。 という場合は「結果を求めたいセル」に「数値を入力したセルを参照する計算式を書く」のが最も「手っ取り早い方法」です。 例えば「A1~A12に毎月の売り上げを入力して、A13に12ヶ月1年分の合計、A14に売り上げの平均値、A15に売り上げの最高金額を計算する」という場合、A13、A14、A15のそれぞれのセルに =SUM(A1:A12) =AVERAGE(A1:A12) =MAX(A1:A12) のように書くだけで済みます。 そして、EXCELのワークシート関数(セルの計算式で使える関数)は、集計関数なども含めかなり多彩なので「たいていの事ならセルに計算式を書くだけで済む筈」です。 VBAで書く必要があるとすれば「かなり複雑な条件があって、セルに計算式を入力するというような単純な話では済まない」と言う場合だけですが、そんなに複雑なんでしょうか?

全文を見る
すると、全ての回答が全文表示されます。
  • chie65535
  • ベストアンサー率43% (8542/19422)
回答No.2

なお「セルの値が変更されたら自動的に呼ばれるプロシージャ」の中で「セルの値を書き換える処理」をする場合は、注意が必要です。 何も対処しないで居ると セルに手入力する ↓ セルの値が変更されたら自動的に呼ばれるプロシージャが呼ばれる ↓ そのプロシージャの中で、セルの値を書き換える処理をする ↓ セルの値が変更されたら自動的に呼ばれるプロシージャが呼ばれる ↓ そのプロシージャの中で、セルの値を書き換える処理をする ↓ セルの値が変更されたら自動的に呼ばれるプロシージャが呼ばれる ↓ そのプロシージャの中で、セルの値を書き換える処理をする ↓ 以下、延々と繰り返されて「実行時エラー'28' スタック領域が不足しています」のエラーが出て止まる のように、実行時エラーが出て止まってしまいます。 なので「セルの値を書き換えた所為で、自分自身のプロシージャが再び呼び出される(これを「再入」とか「再帰」とか言います)のを防ぐ」のが必要になります。 これらの「再入防止」は「かなり高度な処理」を必要としますので、上手く行かない場合は「諦めて、CommandButtonを押す方式」にして下さい。 また「セルの値が変更されたら自動的に呼ばれるプロシージャ」は「すべてのセルに入力が完了する前に呼ばれてしまう」ので「全部のセルに入力が完了しないと計算できない」と言う場合は、使い物になりません。 「100個のセル全部に入力完了しないと計算できない」のに「1個目のセルに入力した瞬間に呼ばれてしまう」ので、困った事になります。 ですので「100個のセル全部に入力完了しないと計算できない」とかの場合は「全部のセルに入力し終わった段階で、コマンドボタンを押させて計算する」の方が良いです。 どちらが良いのか、良く考えてからにして下さい。

全文を見る
すると、全ての回答が全文表示されます。
  • chie65535
  • ベストアンサー率43% (8542/19422)
回答No.1

ご参考。 http://vba-geek.jp/blog-entry-224.html エクセルには「セルの値が変更されたら自動的に呼ばれるイベントプロシージャ」が用意されています。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセル アクティブ中のセルにマクロ実行

    表題の件について質問させていただきます。 基本的に数字の入っているセルなのですが、たまに数字の前に備考として特定の文字を入力しています。  特定文字例:東京・千葉・埼玉・鈴木・木村・佐藤  入力後の例:東京232・木村50 その特定の文字の入力には、マクロ登録してあるボタンで実行しています。  ActiveCell.FormulaR1C1 = "特定の文字" さて、質問なのですが、上記ではセルを選択しているときにボタンを押すことで特定文字の入力はきるのですが、入力中っていうのかな?カーソルが点滅している最中にはマクロが実行できないのです。 その為、数字の入った後のセルを選択してボタンを押すと、いちど数字の上に特定文字が上書きで入力されて数字が消えてしまいます。 現在は、ボタンを押して特定文字を入力した後に再度数字を入力しています。 どうにか、セルの選択中でもカーソル点滅中でもマクロを動かすことはできないでしょうか。 よろしくお願いいたします。

  • エクセルでの、たし算方法は?

    私は計算と言うと エクセル位しか知らないんですが 今迄、使った事が、ありません で、現在、平均点の計算を、してるんですが 今迄は、3ケタの数字をメモ帳に入力 それを数十個入れた後、全部を足して 平均点を出してました ちなみに入力方法は 「a652 597 b484 417 c589 688 d477…」 なんですが、数字の前に アルファベットを入力してのは 入力数を分かり易くする為で 例えば「j600」迄の入力で、平均点を出す場合 いちいち、全部の数字の数を数えなくても “j”はアルファベットの10個目ですから 10×2で、合計20個で割ってました しかし、足し算は計算機を使用してましたから 入力ミスを、する時や時間が掛かる為 これをエクセルで出来ないかと考えました ハッキリ言って、数字を入力する時に 一緒に計算機で、同時計算をすれば、一番早いんですが 入力するのに時間が短く 計算機で同時計算の余裕がありません ただ、自分でもエクセルの使用方法を検索等で調べたんですが 私が分かったのは 1セル(?)の中に全ての文字を “+”で入れて合計を出す方法と セルの中に、数字を入れて 後からセルと“+”で合計する方法です でも、全ての数字と“+”では 1セルの中が見え難くなりますし 入力後にセルと“+”では二度手間で しかも、クリックの押し間違いが出る時があります そこで聞きたいんですが セルの中に数字を入れながら、自動で計算出来る… 又は、平均点も簡単捜査で出来る方法を 御存じないでしょうか?

  • エクセル VBA

    最終行から順番に下へ同列で入力するVBAを教えて下さい。 EXCELのVBAで教えて下さい。 シート1のA列にはB列が入力されると自動入力されるNo.があり、C~G列もB列が入力されると自動入力されます。 B列には日付が、H列には3~4桁の数字が入力したいのですが、 入力行は必ず最下行のセルB、Gな為、VBAでフォームを作成し、 入力実行ボタンを押すことにより、最下行のセルB、Gに反映されるように したいです。 又、上記入力後に、シート2のH~N列をコピーして、シート3のA~G列に値のみの貼り付けを行い保存した後、シート3のA~G列をコピーして csvファイルを作成して保存したいです。 一連の流れを、フォームの入力実行ボタンを押すことで実行したいのですができるのでしょうか? 宜しく御願い致します。

  • エクセルで掛け算

    こんなツールボタンありますか? ・1つのセルに=を入れずに掛け算の式を入力します。  例えば「13*9」と入れます。 ・その後、あるツールボタンをクリックするとダイアログボックスが出て、そこに答えが表示されます。 ・エンターキーを押すと掛け算の式が入力されているセルに答えが表示されます。 説明がわかりにくいかも知れませんが、ご存知のかたがいらっしゃったら教えてください。 WinXP office2002 です。よろしくお願いします。

  • Excel VBAでマクロの実行範囲を限定することはできますか?

    選択したセルに塗りつぶしを設定するマクロを組んでボタンに登録していますが、塗りつぶし不可のセルを選択してボタンをクリックした場合は塗りつぶしのマクロが実行できないようにする、といったことはできますか? よろしくお願いいたします。

  • エクセルVBA 教えてください

    VBA初心者です。 現在エクセルで書類作成のテンプレート原本を作成しています。 その中に 1.携帯電話 2.ポケットベル 3.固定電話 4.その他 というように複数の中から選択する項目があります。リストボックスでとも考えていたのですが、選ばれていない項目も表示しておきたいので、数字にオートシェイプで丸を付けてもらおうと思っています。 そこで質問なのですが、この書式テンプレートを入力する際には入力フォームを呼び出します。そのフォーム内で □1.携帯電話 □2.ポケットベル □3.固定電話 □4.その他 のように複数選択可能なチェックボックス形式の入力欄を作成します。入力フォームの全ての項目が入力され、実行ボタンを押したのち、チェックの入れられた数字の上にのみオートシェイプで丸が入ることは可能でしょうか? 何分VBAの素人なので、何を書いている部分なのか等をわかりやすく教えてくれると幸いです。 よろしくお願いします。

  • エクセル

    セルをクリックすると右横に黒い三角のマーク付きの四角いボタンが出てきて、ボタンをクリックすると数字が表示され、その数字をクリックするとセルに入力できるボタンの名前と、設定方法をご存知の方是非教えてください。宜しくお願いいたします。

  • エクセルの計算式で・・・

    下記のような状態です・・・ ・単純な足し算の計算式が入っています。 ・数字を入力しても、計算してくれません。 ただ、数字を入れた後、計算式が入っているセルでダブルクリックした後、Enterを押すと計算してくれます。 ・エクセル画面の一番下に”再計算”という表示がでています。今まではなかったと思うんですが・・・。 ・1年以上も使い続けているファイルで、今までは問題なく使用できました。 全てのエクセルで同じ現象がでております。 大変困っております。 どうぞよろしくお願いします。

  • EXCEL VBAでこんな集計できますか?

    ECEL VBAでスプレッドシートの上の行から以上のような数字を入力出来るインターフェースを作りました。(計算後の数字が表記されます) No  長さ  幅  枚数 ← この項目はEXCEL上に作っておきます。 1  1200   900   2 1  1100   450   1 1  1200   900   1 1  900   500    1 2  1500   900   1 2  900   500   1 2  1500   900   3 この数字を見ますとNo1の中には1200 900 という大きさのものが計3枚 あります。No2にも1500 900が合計4枚あります。これらを下記のように集計できないものでしょうか。 No  長さ   幅   枚数  1  1200   900   3 1  1100   450   1 1   900   500   1 2  1500   900    4 2   900    500    1 また、 No   長さ   幅   枚数  1  2   1200   900    2 1  3   1100   450    1 1  6   1200   900   1 1      900   500    1 2  4   1500    900    1 2      900    500    1 2     1500   900    3 このようにNoが複数になっている場合も上記の集計は出来るでしょうか。(スプレッドシートのNoの列は複数のNoが入るように6つほど空欄で増やしておきます。) 例えば  1   2   6     1200     900    3 のように 出来ればインターフェース上のコマンドボタンで実行したいと考えています。

  • エクセルVBAでのセル番地取得プログラム

    このようなプログラムをVBAで作成したいのですが・・・。 1.選択セル上でダブルクリック 2.ユーザーフォームが立ち上がる 3.ユーザーフォームの項目に値を入力 4.コマンドボタンを押すと、入力した値が1で選択したセルに転送 5.次に1の1行下のセルに移動し、また値を入力しコマンドボタンで   値を転送 以下5の繰り返し というプログラムはどのように作成したら良いのでしょうか? 他の質問を参照したのですが、どうも求めているものとは違う感じです。 ご教授お願い致します。

専門家に質問してみよう