• ベストアンサー

ダブルクリックでエクセル起動

セルをダブルクリックしてマクロを起動させたいのですが。 B1セルをダブルクリックすると、 Sub 顧客名検索() ans = InputBox("顧客名を入力してください") With ActiveSheet If .AutoFilterMode Then 'オートフィルタモードがオンなら .AutoFilterMode = False 'リセットする End If .Range("A1:G1").AutoFilter 'オートフィルタモードをセット .Range("A1:G1").AutoFilter Field:=2, Criteria1:="=*" & ans & "*" '2つ目のフィルターに検索文字 End With End Sub を実行させるようにしたいのです。 その方法で、C1、D1、E1、・・・も同様にしたいと思っています。 どなたか教えてください。

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

  • ベストアンサー
noname#89471
noname#89471
回答No.8

回答番号:No.5 の補足を見ました。 同一シート(たとえばSheet1)のイベントとして、補足のようなコードを記述なさったのですか? Microsoft Visual Basic のヘルプ ------------------- 同じ適用範囲にある複数のオブジェクトに、同じ名前の要素がある可能性があります。 ------------------- 以下のようでは、ダメですか? Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Address = "$B$1" Then 顧客名検索 ElseIf Target.Address = "$C$1" Then フリガナ検索 ElseIf Target.Address = "$D$1" Then 住所検索 ElseIf Target.Address = "$E$1" Then 郵便番号検索 ElseIf Target.Address = "$F$1" Then 電話番号検索 ElseIf Target.Address = "$G$1" Then 備考欄検索 Else Exit Sub End If End Sub 的をはずしてたら、申し訳ございません。

yunako0517
質問者

お礼

ありがとうございます。 出来ました。 個別に書いてはだめだったんですね。 まだまだマクロの仕組みが分からず、迷惑掛けてすみません。 ありがとうございました。

その他の回答 (7)

noname#89471
noname#89471
回答No.7

B1~G1をダブルクリックしたときの処理は一緒ですか? もし、そうでしたら、以下ではいかがでしょうか? 以下の例は、B1~G1をダブルクリックしたときに、"ダブルクリックしました"と表示する。 A1と、H1以降(I1、J1....)をダブルクリックしたら、"指定列ではありません"と表示。 1行以外ををダブルクリックしたら、"指定行ではありません"と表示。 ------------------- d_c Cancel = True ------------------- のところに、必要な処理を指定してみて...いかがでしょうか? -------------------------------------- Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim r As Long, c As Long r = ActiveCell.Row c = ActiveCell.Column If r = 1 Then If c > 1 And c < 8 Then d_c Cancel = True 'セルを編集可能にしてしまうのでキャンセル Else MsgBox "指定列ではありません" Cancel = True End If Else MsgBox "指定行ではありません" Cancel = True End If End Sub -------------------------------------- Sub d_c() MsgBox "ダブルクリックしました" End Sub B1、C1、D1、E1、F1、G1、それぞれをダブルクリックしたとき、それぞれで異なった処理を したいということであれば... web2525様がおっしゃってらっしゃるように、Target.Address を使用したほうがよいように思います。 If c = 2 Then 処理 ElseIf c = 3 Then 処理 ・ ・ ・ でもできますが...

yunako0517
質問者

お礼

回答ありがとうございます。 教えていただいたコード、ぜひ活用させていただきたいと思います。 ただ、もう少し勉強してからになりそうですが・・・。 今後も宜しくお願いします。 ありがとうございました。

  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.6

>『コンパイルエラー >名前が適切ではありません:Worksheet_BeforeDoubleClick』 ワークシート内をダブルクリックした際に動作するマクロです、対象セルごとに同じ名前のマクロを作成していませんか? 基本のマクロの中でTarget.Address によって処理を変更するルーチンを作成してください。 If Target.Address = "$B$1" Then ・・・・ ElseIf Target.Address = "$C$1" Then ・・・・ とか Select Case などで。

