Excelマクロ 入力があったらボタンを表示する方法

このQ&Aのポイント
  • C3に入力があった場合、隣にボタンを表示させる方法を教えてください。
  • Excelマクロを使用して、C3に入力があった場合にボタンを表示させたいです。
  • 参考サイトのコードを使用して、C3の入力に応じてボタンの表示を制御する方法を教えてください。
回答を見る
  • ベストアンサー

Excel マクロ 入力があったらボタンを出したい

C3に入力があった場合、隣にボタンを表示させたいと考えています。 http://www.cocoaliz.com/excelVBA/index/17/ のようなサイトを参考に、以下のコードを書いてみました。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "$C$3" Then If Not Range("C3") = "" Then With ActiveSheet.Buttons.Add(Range("D2").Left + 1, Range("D2").Top + 1, _ Range("D2:D3").Width - 1, Range("D2:D3").Height - 1) .OnAction = "あいうえお" .Characters.Text = "あいうえお" .Font.Size = 10 End With End If End If こうした場合、元々C3に何か入力されていると、 C3をSelectする度にボタンが作られてしまいます。 又、C3の内容を変更してEnterを押したり、他のセルをセレクトしても何も起きません。 C3に何か入力してEnter、又は他のセルをSelectした時のみボタンを表示させたいのですが、 何かいい方法ありますでしょうか? よろしくお願いいたします。

  • cmd0
  • お礼率84% (16/19)

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

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

>C3に入力があった場合 そういうときはSelectionChangeイベントではなく,changeイベントを使います。 >C3に何か入力してEnter、又は他のセルをSelectした時のみボタンを表示させたい 裏を返せば,既にボタンがあるならば,何もしないでマクロを終了させてみます。 また今のご質問内容ではそこまで辿り着いていませんが,ボタンを消去する手順についても検討があってよいかもしれません。 手順: (簡易な例:シート上には今作ろうとしているボタンが1個あるか,または1個も無い) シート名タブを右クリックしてコードの表示を選ぶ とりあえずSelectionChangeイベントのコードは全部消す 代わりに次のように作成してみる Private Sub Worksheet_Change(ByVal Target As Range)  if activesheet.buttons.count = 0 then   If Target.Address = "$C$3" Then    If Not Range("C3") = "" Then    With ActiveSheet.Buttons.Add(Range("D2").Left + 1, Range("D2").Top + 1, _      Range("D2:D3").Width - 1, Range("D2:D3").Height - 1)     .name = "myButton1"     .OnAction = "あいうえお"     .Characters.Text = "あいうえお"     .Font.Size = 10    End With    End If   End If  end if end sub

cmd0
質問者

お礼

回答ありがとうございます! ボタンを消すのは他の場所で検討予定ですが、 まだそこまで作りこめていません。 しかし、説明不足だったにもかかわらず、 私の望みを汲み取ってくれてより良い物が出来ました! ありがとうございました!

その他の回答 (1)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

イベントを間違えています。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) では、SelectionChangeイベントですから、C3をSelectする度に作動してしまいます。 Private Sub Worksheet_Change(ByVal Target As Range) と、Changeイベントにしましょう。 でも、こうしても、C3への入力の都度、ボタンができてしまいますよ。

cmd0
質問者

お礼

回答ありがとうございます! SelectionChangeが原因だったんですね。 盲点でした。 お蔭様で解決いたしました! ありがとうございました!

