• ベストアンサー

エクセルのマクロで条件によって中断させる方法

例えば、A1のセルが空欄の場合は、マクロを終了して、文字列や数値などのデータが入力されている場合はマクロを実行(例えば範囲選択して合計を算出するなど)するマクロの書き方がわかりません。お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kuwa_98
  • ベストアンサー率66% (79/119)
回答No.3

A1セルが 空欄 なら "Exit Sub"(マクロ終了) そうでなければ、マクロ実行です。 Sub Test() If Range("A1") ="" Then Exit Sub End If ここに、実行マクロを記述 End Sub

takechan55
質問者

お礼

OKWaveに慣れてなく、お礼の時期を逸しました。 申し訳ございません。 あなたさまのご回答が一番シンプルで、自分に合っていたと思います。

その他の回答 (4)

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.5

>A1のセルが空欄の場合は、マクロを終了して If Range("A1").Value = "" Then Exit Sub とコードで判断して マクロを終了させます。 (例えば範囲選択して合計を算出するなど) 一例です。 Sub ボタン1_Click() If Range("A1").Value = "" Then Exit Sub MsgBox WorksheetFunction.Sum(Selection.Cells) End Sub

takechan55
質問者

お礼

OKWaveに慣れてなく、お礼の時期を逸しました。 申し訳ございません。

  • senbei12
  • ベストアンサー率42% (6/14)
回答No.4

こういうことでしょうか? (行頭スペースがカットされて見ずらいですが) Public Sub hoge() If Range("A1").Value = "" Then 'マクロ終了 Exit Sub End If '実行したい処理 MsgBox "ほげほげ" End Sub

takechan55
質問者

お礼

OKWaveに慣れてなく、お礼の時期を逸しました。 申し訳ございません。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

>例えば、A1のセルが空欄の場合は、マクロを終了して よく使う書き方その1 sub macro1() if worksheets("Sheet1").range("A1")="" then exit sub worksheets("Sheet1").range("B1").formula = "=SUM(A:A)" end sub よく使う書き方その2 sub macro2() if worksheets("Sheet1").range("A1") <> "" then worksheets("Sheet1").range("B1") = application.sum(range("A:A")) end if end sub

takechan55
質問者

お礼

OKWaveに慣れてなく、お礼の時期を逸しました。 申し訳ございません。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

一例です。 IF Range("A1").Value = "" Then Exit Sub MsgBox WorksheetFunction.Sum(Range("B1:B10"))

takechan55
質問者

お礼

OKWaveに慣れてなく、お礼の時期を逸しました。 申し訳ございません。

