• ベストアンサー

エクセルでの選択範囲の追加について。

エクセルでの選択範囲の追加について。 エクセル使用中にマウスの左ボタンでドラッグしながら セルを選択する際に、 Ctrlキーを押しながらやるとどんどん追加していくことができます。 この逆に、選択範囲をマイナスしていく方法はありますか? まとめて貼り付けとか、まとめて書式変更などで セルを追加していく途中で間違ったセルを選択してしまって、 また初めから・・・ということがよくあります。

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

  • ベストアンサー
  • tag1701
  • ベストアンサー率54% (67/123)
回答No.1

下記に裏ワザとして載ってました。 http://officetanaka.net/excel/function/tips/tips22.htm でも結構面倒くさい操作なので、大量に選択した際のミスに 限定した方が良さそうです。 いろいろ検索しましたが、特効薬は無いみたいですね。。

その他の回答 (4)

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.5

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)
回答No.4

一旦名前を定義し、「名前の定義」ダイアログボックスの「参照範囲」で書き直せばどうでしょうか。 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+[ とキー操作してセル範囲を選択

回答No.3

きちんと検証していないので常にうまくいく自信はないのですが、下記のコードを実行してみてください。 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)
回答No.2

たとえば。 コントロールクリックで「A1:A3」「C1:C3」「E1:E3」の3つのエリアを飛び飛びに選択します。 これを「A1:A3」と「C1:C3」,そしてもう一度「A1:A3」を重ねて選択のようにして,見かけ上2箇所選ばれているようで実は重ねて3箇所選択されている,といった所までは出来ます。 でも選択範囲の数を2つに減らすことは出来ません。 #選択範囲の移動/縮小は「やれば出来る」ので色々手管は紹介されますが,現実問題として大概の場合,やり直した方が簡単です。

関連するQ&A