関連するQ&A

  • エクセル マクロを利用して繰り返して入力する方法

    マクロでA1B1C1D1E1F1セルに入力しF1入力後A2B2C2D2E2F2と 下方向へ繰り返し800行くらいまで入力し、それとB列はスキップしたいのですが下記の方法で別々のシートでは うまくいくのですが同じシ-ト内ではエラ-になってしまいます 次の行への移動 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Column = 7 Then Cells(Target.Row + 1, 1).Select End If End Sub B列のスキップ Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Range("G1") <> "" Then If Target.Column = 2 Then Target.Offset(0, 1).Select End If End If End Sub どなたかご存じの方教えて下さい

  • エクセルで任意の順番にて入力をしたいのですが・・・

    エクセルで任意の順番にて入力(テンキー使用でenterで移動)をしたいです。 自分で調べてやったのですがうまくできないので教えてください。 ctrlキー+セル選択で名前BOXに登録は、セルを40個ほどしか登録できない?でしょうか・・・? 全部で300個ほど有るのですが、ちまちまやっても40個くらいのところで先頭に戻ります。 何か他の設定がおかしいのでしょうか? マクロも簡単そうなやつ Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then Range("D10").Select End If End Sub をやってみました。 今一解らず、 If Target.Address = "$A$1" Then Range("D10").Select End If のセルの位置を変えてやりましたが、こちらも数に制限があるのか 全部を登録して順番どうりに入力することができません。 数個分の枠で妙な位置に移動します・・・ 中の式を複数作ってやりました・・・ Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then Range("D10").Select       ・       ・       ・ If Target.Address = "XXXX" Then Range("XXX").Select End If End Sub ($A$1とD10の値を変えたものを多数使用して・・・) 何か良い方法があれば教えてください。 よろしくお願いします。

  • マクロの簡素化

    下記マクロです。 Range("AE6:AE1005").Select Selection.ClearContents Selection.Interior.ColorIndex = xlNone If Range("AD6").Value > 5 Then Range("AE6") = "*" Range("AE6").Select With Selection.Interior .ColorIndex = 3 End With Else End If If Range("AD7").Value > 5 Then Range("AE7") = "*" Range("AE7").Select With Selection.Interior .ColorIndex = 3 End With Else End If If Range("AD8").Value > 5 Then Range("AE8") = "*" Range("AE8").Select With Selection.Interior .ColorIndex = 3 End With Else End If 中略(セルを一個づつ指定しています) If Range("AD1004").Value > 5 Then Range("AE1004") = "*" Range("AE1004").Select With Selection.Interior .ColorIndex = 3 End With End If If Range("AD1005").Value > 5 Then Range("AE1005") = "*" Range("AE1005").Select With Selection.Interior .ColorIndex = 3 End With Else End If Range("AE3").Select 有るセルを参照しその値が5以上だったら別のセルに*マークとセルに色を付けるマクロですが、一個づつセル指定をしていますが、何とか短く出来ないでしょうか? お分かりになる方宜しくお願い致します。

  • エクセルのマクロ

    セルの値が変わったら動くマクロですが、2つ書くとエラーが出ます。 どのように直したらいいでしょうか? Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address If Intersect(Target, Range("EK22")) Is Nothing Then Exit Sub Else Range("EK24:EM28").Select Selection.ClearContents End If End Sub Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("EK24")) Is Nothing Then Exit Sub Else Range("EK27:EM28").Select Selection.ClearContents End If End Sub

  • 空白状態でEnterを押したら指定のセルに飛びたい

    例えばF5セルで何も入力せずEnterを押したらC9に入力セルを飛ばしたくて 自分の力で調べた限りでは下のコードで可能なのですが Private Sub Worksheet_SelectionChange(ByVal Target As Range) With Range("F5,C9") If Not Intersect(Target(1), .Cells) Is Nothing Then Application.EnableEvents = False .Select Target(1).Activate Application.EnableEvents = True End If End With End Sub 上記コードはF5セルを選ぶと、次に飛ぼうとするC9セルが見えてしまいます。 これが見えずにできる他の方法があるか色々調べても見つかりませんでした; 何か可能な策はありますでしょうか・・?

  • マクロ、カーソルの相対移動

    下記マクロはカーソルの相対移動で教えいいただいたものです。 セルに値を入力しないで、Enterを押下した時もこのように動作させるためにはどのように記述したらいいでしょうか。教えてください。よろしくお願いいたします。 Private Sub Worksheet_Change(ByVal Target As Range) if Target.Column = 2 Then Cells(Target.Row,5).Select if Target.Column = 5 Then Cells(Target.Row,7).Select if Target.Column = 7 Then Cells(Target.Row + 1, 2).Select End Sub

  • エクセルのマクロ 複数条件について質問です

    Findで複数条件の検索をする時について質問です。 現在下記のようなマクロがあります。 C3セルに検索したい文字などを入力した時 C11からC1000までのセルに当てはまるものがあればそのセルを 赤で塗りつぶします。 今回行いたいのは、これに追加してD3セルに入力された内容を D11からD1000の中で検索、また E3セルに入力された内容を E11からE1000の中で検索し C3、D3、E3に入力されている文字と同じであれば C3と照らし合わせているC11からC1000の当てはまったセルを赤く塗りつぶしたいです。 C3セルだけや、D3とE3を合ってるけどC3が当てはまっていない場合など どこかひとつでも当てはまっていなければ塗りつぶしはいりません。 また現在のマクロだとC3に文字が入力された時にマクロが実行されますが C3、D3、E3の3つ全てのセルに入力されたらマクロが実行されるようにしてもらいたいです。 D3とE3はデータ入力規則のリストでセルに入力を行います。 Private Sub SubProc1(ByVal Target As Range) Dim c As Range On Error Resume Next Set xCur = Selection If Application.Intersect(Target, Range("C3")) Is Nothing Then Exit Sub If Range("C3") = "" Then Range("C11:C1000").Interior.ColorIndex = 0: Exit Sub Application.ScreenUpdating = False '転記元のブックを開いて逆順で検索する Set c = Range("C11:C1000").Find(what:=Range("C3").Value, lookat:=xlPart, searchdirection:=xlPrevious, _ MatchCase:=True, MatchByte:=True, SearchFormat:=True) '見つけた(一番下の)セルを基準に転記する If Not c Is Nothing Then c.Interior.ColorIndex = 3 Application.Goto Reference:=c.Offset(0, -1), Scroll:=True End If End Sub

  • エクセル マクロ ダブルクリックで…(2)

    たびたび申し訳ございません。 先ほどエクセルでダブルクリックをすると順番に該当セル内の値が「有」→「無」→「空白」 となるマクロをご教授頂き、下記の内容で解決した者です。 B列についての該当セルへの入力がなされるという内容だったのですが、実はC列にも同様の処理を致したく、またもや素人はなすすべが無くなってしまいました。 B列は「要」「不要」「請求」「空白」としたいと思います。 たびたび大変恐縮ですがよろしくご教授くださいませ。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Target, Range("d1:d999")) Is Nothing Then Exit Sub With Target   If .Value = "" Then    .Value = "有"   ElseIf .Value = "有" Then    .Value = "無"   ElseIf .Value = "無" Then    .Value = ""   End If End With End Sub

  • マクロの疑問

    Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address <> "A2" Then Range("A2").Select End If End Sub とすると、どのセルを選んでもA2に飛ぶのに、 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "A3" Then Range("A2").Select End If End Sub とすると、A3を選んでも全く移動しないのはなぜでしょうか。 なにか落とし穴がありそうで。。。 よろしくお願いします。

  • マクロが動きません

    以下のようなプログラムでC3の値が変わるたびにA10の値に1を加えていきG3,H3が両方0になったらA10の値も0にする。C5の値が変わるたびにA15の値に1を加えJ3,K3が共に0になったらC5も0にするようにしました。 しかし、動作しません。 このシートの3行目は=シート名!セル番号 という形でほかのシートのセルの値が表示されるようになっています。G3、H3、J3、K3に手動で数値を入力した場合 は動作します。 ほかのシートのセルの値を表示させたセルの値が変化しても動作させる方法はないでしょうか> Private Sub worksheet_change(ByVal target As Range) With target If .Count > 1 Then Exit Sub If IsNumeric(.Value) = False Then Exit Sub If IsEmpty(.Value) = True Then Exit Sub If Not .Row = 3 Then Exit Sub Select Case .Column Case 3 Range("A10").Value = Range("A10").Value + 1 Case 5 Range("A15").Value = Range("A15").Value + 1 End Select End With If Range("g3").Value = 0 And Rang("h3").Value = 0 Then Range("A10").Value = 0 If Range("j3").Value = 0 And Rang("k3").Value = 0 Then Range("A15").Value = 0 End Sub

専門家に質問してみよう