yunako0517
質問者

お礼

回答ありがとうございました。 せっかく教えていただいたのに、内容を理解できず、NO.8さんの回答でやっと分かりました。 知識不足ですみませんでした。 またよろしくお願いします。

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.5

B1セルは出来たということですのでモジュールの問題ではないですね。 失礼しました。 コードの方に問題がありそうです。 コード全体をアップできませんか?

yunako0517
質問者

補足

Option Explicit Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Not Target.Address = "$B$1" Then Exit Sub 顧客名検索 End Sub Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Not Target.Address = "$C$1" Then Exit Sub フリガナ検索 End Sub Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Not Target.Address = "$D$1" Then Exit Sub 住所検索 End Sub Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Not Target.Address = "$E$1" Then Exit Sub 郵便番号検索 End Sub Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Not Target.Address = "$F$1" Then Exit Sub 電話番号検索 End Sub Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Not Target.Address = "$G$1" Then Exit Sub 備考欄検索 End Sub というコードを書き込んでいます。

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.4

>コンパイルエラー シートモジュールに記述していますか?

  • kmmk16
  • ベストアンサー率46% (32/69)
回答No.3

B1をダブルクリックした時、 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Not Target.Address = "$B$1" Then Exit Sub 処理  ・  ・  ・

yunako0517
質問者

補足

回答ありがとうございます。 B1セルは出来たのですが、同様にC1、D1というふうに作っていくと、 下記のエラーが出てきてしまいます。 『コンパイルエラー 名前が適切ではありません:Worksheet_BeforeDoubleClick』 どういう意味でしょう?

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.2

Excel VBA 入門講座 ワークシートのイベントプロシージャ http://excelvba.pc-users.net/fol3/3_6.html

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.1

シートモジュールの Worksheet_BeforeDoubleClickイベントを使ってはいかがでしょう?

yunako0517
質問者

補足

回答ありがとうございます。 実はこのイベントの使い方が分かりません。 コードなどを教えていただけると助かるのですが。 勉強不足ですみません。

