| 
    
     |  | ▼やまP さん: >やりたいと思っている処理は以下の通りです。
 >1.現在セル(C2:E4)を選択しているとする。(選択の中心はC2)
 >2.ショートカットキー(Alt+4)を押すと、2〜4行全体が削除される。
 >3.その後、選択セルがC2に戻る。
 >4.Undo(Ctrl+Zなど)を行えばきちんと前の状態に戻るようにする。
 >
 >この処理のために以下の準備を行いました。
 >**********************************************************************
 >VBAコード:
 >
 >Sub 選択している行全体を削除()
 >' Keyboard Shortcut: Alt+E+4
 >
 >  Dim nowColumn As Variant '今選択の中心にあるセルの列
 >  Dim seru As Range '選択しているセルの範囲
 >  Dim min_flag As Boolean '選択セルの最小行を判定するフラグ
 >  Dim rowMin As Variant '選択セルの最小行
 >  Dim rowMax As Variant '選択セルの最大行
 >  Dim columnMin As Variant '選択セルの最小列
 >  Dim columnMax As Variant '選択セルの最大列
 >
 >  nowColumn = Selection.Column '選択の中心にあるセルの列を代入
 >  min_flag = True
 >
 >  '選択している範囲の中で最小行・列、最大行・列を求める
 >  For Each seru In Selection
 >    If (min_flag = True) Then
 >      rowMin = seru.Row
 >      columnMin = seru.Column
 >      min_flag = False
 >    End If
 >    rowMax = seru.Row
 >    columnMax = seru.Column
 >  Next
 >
 >  '選択範囲の行全体を選択する
 >  Rows(rowMin & ":" & rowMax).Select
 >
 >  'Alt+E+Dのコマンドを送る(これで行の削除を実行)
 >  Application.SendKeys ("%ED")
 >
 >  '最初に選択していたセルを選択する
 >  Range(Cells(rowMin, columnMin), Cells(rowMax, columnMax)).Select
 >End Sub
 >
 >メニューのユーザ設定:
 >・メニューの「編集」に、「選択している行全体を削除(4)」のメニューをカスタマイズ(マクロ)で追加。
 >・そこに、上記のマクロを設定
 >
 >**********************************************************************
 >以上のことにより、やりたいと思っていることが実行されると思ったのですが、なぜか「行全体の削除」ではなく、「選択されているセルの削除」が実行されてしまいます。
 >ちなみに、最後の、
 >  >'最初に選択していたセルを選択する
 >  >Range(Cells(rowMin, columnMin), Cells(rowMax, columnMax)).Select
 >を除けばうまく実行されます。
 >
 >恐らく、Application.Sendkeysで、コマンドが実行されるより先に最後の
 >  >'最初に選択していたセルを選択する
 >  >Range(Cells(rowMin, columnMin), Cells(rowMax, columnMax)).Select
 >が実行されてしまっているのかと思われます。
 >
 >Sleepでコマンドの実行を待つ、なども考えましたがうまくいきません。
 >
 >※直接マクロで処理を行わず、Application.Sendkeysでコマンドを送っているのは、Undoを可能にするためです。
 >
 >**********************************************************************
 >非常に分かりにくい質問で恐縮ですが、どなたか良い対処法を思いつく方は教えてください。お願いします。
 
 >皆様
 皆様のご意見を参考にして、試してみたところ、以下のモジュールで全てうまくいきました!
 
 Sub 選択している行全体を削除()
 Application.SendKeys ("+ ")
 
 Application.SendKeys ("%ED")
 
 Application.SendKeys ("{Up}{Down}")
 End Sub
 
 こんなに単純にできるとは…。
 複雑な質問でご迷惑をおかけしましたが、皆様のご回答がヒントになりました。
 どうもありがとうございました!
 
 |  |