関連するQ&A

  • エクセルのマクロについて

    エクセルのマクロについて教えてください。 毎月、データをダウンロードし、VLOOKUP関数などを使って、 必要項目を入れ、ピポットテーブルで合計を出すという 作業をしています。マクロを使ったら、簡単にできるのでは ないかとやってみましたが、マクロで登録しても 毎月集計をするデータの件数が異なるため、 VLOOK関数で入力されるのが、そのマクロで登録したときの ものまでで、残りのセルが空欄になっていたり、 ピポットテーブルの集計は、データの範囲を選びなおしたり しないといけませんでした。 いい方法はないでしょうか。 マクロに作業を記録して、そのシートではなく、 ほかのファイルのシートで 実行する場合は、そのマクロを登録したときのファイル(シート)を 毎回開かなければならないのでしょうか。 基本的なことがわかっていません。 教えてください。

  • エクセルマクロ超初心者で、悩んでます。

    エクセルマクロ超初心者で、悩んでます。 どなたか助けてください。 悩みはこうです↓ データ用のワークシートのセルに数字、文字が入力してあります。 セルの数値同士の引き算で算出した数値を列数として、別の印刷用のワークシートのセル番地(列、行)に、「文字」を表示したいのです。 日本語で書いちゃうと ワークシート「印刷用」の、あるセル番地(ワークシート「データ用」から、列数はJ1‐A1、行数はのB1の数値)に ワークシート「データ表」のC1の文字 を出力せよ です。 Worksheets選択がうまくいきません CellsかRangeを使うのかと思いますが、引き算する表現がわかりません・・ 文例があれば、稚拙ながら活用できるかなと思います。 よろしくお願いします!

  • エクセルVBA:プロシージャーの実行条件

    選択した範囲の中に、"#N/A"という文字列が一つもなければ選択範囲をcopy→value pasteというマクロを作りたいのですがどのようにすればいいでしょう? ユーザー定義関数で別のデータソースから数値を引っ張ってきた後value pasteしたいのですが、数値を引っ張ってくるのに結構時間がかかる為、数値を引っ張ってくるプロシージャーの後でvalue pasteするプロシージャーを続けて実行すると、数値を引っ張れていないセルは"#N/A"をcopyしてそのままpasteしてしまいます(データが来ていないセルは"#N/A"が表示されているので)。 宜しくお願いします。

  • エクセル:マクロの起動条件

    お世話になります。 以下の条件でのマクロを起動する方法、及びそのマクロを教えてください。 《条件》 ブックを開いた時、あるシートのC列でデータが入っている最下行の行番号とA列のデータが入って最下行の行番号の差が100以下だった場合、マクロを実行する。 (なおC列の行番号の方が必ず大きいです) ちなみに実行したいマクロは1~6の手順です。 1.ブックを開いたとき 2.「入力用」という名前のシートのC列でデータが入っている最下行の行番号とA列のデータが入っている最下行の行番号の差が100以下だった場合 3.「入力用」というシートにかかっているシートの保護をはずし 4.データが入っているC列の最下行のA~Z列を選択して、50行分 下にコピーする。  (例えば、C列の最下行が350行の場合、A350~Z350まで を選択したあと400行まで下にコピーする。) 5.再度シートの保護をかけ 6.A列でデータが入っている最下行の1つ下のセルを選択する ちなみに、2の条件に当てはまらないときはマクロを実行しません。 またC列の最下行よりA列の最下行が大きい数字になることはないはずですが、もし同じかA列の方が大きい場合、「エラー:C列よりA列が大きくなっています」と画面に表示させたい。 なお、行番号の差:100、選択するA~Z行、50行分下にコピー は変わる可能性があるので、修正する場合どの部分を修正すればよいかも教えてください。 よろしくお願いします。

  • エクセルで連番をマクロで

    こんにちは いつもお世話になっています。 Windows7、エクセル2010で教えてください。  B3から仮にB100まで文字列があるとします、空白セルはありません。 この状態でA3からA100まで1から始まる連番をマクロで実行したいのです。 実際はB列のデータの最終行は不定です。つまり、B列にデータがなくなるまで(空白セルになるまで)A列に連番をつけたいのです。現在はA3,A4に1,2と入力し、オートフィルで該当セルを選択し「予測」で連番をつけています。 マクロ記録ではB列にデータがなくなる判断ができなくて作れません。 この作業が頻繁にあるものですからマクロができれば助かります。 よろしくお願いいたします。

  • EXCELでセルの移動マクロを作りたいのですが…

    EXCELについての質問です。マクロを使ってセルの移動をさせたいと考えています。 まず使うデータ範囲はA1:E11です。A1:E10にはデータが入っています。 ちなみに、A列には名前、B~E列には数字が入っており、A11:E11は合計が表示される設定しており、合計の場所はここに固定させたいのです。 その移動のさせ方ですが、 A1:E1に空欄があるとします。 そのときに、マクロを再生させるとA2:E10のセルに入っているデータ(値のみ)を上に移動させたいのです。 さらに、A3:E3の内容を消して空欄が出来たとします。 その時に同じ操作によってA4:E10のデータを上に移動させたいのです。 前者のマクロを単純に作ると縦に9つ分のセルを移動させるマクロでは、 A11:E11も上に移動させられてしまいます。なので、移動させるセルの一番下が10行目になるようなマクロを作りたいのです。 何がしたいのかといいますと、いらないデータを消した時に空欄をマクロで詰めてしまいたいのです。 乱文で判りづらいかと思いますが、知識のある方教えていただけないでしょうか。 よろしくお願い致します。

  • マクロでの集計方法を教えてください

    初歩的な質問です。 『A列に1か0の数値がランダムに入力されています。 この場合にA列の数値0のセルの隣のB列のセルに その上の0までの数値の合計を自動で計算したいのですが。 表現がうまくありませんので下記具体例にて。 セルA1は0、A2~A15までは1、A16は0の数値が入力されているとします。 (A17以下にも0と1がランダムに入力されています) この時セルB16にA2~A16までの合計を計算するマクロです。 (同様に次のA列0までの合計をB列に計算します) 自分なりに色々考えましたが出来ませんでした。 なにとぞよろしくお願いします。

  • Excel VBA ある範囲内で検索条件に一致したデータを入力する

    Excel VBA ある範囲内で検索条件に一致したデータを入力する Excel2003を使用しています。 Sheet2で選択している範囲内のB列のデータがSheet1で選択している範囲内のB列のデータと一致していたら、そのA列のデータをSheet2のA列に入力するというマクロを作成中ですが、うまくいきません…。 Sheet1とSheet2の選択範囲については、このマクロを実行前に都度選択するようにし、A列のデータは日付、B列のデータは数値です。 以前、示していただいたサンプルを参考にコードを書き換えて試していますが、なかなか思うようにいかず、質問させていただきました。 よろしくお願いします。

  • エクセル関数で条件が二つの時の数値抽出

       列方向のそれぞれ三つのセルに数値が入った78行  (75行から152行)のテーブルがあります。       今,これらと異なる列方向の三つのセルの内の左側二  つに,テーブル内の任意の行の数値をそれぞれ選択した  時,残るセルにテーブル内の残された行の数値を抽出し  たいと思いますがうまくいきません。      何方かエクセル関数で出来る方法を教えていただけま  せんか。   なお,選択行は4行だけとしており,これらを連続させず  に一行毎に設け,各行毎の抽出セルにDSUMで計算式を  作成すると数値の抽出ができますが,この方法は避けた  いと思います。     (数値選択列)(抽出列)   (テーブル)   73行 X  ,Y   ,Z      , AA  ,AB  ,AC   74行開始 終了 期間     開始 終了 期間   75行,0005 ,0011 ,0010 (空欄),0004 ,0012 ,0010   76行,0007 ,0009 ,0010 (空欄),0005 ,0011 ,0010   77行,0004 ,0011 ,0009 (空欄),0006 ,0010 ,0010 (空78行,0008 ,0003 ,0004 (空欄),0007 ,0009 ,0010  --------------------(空欄),0004 ,0011 ,0009 (空79行(空            欄),0005 ,0010 ,0009 (空80行(空            欄),0006 ,0009 ,0009 (空                 欄),0007 ,0005 ,0006 (空152行(空           欄),0008 ,0003 ,0003    以上で,(空,あるいは(空欄)乃至は数字で00を含む4  桁としているのは,文字化けを避けるために便宜上入れた  もので,数値そのものは2桁の範囲です。                   何度もトライしておりますができません。どうかよろしくお  願いします。なお,エクセルVBAによる方法もお教えいただ  ければ有難いです。

  • Excelのマクロで作りたい

    こんにちは。 あるデータベースを使うシステムでエクセルにデータをエクスポートしたら数値を入れている列が文字列として認識してしまいます。 本来文字列が入るところに数値を入れているだけなのですが、エクスポートした時も数値しか入っていないのですが文字列として入っています。 エクセル上では数値しか見えませんノートパッドにペーストすると数値の後ろに「”」があります。しかも改行されていて2行ある状態になっています。 なのでセルの内容を編集(F2)で開いてバックスペース2回押し、Enterで初めて数値として認識されます。 この行為をマクロ化するにはどうすればいいのでしょうか? マイクの記憶で同じ動作をしてもそのセルの場所と中にある数値も一緒に記憶されるのでどこでやっても記憶した数値を貼り付けする事になってしまいます。 これをどの箇所でもマクロを押せばそのセルをF2してバックスペースを2回する様に設定することは可能でしょうか? 判りずらい説明ですがもし判る方が居たらご教授下さい。 宜しくお願いします。

専門家に質問してみよう