Excel2007でマクロ作成中の初心者です。

このQ&Aのポイント
  • Excel2007でマクロを作成中の初心者です。データをクリアするマクロを書いており、特定の範囲を除いてシート上のデータをクリアする処理です。
  • マクロは別のブックで実行されます。このブックのマクロは最初のボタンクリックのみ実行されるようにしたいです。新しいデータを入力した後でも誤ってクリアされないようにするためです。
  • コマンドボタンを作成して、そのクリックイベントを制御することで解決できます。ボタンをクリックしたときにマクロが実行され、2回目のクリックでは実行されないようにします。
回答を見る
  • ベストアンサー

最初の1回のみにボタンクリックでマクロ実行する

Excel2007でマクロ作成中の初心者です。 1)Aブックに次のマクロを書いてます。 Sub データをクリアする() Dim list, SheetName Const EXCEPT_NAME = "計算 番号 明細" For Each SheetName In ActiveWorkbook.Worksheets If InStr(EXCEPT_NAME, SheetName.name) = 0 Then Sheets(SheetName.name).Activate クリア範囲 End If Next End Sub -------------------------------- Sub クリア範囲() Range("AM13:AQ13").Select Selection.ClearContents End Sub 2)上のマクロは、Bブック上で実行します。 Bブックのマクロ実行は、最初のボタンクリック1回のみです。 (このBブックが閉じられ保存されるまで) なぜなら、クリアした部分に、新しいデータを入れるからです。 誤って2回目のボタンクリックでも、マクロ実行しないようにしたいです。 せっかく入力した新しいデータを消去しないためです。 このようなコマンドボタンを作るにはどうしたらよろしいでしょうか?

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

  • ベストアンサー
  • foomufoomu
  • ベストアンサー率36% (1018/2761)
回答No.6

>足したところ、なぜかその部分が黄色くなり、 >「変数が定義されていません」というコンパイルエラーが発生します。 あ、もしかして、ボタンがActiveXコントロールになってないのでは? http://www.officelabo.net/excel/list2.html なお、前の回答にある、「ボタンの名前」はこのリンクの2番目の画像に出ているプロパティボックスの一番上の枠内の太字で書かれた文字です。

aitaine
質問者

お礼

今ご教示されたことに十分注意払って実行したところうまくできました。ありがとうございました。

その他の回答 (5)

  • foomufoomu
  • ベストアンサー率36% (1018/2761)
回答No.5

>足したところ、なぜかその部分が黄色くなり、 >「変数が定義されていません」というコンパイルエラーが発生します。 ボタンの名前と書かれている名前がくい違っているか、Falseなどにつづり間違えがあるか、のいずれかと思われます。

  • foomufoomu
  • ベストアンサー率36% (1018/2761)
回答No.4

>EnabledプロパティをFALSEにする方法がわかりません 質問に書かれたマクロのどこかに(マクロを実行するボタンの名前がCommandButton1だとすると) CommandButton1.Enabled = False を付け足すだけです。

aitaine
質問者

補足

足したところ、なぜかその部分が黄色くなり、「変数が定義されていません」というコンパイルエラーが発生します。

  • foomufoomu
  • ベストアンサー率36% (1018/2761)
回答No.3

コマンドボタンがActiveXコントロールなら、マクロの中で コマンドボタンのEnabledプロパティをFALSEにすればよいです。

aitaine
質問者

補足

EnabledプロパティをFALSEにする方法がわかりません

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

コマンドボタンで行う処理の先頭で、既に実行されたのか、まだなのか、を判断する。 既に実行されたのなら、ExitSubで処理を抜ける。 まだなら、「処理されたよ」という記録を残す。 「まだだよ」「処理されたよ」をどういう形で表すかはアナタが決めてください。

aitaine
質問者

補足

ご教示くださったように自分なりにコードを作ってみました。これでうまく作動しているようにみえますが、このコードにフラッグを立てるとすると、どのように修正したらよろしいでしょうか? Sub データを消去() Sheets("明細").Select If Range("D35").Value = 0 Then MsgBox "既にクリアしてあります" Exit Sub Else データクリア MsgBox "データをクリアしました" End If End Sub

  • junpecho
  • ベストアンサー率9% (1/11)
回答No.1

どっかに実行中フラグを持たせればいいんじゃないかなぁ たとえば、どっかのセルにON、OFF(0 or 1)を書いて、 処理の頭でONにして、かつ、ONだとすぐExitする分岐を設ける。 で、処理の最後でOFFにする。 みたいなのはどうでしょうか?

aitaine
質問者

補足

フラグを持たせ=? どっかのセルにON、OFF(0 or 1)を書く=? 処理の頭でON=? ONだとすぐExitする分岐を設ける=? 処理の最後でOFF=? すいません意味が理解できないんです。具体的に教えていただけませんか?

