|
▼やま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
こんなに単純にできるとは…。
複雑な質問でご迷惑をおかけしましたが、皆様のご回答がヒントになりました。
どうもありがとうございました!
|
|