• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel VBA で1時的に右クリックを使いたい)

Excel VBAで1時的に右クリックを使いたい

unokwaveの回答

  • unokwave
  • ベストアンサー率58% (966/1654)
回答No.4

モジュールの関数宣言より前に Public Const SHIFT_KEY = &H10 'Shift key code Declare Function GetKeyState Lib "USER32" (ByVal vKey As Long) As Integer と宣言しておいて、関数の先頭で If GetKeyState(SHIFT_KEY) = 0 Then Exit Sub を入れておくと、Shiftキーを押して右クリックした場合のみそのマクロを機能させられます。

関連するQ&A

  • シングルクリックでフォームが表示されない

    windowsXP  Excel2000 でマクロを作成している超初心者です。 あるサイトの暦で日付を入力するマクロですが、1枚のシートに 1)と 2)を併記して実験したところ正常に表示できました。 2)をシングルクリックで表示したいのですができません。なぜでしょうか? 2)はいかにも稚拙です。もっと整理したいのですが方法が分かりません。以上2点よろしくご指導ください。 -------------------------------------------------------------------- 1)シングルクリックで UserForm1を正常に起動できました。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'シングルクリックで表示 Cancel = True 'プロシージャ終了後に表示されるショートカットメニューの非表示 If Target.Row > 22 And Target.Column > 2 And Target.Column < 4 Then UserForm1.Show End If If Target.Row > 22 And Target.Column > 13 And Target.Column < 15 Then UserForm1.Show End If End Sub ------------------------------------------------------------------------- 2)ダブルクリックでしか正常に表示されません。 'Private Sub Worksheet_SelectionChange(ByVal Target As Range)’ 起動しない Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) '起動した Cancel = True 'プロシージャ終了後に表示されるショートカットメニューの非表示 If Target.Row > 23 And Target.Column > 1 And Target.Column < 3 Then Call ShowCalendarFromRange2(Target) End If If Target.Row > 23 And Target.Column > 12 And Target.Column < 14 Then Call ShowCalendarFromRange2(Target) End If If Target.Row > 12 And Target.Row < 21 And Target.Column > 12 And Target.Column < 14 Then Call ShowCalendarFromRange2(Target) End If If Target.Row > 12 And Target.Row < 21 And Target.Column > 14 And Target.Column < 16 Then Call ShowCalendarFromRange2(Target) End If If Target.Row > 12 And Target.Row < 21 And Target.Column > 16 And Target.Column < 18 Then Call ShowCalendarFromRange2(Target) End If If Target.Row > 12 And Target.Row < 21 And Target.Column > 18 And Target.Column < 20 Then Call ShowCalendarFromRange2(Target) End If End Sub ----------------------------------------------------------------------- 3)'これがサイトにあった例で、これを元に上のスクリプトを作りました。 'Private Sub Worksheet_SelectionChange(ByVal Target As Range) ' 複数セル選択時は無視 ' If Target.Count <> 1 Then Exit Sub ' A列以外は無視(今回サンプルの例) ' If Target.Column <> 1 Then Exit Sub ' カレンダーフォームを起動する ' Call ShowCalendarFromRange2(Target) 'End Sub ---------------------------------------------------------------

  • Excel VBAについて

    Excel VBAにおいて、Sheetの選択した行によって値を表示するUserFormを変更したいと思っています。 現在以下のようにしたのですが、実行すると「SubまたはFunctionが定義されていません」というエラーが表示されます。 「Controls("UserForm" & x).Label1.Caption =」のところをどのようにしたらよいのでしょうか。 Private Sub CommandButton1_Click()   If ActiveCell.Row = 5 Then     UserForm1.Show     x = 1   ElseIf ActiveCell.Row = 6 Then     UserForm2.Show     x = 2   End If End Sub Private Sub Worksheet_Selection Change(Byval Target As Range)   Controls("UserForm" & x).Label1.Caption = ・・・

  • エクセルコードについて

    エクセルコードについて Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)   If Target.Row >= 1 And Target.Row <= 10 And Target.Column >= 1 And Target.Column <= 10 Then     If Target.Value = "○" Then       Target.Value = ""     Else       Target.Value = "○"     End If     Cancel = True   End If End Sub ではセルA1~J10ですが、これをA1~A10などに変更するのにはどのようにすればよろしいでしょうか。

  • エクセルVBAでクリックしたセルのみ書式を変えたいのです。

    Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) If Target.Row <= 11 And Target.Column <= 11 Then With Selection .Interior.ColorIndex = 3 .Font.ColorIndex = 2 .Font.Bold = True End With End If End Sub これで出来るのですが、問題は別のセルに移動しても書式は変ったままなのです。(当り前ですが) 書式を変えるのはあくまで選択されている間だけにしたいのです。 どのようにすればよいのでしょうか? エクセル97です。

  • セルの内容更新時に実行される処理ができない

    以下のように関数を設定し、実行してみたのですがCall CommonModule.testの部分で 実行時エラー '424': オブジェクトが必要です。 と表示され関数が実行されません。 初心者なので知識が浅く、初歩的なミスかもしれませんがご教示いただければ幸いです。 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal target As Range) If target.Count = 1 Then Dim column As Integer Dim row As Integer column = target.column row = target.row If row >= 3 Then If ((column - 3) Mod 5) = 2 And column > 3 Then Call CommonModule.test 'エラー '424' オブジェクトが必要です。 End If End If End If End Sub Function test() MsgBox "test" End Function

  • Excel セルをクリックするだけで入力(エクセル2003)

    http://questionbox.jp.msn.com/qa915096.html からの転載で申し訳ありません。 この中で、jindonさまの方法で、2つの文字の入れ替えはできました。 ------------------------------------------------ Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) With Target If .Row=1 And .Column=1 Then If .Value = "○" Then .Value = "" Else .Value = "○" End If End If End With End Sub ------------------------------------------------ そこで、例えば○△×のように、順番に3つの文字を入れ替えるにはどう記述すればよいでしょうか? よろしくお願いいたします。

  • エクセル

    何度もすみません 追加質問になります Private Sub Worksheet_SelectionChange(ByVal Target As Range) If (Intersect(Target, Range("I8:I68")) Is Nothing And _ Intersect(Target, Range("L9:Q69,S9:U69,W9:W69,Y9:AB69")) Is Nothing) Or _ (Target.Row Mod 2 = 0 And Target.Column <> Columns("I").Column) Then Else UF現金.Show End If If (Intersect(Target, Range("J8:J68")) Is Nothing And _ Intersect(Target, Range("L8:Q68,S8:U68,W8:W68,Y8:AB68")) Is Nothing) Or _ (Target.Row Mod 2 = 0 And Target.Column <> Columns("J").Column) Then Else UF預金.Show End If End Sub 最初の範囲でUF現金が開き奇数番号にUF預金を開くようにしたいのですが上の算式では思うように開きません どこが違ってますか?

  • エクセルVBAについて

    エクセルVBAについて 下ような、最初に選択したセルに、次に選択したセルをコピーするマクロを使用しています。 Dim Frstcell As Range Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.MergeCells = False And Target.Count > 1 Then Exit Sub On Error Resume Next 'エラーを無視 If Target.Column >= 5 And Target.Column <= 35 Then 'E:AIコピー先 Set Frstcell = Target.Cells(1) ElseIf Target.Column >= 45 And Target.Column <= 46 Then 'AS:ATコピー元 If Target.Cells(1).Value = "" Then Exit Sub Target.Copy Frstcell.MergeArea End If On Error GoTo 0 'エラートラップ終了 End Sub この場合、コピー元の枠線の書式も、コピー先にコピーされてしまうのですが、 書式なしでコピーするにはどうしたらよいでしょうか? よい方法がありましたら、よろしくお願いいたします。

  • VBAエラー「スタック領域が不足しています」

    C2とD2のセルに英文字を入力した時,先頭文字を大文字にするVBAを組んだのですが,いざ実行すると「スタック領域が不足しています」と出てしまいます。以下にコードを示します。 'Sheet1 Option Explicit Private Sub Worksheet_Change(ByVal Target As Range)   If Target.Row = 2 And Target.Column = 3 Then     Range("C2").Value = StrConv(Range("C2").Value, vbProperCase)   End If   If Target.Row = 2 And Target.Column = 4 Then     Range("D2").Value = StrConv(Range("D2").Value, vbProperCase)   End If End Sub なぜこのようなエラーが出るのでしょうか。考えれば考えるほど合っているように思えて仕方なくなったので,ミスがあればご指摘をおねがいします。

  • エクセル2003でダブルクリック処理でエラーをしてしまう

    エクセルのシートAからZまであります 一部計算式が入っているのデーター処理が終了後に ダブルクリックでコピー&値の貼り付けで式をなくしていますが 列の一部とフィルターをかけると処理ができずにエラーをしてしまい 対処方法が分かりません 初心者でエラーの意味すら分からないのですが選択した領域と 貼り付ける領域が違うようなのです どこを直せばよいのか教えて下さい。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean) Dim RangeName As String RangeName = Target.Address RangeName = Mid(RangeName, 2, 1) If RangeName = "Z" And Target = "" Then Target = "OK" Range(Cells(Target.Row, 1), Cells(Target.Row, 27)).Copy ActiveWindow.ScrollColumn = 4 ActiveWindow.ScrollColumn = 3 ActiveWindow.ScrollColumn = 2 ActiveWindow.ScrollColumn = 1 Range(Cells(Target.Row, 1), Cells(Target.Row, 27)).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False ActiveWindow.ScrollColumn = 4 ActiveWindow.ScrollColumn = 3 ActiveWindow.ScrollColumn = 2 ActiveWindow.ScrollColumn = 1 End If End Sub 宜しくお願いします。