関連するQ&A

  • コマンドボタンに二回目のマクロ実行しない設定を

    excel2007を使ってマクロ作成の初心者です。 「最新明細」シート上に、ユーザーフォームがあります。 その中のコマンドボタンクリックすると マクロ2を実行します。 しかし、このマクロは月初めに1回だけ実行し、 再びボタンをクリックしても、マクロ2を実行しないようにしたいです。 いろいろ考えたましたが、思ったように動作させることできず、こまってます。 どうしたらよいのでしょう。 Sub 処理済の確認() Dim AB3 As Date Dim AB4 As Date Sheets("計算").Select If AB3 = AB4 Then Exit Sub MsgBox "データは処理済みです。" Sheets("最新明細").Select Else End If If AB3 <> AB4 Then マクロ2の実行 End If End Sub

  • コマンドボタンを2回目クリックでエラー発生する

    windows7 Excel2007でマクロ作成の初心者です。以下の点で困ってます。ご指導お願いします。 次のコマンドボタンを実行すると、最初のクリックでは実行できるのに 同じボタンを再度クリックするとエラーがでます。 エラーが出ないようにするにはどうしたらよろしいでしょうか。 ちなみに、ブックはA、B、Cの3個です。 Private Sub CommandButton8_Click() ActiveWorkbook.Close SaveChanges:=True On Error Resume Next Workbooks(2).Activate 'Bブックをアクティブに Resume Next Unload Me 評価.Show  End Sub

  • エクセルのブックを閉じるマクロについて

    エクセルのブックAとブックBが開いている状態で、 ブックAのボタンに登録して実行すると、ブックAのみ閉じる、 というマクロを作りました。(下部にコードを記載します) このマクロは、2つのブックが開いていると正常に稼働するのですが、 ブックが1つしかない場合、実行時エラーが出てしまいます。 (ブックAのみ開いた状態でこのボタンを押してもエラーなく閉じたい) 実行時エラーが出ないようにするにはどうすれば良いか、 おわかりの方がいらっしゃいましたら教えて下さい。 どうぞよろしくお願い致します。 Sub このブックのみ閉じる() Dim wa As String wa = "ほかに無い" Dim wb As Workbook For Each wb In Workbooks If wb.Name <> ThisWorkbook.Name Then wa = "ほかにあるよ" End If Next If wa = "ほかに無い" Then Application.DisplayAlerts = False Application.Quit '終了予定 End If Range("D2").Select Selection.ClearContents ThisWorkbook.Close SaveChanges:=False End Sub

  • 【マクロ】指定したファイルを開いてマクロを実行

    マクロ初心者です。よろしくお願いします。 <質問> コマンドボタンをクリックしたら、任意のエクセルファイルを指定して開き、その開いたファイル(白紙状態のファイル)にマクロを実行させる方法を探してます。 <作成マクロ> Private Sub CommandButton1_Click() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") If OpenFileName <> "False" Then Workbooks.Open OpenFileName End If Workbooks(Dir(OpenFileName)).Activate ActiveCell.FormulaR1C1 = "テスト" Range("A1").Select Selection.Copy Range("B1").Select ActiveSheet.Paste End Sub <マクロ説明> --コマンドボタンをクリックして指定したエクセルファイルを開く-- Private Sub CommandButton1_Click() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") If OpenFileName <> "False" Then Workbooks.Open OpenFileName End If Workbooks(Dir(OpenFileName)).Activate --開いたエクセルファイル(白紙状態)のセルA1に「テスト」を入力した後、コピーしセルB2に貼り付ける--   ActiveCell.FormulaR1C1 = "テスト" Range("A1").Select Selection.Copy Range("B1").Select ActiveSheet.Paste End Sub コマンドボタンをクリック ↓ 任意のエクセルファイルを指定して開く ↓ 開いたファイル(白紙状態のファイル)のセルA1に「テスト」と書き込み セルA1の「テスト」をコピーしセルB1に貼り付ける このマクロを実行させるにはどこを改善すれば良いでしょうか? ご助言いただけると助かります。 よろしくお願い致します。

  • 【マクロ】指定したファイルを開いてマクロを実行

    マクロ初心者です。よろしくお願いします。 <質問> コマンドボタンをクリックしたら、任意のエクセルファイルを指定して開き、その開いたファイル(白紙状態のファイル)にマクロを実行させる方法を探してます。 <作成マクロ> Private Sub CommandButton1_Click() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") If OpenFileName <> "False" Then Workbooks.Open OpenFileName End If Workbooks(Dir(OpenFileName)).Activate ActiveCell.FormulaR1C1 = "テスト" Range("A1").Select Selection.Copy Range("B1").Select ActiveSheet.Paste End Sub <マクロ説明> --コマンドボタンをクリックして指定したエクセルファイルを開く-- Private Sub CommandButton1_Click() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") If OpenFileName <> "False" Then Workbooks.Open OpenFileName End If Workbooks(Dir(OpenFileName)).Activate --開いたエクセルファイル(白紙状態)のセルA1に「テスト」を入力した後、コピーしセルB2に貼り付ける--   ActiveCell.FormulaR1C1 = "テスト" Range("A1").Select Selection.Copy Range("B1").Select ActiveSheet.Paste End Sub コマンドボタンをクリック ↓ 任意のエクセルファイルを指定して開く ↓ 開いたファイル(白紙状態のファイル)のセルA1に「テスト」と書き込み セルA1の「テスト」をコピーしセルB1に貼り付ける このマクロを実行させるにはどこを改善すれば良いでしょうか? ご助言いただけると助かります。 よろしくお願い致します。

  • マクロ

    マクロ初心者です。 シート名=社員番号(数字2~3桁) 以下のようなマクロを組んでみましたが、 実行してみると該当する社員番号のシートがあっても 「該当する社員が存在しません」と出てしまいます。 間違いをご指摘いただけると助かります。 Sub 社員検索()   Dim SheetName As String   SheetName = InputBox("社員検索" & vbLf & vbLf & "社員番号を入力して下さい")    If SheetName = vbNullString Then     Exit Sub     Sheets(SheetName).Activate    Else     MsgBox "該当する社員が存在しません"    End If End Sub よろしくお願いいたします。

  • 特定のシートだけ関数入力を除外したい

    windows7 Excel2007でマクロ作成中の初心者です。 30枚のシートがあるブックがあります。 以下のコードで処理を行っていました。 Sub 請求書入力() Const EXCEPT_NAME = "表紙 経理 一覧  部門" Application.ScreenUpdating = False ChDrive ThisWorkbook.Path ChDir ThisWorkbook.Path Dim list, SheetName For Each SheetName In ActiveWorkbook.Worksheets If InStr(EXCEPT_NAME, SheetName.Name) = 0 Then Sheets(SheetName.Name).Activate Call 各シートに同じ関数を入れる End If Next End Sub しかし、上のシートの前にある2枚のシートだけ関数を入れないようにしたいです。この2枚だけはシート名が可変のため除外シートに追加できません。 また、それより、前のシートはシート数が可変で15から20枚あります。 そのためには、どういうコードにしたらよろしいでしょうか。

  • マクロ 戻るボタンを押したらシートの1枚目に戻る

    各シートに「戻る」というボタンを作りましたが、 「ボタンを押したらシートの1枚目をアクティブにする」というマクロを付けたいです。 下記は、『「戻る」というマクロを2枚目のシート以降すべてに付ける』というマクロです。 このマクロの中に、各シートの「戻る」ボタンを押せば、シートの1枚目に戻るような 指示を入れたいです。 分かる方いましたら、お願いします。。。 ※下記のマクロは以前ご回答いただいたマクロを引用したものです。 /////////////////////////////////// Sub 戻るボタン設置() Dim Sht As Worksheet For Each Sht In Worksheets If Not Sht.Name = Worksheets(1).Name Then With Sht For i = 1 To 1 '幅140、高さ20のボタンを追加 .Buttons.Add(900 * i, 10, 140, 20).Text = "戻る" Next i End With End If Next Sht Sheets(1).Select End Sub

  • エクセルVBAマクロのオプションボタンについて

    オプションボタンのマクロに関して教えて下さい。 マクロのスキルレベルは、新しいマクロの記録を多用して、マクロを組むレベルです。 「表示-ツールバー-フォーム」から選ぶオプションボタンを使って、オプションボタンAが押されている場合とBが押されている場合で、処理を変えたいのですが、そのオプションボタンの値をどうやっても拾えません。 色々検索した結果、以下のマクロでできる気がしたのですが、駄目でした。 Private Sub OptionButton1_Click() オプション1 = True End Sub Private Sub OptionButton2_Click() オプション2 = True End Sub Sub オプションボタン() If オプション1 = True Then Range("a1") = 1 ElseIf オプション2 = True Then Range("a1") = 2 Else Range("a1") = 0 End If End Sub 作ったオプションボタンを右クリックしてマクロ登録を選ぶと、「オプション1_Click」となっているので、「OptionButton1_Click」を「オプション1_Click」に変えてみたのですが、やっぱり駄目でした。 ネットではユーザフォームを使ったマクロ例はあるのですが、そのまま使用するオプションボタンの例がありません。できればユーザフォームは使いたくありません。 ご存知の方がいらっしゃいましたら、教えて下さい。よろしくお願いします。

  • マクロ 実行ボタンを押さずに常に実行

    マクロを常に実行することはできますか? 「常に実行」という表現が適切か分からないのですが、 例えば・・・・・・ A1~A10まで数値を入力する表があり、それをD1~D10にコピー・貼り付けを行う[貼り付け]マクロがあります。 Sub 貼り付け() ' 貼り付け Macro Range("A1:A10").Copy Range("D1") End Sub これを、[貼り付け]マクロの実行ボタンを押して実行するのではなく、 A1~A10に数値を入力する毎に[貼り付け]マクロ実行される(D列に数値が入る)事は可能でしょうか? よろしくお願いします。

専門家に質問してみよう