関連するQ&A

  • エクセルVBAで住所録を作成

    住所録シートに次のようにコードを作っています。 Option Explicit Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Address = "$B$1" Then 顧客名検索 ElseIf Target.Address = "$C$1" Then フリガナ検索 ElseIf Target.Address = "$D$1" Then 住所検索 ElseIf Target.Address = "$E$1" Then 郵便番号検索 ElseIf Target.Address = "$A$1" Then オートフィルタ解除 カナ順に設定 Else Exit Sub End If End Sub そして標準モジュールには Sub 顧客名検索() ans = InputBox("顧客名を入力してください") With ActiveSheet If .AutoFilterMode Then 'オートフィルタモードがオンなら .AutoFilterMode = False 'リセットする End If .Range("A1:G1").AutoFilter 'オートフィルタモードをセット .Range("A1:G1").AutoFilter Field:=2, Criteria1:="=*" & ans & "*" '2つ目のフィルターに検索文字 End With End Sub Sub フリガナ検索() ans = InputBox("顧客カナを入力してください") With ActiveSheet If .AutoFilterMode Then 'オートフィルタモードがオンなら .AutoFilterMode = False 'リセットする End If .Range("A1:G1").AutoFilter 'オートフィルタモードをセット .Range("A1:G1").AutoFilter Field:=3, Criteria1:="=*" & ans & "*" '3つ目のフィルターに検索文字 End With End Sub Sub 住所検索() ans = InputBox("住所を入力してください") With ActiveSheet If .AutoFilterMode Then 'オートフィルタモードがオンなら .AutoFilterMode = False 'リセットする End If .Range("A1:G1").AutoFilter 'オートフィルタモードをセット .Range("A1:G1").AutoFilter Field:=4, Criteria1:="=*" & ans & "*" '4つ目のフィルターに検索文字 End With End Sub Sub 郵便番号検索() ans = InputBox("郵便番号を入力してください") With ActiveSheet If .AutoFilterMode Then 'オートフィルタモードがオンなら .AutoFilterMode = False 'リセットする End If .Range("A1:G1").AutoFilter 'オートフィルタモードをセット .Range("A1:G1").AutoFilter Field:=5, Criteria1:="=*" & ans & "*" '5つ目のフィルターに検索文字 End With End Sub Sub オートフィルタ解除() Application.CutCopyMode = False Selection.AutoFilter Range("A1").Select End Sub Sub カナ順に設定() Range("C1").Select ActiveWorkbook.Worksheets("住所録").Sort.SortFields.Clear ActiveWorkbook.Worksheets("住所録").Sort.SortFields.Add Key:=Range("C1"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("住所録").Sort .SetRange Range("A2:IV65536") .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Range("A2").Select Selection.AutoFilter End Sub と入れています。 VISTAで作ったのですが、このファイルを共有にして使おうとすると、XPのパソコンでは、A1セルをダブルクリックすると、コードが黄色になり、マクロが中断されます。 B1~G1は問題なくマクロが実行されるのに・・・。 もう一台のVISTAでは同じ共有状態で使っても問題ありません。 どうすればXPでも問題なく使えるのでしょう?

  • 「コンパイルエラー 変数が定義されていません」

    キーワード検索ボックスを作ろうとしていますが、途中マクロを実行すると、「コンパイルエラー 変数が定義されていません」と出て、 Sub 品名検索()の部分が黄色くなり、そのすぐ下のans =が青くなっています。 どうすればよいのでしょうか? 作ったコードは以下です。 Sub 品名検索() ans = InputBox("文字列を入力してください") ans = StrConv(ans, vbNarrow) '全角入力を半角に変換 With ActiveSheet If .AutoFilterMode Then 'オートフィルタモードがオンなら .AutoFilterMode = False 'リセットする End If .Range("A4:IV4").AutoFilter 'オートフィルタモードをセット .Range("A4:IV4").AutoFilter Field:=5, Criteria1:="=*" & ans & "*" '5つ目のフィルターに検索文字 End With End Sub これでE4セルをダブルクリックすると、表示が出てとまってしまいました。

  • エクセルVBA住所録で半角全角問わず検索する方法

    エクセルVBAで住所録を作っています。 住所録で下記のようなコードを書いて、キーワード検索をさせるようにしているのですが、『*丁目』や番地に半角英数を使っています。 全角で数字を入力しても検索されるようなコードの書き方はあるのでしょうか? 宜しくお願いします。 Sub 住所検索() ans = InputBox("住所を入力してください") With ActiveSheet If .AutoFilterMode Then 'オートフィルタモードがオンなら .AutoFilterMode = False 'リセットする End If .Range("A1:IV1").AutoFilter 'オートフィルタモードをセット .Range("A1:IV1").AutoFilter Field:=4, Criteria1:="=*" & ans & "*" '4つ目のフィルターに検索文字 End With End Sub

  • VBAで保存時の状態に戻す方法

    本などを参考にしながらエクセルVBAを使って売上帳を作成しています。 品名欄のキーワード検索機能を付けていますが、抽出した後、元の状態に戻す良い方法はないですか? キーワードの抽出は以下の書き方です。 Sub 品名検索() Dim ans As String ans = InputBox("文字列を入力してください") With ActiveSheet If .AutoFilterMode Then 'オートフィルタモードがオンなら .AutoFilterMode = False 'リセットする End If .Range("A4:IV4").AutoFilter 'オートフィルタモードをセット .Range("A4:IV4").AutoFilter Field:=5, Criteria1:="=*" & ans & "*" '5つ目のフィルターに検索文字 End With End Sub よろしくおねがいします。

  • 下記マクロの意味を教えてください。

    Sub 済() With Worksheets("管理表") If .AutoFilterMode Then .AutoFilterMode = False End If Range("O7:P7").Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:="=*済*", Operator:=xlAnd ActiveWindow.SmallScroll Down:=-12 Range("A1").Select End With End Sub よろしくお願い致します。

  • エクセル ダブルクリック マクロについてご教授下さい

    よろしくお願い致します。 すみません、マクロの超初心者です。 見よう見まねで組んでみたのですが、セルが選択されるばかりでさっぱり動きません。 同じような処理で多数のパターンを覚えたいのですが、お教え頂けますでしょうか。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Target, Range("d1:d999")) Is Nothing Then Exit Sub With Selection.Interior If ActiveCell = "" Then .Value = "有" ElseIf .Value Like "有*" Then .Value = "無" Else Cancel = True End If End With 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

  • エクセルのVBAの変更点がわからないので教えてください

    下のようなプロシージャをエクセルに組み込んでいますが、次のようなことができるように変更したいので教えてください。 なお、プロシージャは正常に作動しています。 Private Sub Worksheet_Activate() With Sheets("シート名") .AutoFilterMode = False .Range("A1:d1").AutoFilter .Range("A1:d1").AutoFilter field:=1, Criteria1:="<>" .Range(.Range("d1"), .Range("A1").SpecialCells(xlLastCell)).SpecialCells(xlCellTypeVisible).Copy Range("A1") .AutoFilterMode = False .Range("A1:d1").AutoFilter End With End Sub 修正してできるようにしたいこと 1、with sheets("シート名")のシート名にシートがアクティブになったとき、そのシート名が自動で入るようにしたい。 ※シートの数は6シーとあります。 2、セルd1のデータからその行のデータ全体がコピーされるので、必要なセルのデータのみがコピーできるようにしたい。

  • ダブルクリックで自動入力

    初心者です。教えて下さい。 一つのBOOKに二つのSheetがあります。 Sheet”データ”のA列に番号が入力してあり、そのセルをダブルクリックすると Sheet”印刷”の(A18)にダブルクリックした番号が入力され、 2回目からは前に入力したセルの一つ下に入力されるようにしたいのですが・・ 下記を自分で作ってみましたが、何度やっても(A18)にしか自動入力されません。 どのようにしたら最終行の下に入力されるようになるのでしょうか? 色々調べてみましたが分かりませんでした・・・宜しくお願い致します。 Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) If Target.Count > 1 Then Exit Sub If Target.Column <> 1 Then Exit Sub Cancel = True With Worksheets("印刷") MyRange = Range("A18").End(xlUp).Offset(1).Address .Range(MyRange).Value = Target.Value Application.Goto .Range(MyRange) End With End Sub

  • オートフィルタで未入力(空白)を無視した抽出法

    いつもお世話になっております。 現在第一条件から第三条件までの入力フォームを作成し、その条件に基づいたオートフィルタを作成中なのですが、 第二条件以下に未入力の場合のオートフィルタができなくて困っています。 これら未入力(空白)でもきちんと抽出できるオートフィルタを作るにはどうしたら良いですか? 以下に私が作成したものを転記いたしますので、どなたかご教示くださいますよう、お願いいたします。 With Worksheets("業種別検索") myCriteria1 = .Range("a2").Value myCriteria2 = .Range("b2").Value      myCriteria3 = .Range("c2").Value End With With Worksheets("元データ") If Worksheets("元データ").AutoFilterMode = False Then Range("A6:z6").Select Selection.AutoFilter Else Sheets("元データ").Select Selection.AutoFilter Range("A6:z6").Select Selection.AutoFilter End If .Range("A1").CurrentRegion.AutoFilter 17, myCriteria1, xlAnd .Range("A1").CurrentRegion.AutoFilter 18, myCriteria2, xlAnd .Range("A1").CurrentRegion.AutoFilter 19, myCriteria3, xlAnd End With

専門家に質問してみよう