- ベストアンサー
エクセルでの選択範囲の追加について。
エクセルでの選択範囲の追加について。 エクセル使用中にマウスの左ボタンでドラッグしながら セルを選択する際に、 Ctrlキーを押しながらやるとどんどん追加していくことができます。 この逆に、選択範囲をマイナスしていく方法はありますか? まとめて貼り付けとか、まとめて書式変更などで セルを追加していく途中で間違ったセルを選択してしまって、 また初めから・・・ということがよくあります。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
下記に裏ワザとして載ってました。 http://officetanaka.net/excel/function/tips/tips22.htm でも結構面倒くさい操作なので、大量に選択した際のミスに 限定した方が良さそうです。 いろいろ検索しましたが、特効薬は無いみたいですね。。
その他の回答 (4)
- cj_mover
- ベストアンサー率76% (292/381)
1)ショートカットキー 「アクティブセルの移動」 下 Enter … 選択範囲内で下方向([オプション]で変更可)に移動する。 上 Shift + Enter … 選択範囲内で上方向([オプション]で変更可)に移動する 右 Tab … 選択範囲内で右方向(単列なら下)に移動する。 左 Shift + Tab … 選択範囲内で左方向(単列なら上)に移動する。 隅 Ctrl + . (ピリオド) … アクティブ領域の四隅を右回りで移動する。 隣 Ctrl + Alt + → … 選択範囲内の右にある領域へ移動する。 隣 Ctrl + Alt + ← … 選択範囲内の左にある領域へ移動する。 「アクティブ領域のリサイズ)」 Shift + 方向キー … アクティブ領域を指定した方向に(1行または1列単位で)拡張(縮小)する。 Ctrl + Shift + 方向キー … データが連続した範囲で指定した方向の端までアクティブ領域を拡張(縮小)する。 手作業での修正なら、これ位↑使えれば十分だと思います。 #ショートカットキーはあちこちで紹介されていますから、Webで一覧を手に入れてExcelシートで管理するのがお奨めです。 リサイズは出来る、他の領域内に隠すことも出来る、消す事は出来ない。 2)InputBox から、任意のセル範囲(最大4領域)を指定して、選択中のセル範囲から”マイナス”するマクロ。 「選択範囲を部分解除するマクロ」を簡略化したものに、コピー待機状態を損なわず実行できるようオプションを加えました。 【コピー元のセル範囲を取得する関数】を別途用意すれば、コピー待機状態を損なわず実行できるようになります。 紹介例。 【Excel VBAにて、セルのコピー範囲を知る方法を教えて下さい。(選択範囲ではありません)】 http://oshiete1.goo.ne.jp/qa4535701.html にて、回答No.1、2の回答者さんが Win32APIを使った方法を紹介されています。 【K窓 Excel技 <Excel Tips>】 http://homepage2.nifty.com/kmado/kvba.htm の中から 『E03M121 切り取り又はコピーされたセル範囲を取得する』 にある、kGetRangeCopyCut()関数で試してみてください。 自作は間に合わなかったので私も使わせて戴きましたが、ここでは紹介という形を取らせていただきます。 この関数を(同じプロジェクトの 別モジュール!!に)貼り付けたら、 下の記述から、オプションと書いてある行のコメントブロックを外せば、コピーモードにも対応します。 お試し用に、ショートカットキー(Alt + a)から動作させるように書いています。 (「↓ お試し用」から「↑ お試し用」までの9行は無くても使えます。) XL2003以前のVer.での確認で、ツールバーのボタンに直に登録する方法でも動作しました。 Visual Basic Editor 画面からの実行も問題ないようです。 問題は、特定のダイアログやコントロールを表示させると、コピー待機状態がキャンセルされる、ということです。 例えば、Application.InputBox メソッド を InputBox()関数に代え(範囲を文字列で指定することになりますが)て、 それに合わせて書き直せば、コピーモードの問題からは開放されます。 色々なアプローチがあるでしょうから、応用はお任せします。 ' XL2000、2003にて動作確認済み。 ' 新規の標準モジュール に 次々行以下を(全文!! 過不足なく!! 排他!!) コピペ して ' Auto_Openを実行してショートカット(Alt + a)を設定。 ' ' ============ここから=========== Option Explicit Option Private Module DefStr S: DefLng N Const S_SHORTCUT = "%a" ' ↓ お試し用 ' ' =============================== Sub auto_open() Application.OnKey S_SHORTCUT, "cjCullAreas" End Sub ' ' =============================== Sub auto_close() Application.OnKey S_SHORTCUT, "" End Sub ' ↑ お試し用 ' ' =============================== ' ' 選択範囲の部分解除 ... Alt + a で動作 Sub cjCullAreas() Const S_TTL = "選択セル範囲の部分解除" Dim vCull Dim rBuf As Range, r As Range, rPos As Range, rRet As Range Dim sTmp, sRef Dim nCCpM, nWR, nWC Dim nTop, nLeft, nBottom, nRight If Not TypeName(Selection) Like "Range" Then Exit Sub With Selection If .Count = 1 Then MsgBox "単一セルには使えません", 64, S_TTL Exit Sub End If sTmp = .Areas(.Areas.Count).Address End With With Application nCCpM = .CutCopyMode If nCCpM = xlCopy Then ' Set rBuf = kGetRangeCopyCut() ' オプション If rBuf Is Nothing Then nCCpM = 0 If MsgBox("このまま実行するとコピー元範囲を見失います。続行しますか?", 33, S_TTL) _ = vbCancel Then Exit Sub ' End If End If Do vCull = VBA.Array(.InputBox("選択解除するセル(最大4領域)を選択して OK" _ , S_TTL, sTmp, , , , , 8)) If Not TypeName(vCull(0)) Like "Range" Then MsgBox "キャンセルされました", 64, S_TTL Exit Sub ElseIf vCull(0).Areas.Count > 4 Then MsgBox "解除指定できるのは 一度に 4つ 迄の領域", 48, S_TTL Else Exit Do End If Loop nWR = .Rows.Count: nWC = .Columns.Count For Each r In vCull(0).Areas With r nTop = .Row: nLeft = .Column With .Cells(.Cells.Count) nBottom = .Row: nRight = .Column End With End With sTmp = Empty If nTop > 1 Then sTmp = sTmp & ",R1:R" & nTop - 1 If nLeft > 1 Then sTmp = sTmp & ",R" & nTop & "C1:R" & nWR & "C" & nLeft - 1 If nBottom < nWR Then sTmp = sTmp & ",R" & nBottom + 1 & "C" & nLeft & ":R" & nWR & "C" & nRight If nRight < nWC Then sTmp = sTmp & ",R" & nTop & "C" & nRight + 1 & ":R" & nWR & "C" & nWC If sTmp <> "" Then sTmp = Mid$(sTmp, 2) sTmp = .ConvertFormula(sTmp, xlR1C1, xlA1, xlRelative) sRef = sRef & " (" & sTmp & ")" End If Next r If sRef <> "" Then Set rPos = Range(Trim$(sRef)) If Not rPos Is Nothing Then Set rRet = .Intersect(Selection, rPos) End With ' ' <<< With Application ... If Not rRet Is Nothing Then If rRet.Areas.Count > 8192 Then MsgBox "実行後の領域数が 8192 を 超えてしまうので中止します", 48, S_TTL Else rRet.Select End If End If If nCCpM <> 0 Then rBuf.Copy ' Set rPos = Nothing: Set rRet = Nothing: Set rBuf = Nothing: vCull = Empty End Sub ' ' =============================== ' ' ============ここまで===========
- xls88
- ベストアンサー率56% (669/1189)
一旦名前を定義し、「名前の定義」ダイアログボックスの「参照範囲」で書き直せばどうでしょうか。 Excel:名前定義 http://homepage3.nifty.com/gakuyu/excel/name.html ★独自に開発した便利な方法を紹介します。 適当なセルに (1) = と入力 (2) 目的セルを選択(直接セル番地を入力でも可) (3) , を入力 (4) 手順(3)(4)を繰り返す =を入力したセルには =C5,E5:E6,G5,I5:I6,K5:K8,M5:M6 のようにセル番地が記録されます。 ≪途中で変更する場合≫ 手順(3)で、該当セルにはカラーリファレンスが表示されます。 カラーリファレンスを、ドラッグすれば拡大、縮小、移動が自在です。 セルに入力されているセル番地を、書き換え、削除しても変更可能です。 F2キーで編集モードにしてから、書き換え、削除を行ってください。 (5) 確定後(1)のセルを選択 (6) Shift+Ctrl+[ とキー操作してセル範囲を選択
- cafe_au_lait
- ベストアンサー率51% (143/276)
きちんと検証していないので常にうまくいく自信はないのですが、下記のコードを実行してみてください。 Sub RemoveLastArea() Dim oldRng As Range Dim newRng As Range Dim n As Long If TypeName(Selection) <> "Range" Then Exit Sub Set oldRng = Selection Set newRng = oldRng.Areas(1) For n = 2 To oldRng.Areas.Count - 1 Set newRng = Union(newRng, oldRng.Areas(n)) Next n newRng.Select Set oldRng = Nothing Set newRng = Nothing End Sub
- keithin
- ベストアンサー率66% (5278/7941)
たとえば。 コントロールクリックで「A1:A3」「C1:C3」「E1:E3」の3つのエリアを飛び飛びに選択します。 これを「A1:A3」と「C1:C3」,そしてもう一度「A1:A3」を重ねて選択のようにして,見かけ上2箇所選ばれているようで実は重ねて3箇所選択されている,といった所までは出来ます。 でも選択範囲の数を2つに減らすことは出来ません。 #選択範囲の移動/縮小は「やれば出来る」ので色々手管は紹介されますが,現実問題として大概の場合,やり直した方が簡単です。