おはようございます
マウス関連の選択範囲で使うVBAを調べました
左上は Selection(1)
右下は Selection(Selection.Count)
行数は Rows.Count
列数は Columns.Count
ここから先はVBAでどう書いたらいいでしょうか
対象の範囲はA1:C10
↓
マウスで複数セル範囲が選択された
↓
その範囲がA1:C10に複数含まれる
または
範囲がすべてA1からC10に含まれる
↓
ということは、早い話が、A1:C10内で複数セルが選択されている
Selection(Selection.Count)が2以上
↓
Selection(1)をSelect
と、ここまで考えました
No.9ベストアンサー
- 回答日時:
考え方を逆にしてみました。
この方がスッキリします。-----------------------------------------------------------------------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim 行 As Long
Dim 列 As Long
For 行 = 1 To 10
For 列 = 1 To 3
If Not Intersect(Target, Cells(行, 列)) Is Nothing Then
Application.EnableEvents = False
Cells(行, 列).Select
Application.EnableEvents = True
Exit Sub
End If
Next
Next
End Sub
-----------------------------------------------------------------------------------------
なんども真剣に対応していただき感謝します
ちょっとシートの配列を変えたりして手間取りました
今日は休みなので気合を入れ直しています
For Nextが処理の前に書いてあったので驚きです
範囲指定をFor Nextで回せるんですね、初めて知りました
こういう技はネットでは検索しても出てこないので大変貴重です
ありがとうございます
しかも、マウス操作で出てくるコードを使っていません
新発見の連続です。ありがとうございます
入門レベルの私にも理解できるコードで難しい処理ができていますので
大変勉強になります
シートに組み込んで動作確認できました
ありがとうございました
No.10
- 回答日時:
余計なことかもしれませんが以下の2つを作っておくと、修正作業に一時的に動作を止めたり再開で来たりしますので便利ですよ。
-----------------------------------------------------------------------------------------
Sub イベント割込み再開()
Application.EnableEvents = True
End Sub
-----------------------------------------------------------------------------------------
Sub イベント割込み停止()
Application.EnableEvents = False
End Sub
-----------------------------------------------------------------------------------------
※ 修正作業を終えたら「イベント割込み再開」を行うのを忘れないように!(動作しなかったら「イベント割込み再開」マクロを実行するように言っておいても良いかもしれません)
おはようございます
昨日は大変お世話になりました
Application.EnableEvents = TrueやFalseはマクロで使っています
ここgooで「書き込みの前後に入れろ」と教えていただきました
Application.EnableEvents = False
'マクロで書き込む前に上の1行書く
For Each r In Target
'指定範囲中の入力されたセル(target)を探し回る?
If Target.Count = 1 Then
処理
else
処理
End If
Next r
'マクロで書き込みが終わったら以下の1行書く
Application.EnableEvents = True
この一行だけをマクロで使うなんて考えもしませんでした
式が間違って時々無限ループになってしまうので
その時はタスクマネジャーを起動してエクセルを終了しています
次エクセルが止まらなくなったら使ってみます
ありがとうございます
No.7
- 回答日時:
おはようございます。
横から失礼します。こんな感じでどうでしょう。確認ですが「左上」の定義は「一番左の列の一番上のセル」で合ってますか?それとも「一番上の行の一番左のセル」ですか?提示したマクロは前者として実装したつもりですが、もし後者なら100riさんの方で修正してみて下さい。
それから、左上をSelectしてしまうと選択が解除されてしまい、見た目が面白くないので、左上をActivateにしています(Activeセルが移るだけです)。
ちなみに、これって何に応用されるのでしょうか?利用シーンが想像できなかったので、できれば教えて下さい。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim sr As Range
Dim r As Range
Dim tr As Range
Set sr = Intersect(Target, Range("A1:C10"))
If sr Is Nothing Then Exit Sub
If sr.Count <= 1 Then Exit Sub
Set tr = sr(1)
For Each r In sr.Areas
If r(1).Address < tr.Address Then
Set tr = r(1)
End If
Next r
tr.Activate
End Sub
ママチャリさん、こんばんは
お礼が遅くなりました
前にもselect caseの使用を教えていただきました
お陰様でIFばっかりのマクロが見やすく成りました
今は、アドバイスいただいたように、「コードを短く」よりも
「後で分かりやすく」を心がけております
教えていただいたマクロは私の想定していたスタイルで大変参考になります
Is Nothing 大変勉強になりました
上級者の方が頻繁に使うSetとFor Eachがまだ私は使いこなせません
Setは分かりますがFor Eachがどうやってぐるぐる回っているのか
イメージがつかめませんので慣れないといけません
「左上」の定義の件ですが、すいません、私にはどちらも同じことの
ように思えてしまいます。
理由は、私には違いが分からないだけで単に無知だからです
何に応用するかですが
列をその時の必要(見たい・今は見なくていいから非表示にして、表を画面に収めたい)などの理由で表示・非表示切替できるようにしています
その時にロックしてない列をまたいで範囲選択してDeleteしないように
するためです(うまく説明できていません)
No.6
- 回答日時:
こんにちは!
横からお邪魔します。
>対象の範囲はA1:C10
というコトは・・・
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("A1:C10")) Is Nothing Then
Target(1).Select
End If
End Sub
こんな感じをお望みなのでしょうか?m(_ _)m
こんにちは
前にも何度かお世話になっています
仕事の合間にお礼させていただきます
「ちょっと待ってください、いい加減にしてください」と言いたくなるほど
あまりに簡素で力抜けしました。
本当にまいりました。
要するにあれですね。
「指定範囲に引っかかったら(どういう範囲を選択しても)Target(1).Select」
なんですね
今までの苦労は何だったんでしょうか
教えていただく私が言うのは大変大変失礼ですが、「お見事」の一言しかありません
早速やって見ましたが、どういう範囲選択であっても、指定範囲に選択範囲が
一部でも入っていれば見事に目的を達成しております
セルを一個選択したらちゃんと選択できます
ありがとうございました
ああ、見事過ぎて疲れがどっと出ました
笑っちゃいます
No.5
- 回答日時:
目的がはっきりしませんが、シートモジュールに次のようなコードを書くと、似たようなことになります。
例:Sheet1のモジュールに
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Selection(1).Select
End Sub
こんにちは
午前の休憩時間中に気づきましたが時間が足りませんでした
教えていただいたことに範囲指定を追加したら、ちゃんと狙った動きをしてくれました
ありがとうございました
私は途中を難しく考えすぎていました
判断→Selection(1).Select を考えて、判断でつまずきました
よくよく考えたら、「セルを一個しか選択させない」のですから
範囲指定→判断不要→Selection(1).Select だけで良かったんですね
そういう発想ができませんでした
お陰様で簡単なマクロで済みました
ありがとうございました
No.4
- 回答日時:
A1:C10の範囲では複数のセルを選択出来ないようにするだけでしたら以下のようなもので良いと思います。
-----------------------------------------------------------------------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Row <= 10 Then
If Target.Column <= 3 Then
If Target.Count >= 2 Then
Application.EnableEvents = False
If Target.Areas.Count = 1 Then
Target(1).Select
Else
If Target.Areas(1)(1).Row = Target.Areas(2)(1).Row Then
If Target.Areas(1).Column < Target.Areas(2)(1).Column Then
Target.Areas(1)(1).Select
Else
Target.Areas(2)(1).Select
End If
Else
If Target.Areas(1)(1).Row < Target.Areas(2)(1).Row Then
Target.Areas(1)(1).Select
Else
Target.Areas(2)(1).Select
End If
End If
End If
Application.EnableEvents = True
End If
End If
End If
End Sub
-----------------------------------------------------------------------------------------
※ 後から[Ctrl]キーを押しながら範囲外が選択された場合は、範囲内の処理が優先されます。
No.3
- 回答日時:
「範囲をA1:C10に絞る」ですが、この範囲外が後から選択された場合はどうするのでしょうか?
また範囲内と外を跨いだ選択が有った場合はどうするのでしょうか?例えば「B5」セルが選択された状態で [Ctrl]キーを押しながら「B2:D4」セルを選択した場合など…
指摘していただいてありがとうございます
「範囲をA1:C10に絞る」ですが、この範囲外が後から選択された場合はどうするのでしょうか?
範囲外はマクロ完成後にロックする予定でいます
質問しておきながら無責任ですが、対処法をあまり自分でもよく分かっていません
マクロはどんなセル選択にも対応しようとすると頭が痛くなりますね
だから、職場に数多くあるエクセルはマクロで自動化されてないのだと思います
なのに、マクロを知らない私がちょっとケチをつけたばっかりに請け負うことに
なってしまって後悔してます
しかし、うまく解決できるとマクロは面白いのでついつい手を出してしまいます
No.1
- 回答日時:
確認ですが、2つ以上のセルを選択したら1番右上のみの選択に変更する。
つまり複数セルを選択出来ないようにすると言う事でしょうか?それでしたら-----------------------------------------------------------------------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count >= 2 Then
Application.EnableEvents = False
Target(1).Select
Application.EnableEvents = True
End If
End Sub
-----------------------------------------------------------------------------------------
おはようございます
こんなに速く回答もらえてうれしいです
私の文章がごちゃごちゃしててわかりにくいのですが
範囲をA1:C10に絞るのはどう書いたらいいでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) データのある範囲を選択するVBAについて 2 2022/09/03 00:20
- Excel(エクセル) マクロ セルの選択 5 2022/08/12 22:47
- Excel(エクセル) VBA オリジナル関数で選択セルの合計を作成したい 3 2023/03/19 19:45
- Excel(エクセル) エクセルVBA 複数行にまたがっている選択を判定するには 2 2023/05/21 21:54
- その他(Microsoft Office) 選択行の列範囲に二重線を引く 3 2022/06/08 12:21
- Excel(エクセル) 余計なお世話的な「入力規則」?対策は? 2 2023/01/14 12:39
- その他(Microsoft Office) エクセルに関しての質問 2 2022/06/25 18:40
- Excel(エクセル) Excel VBAプルダウンの値を変えながら2枚ずつ印刷する方法? 4 2022/05/27 13:04
- Visual Basic(VBA) 昨日、質問した件『VBA にて、条件付き書式で背景色を設定しているセルの範囲で、背景色付きのセルをカ 4 2022/04/07 14:39
- Excel(エクセル) エクセルの掛け算 3 2022/12/13 14:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで連続データから、数...
-
エクセルの画面で十字マークが...
-
excelで、スクロールをすると限...
-
セルをクリックすると付箋のよ...
-
エクセルでハイパーリンクのU...
-
EXCEL アルファベットと数字の...
-
エクセル 数値を全て「1」にす...
-
複数のセルの入力内容を一度に...
-
エクセルでカーソルが四方に矢...
-
エクセルVBAでセル範囲のデータ...
-
Excelで表のデータを並び替えた...
-
エクセルで1つおきに列を削除...
-
ピポットテーブルエラー解決方法
-
Excel選択を繰り返すとセルの色...
-
エクセルで0を除いて昇順に並...
-
エクセルの行数の制限
-
エクセル2016の特定の文字列を...
-
エクセルVBAリストボックスに表...
-
Excelの複数セル選択は、なぜ一...
-
初旬/中旬/下旬の並べ替え
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの画面で十字マークが...
-
excelで、スクロールをすると限...
-
エクセルで連続データから、数...
-
セルをクリックすると付箋のよ...
-
複数のセルの入力内容を一度に...
-
EXCEL アルファベットと数字の...
-
エクセルでハイパーリンクのU...
-
エクセル 数値を全て「1」にす...
-
Excelで表のデータを並び替えた...
-
エクセル 画面上の行数を調節...
-
Excel選択を繰り返すとセルの色...
-
エクセルでカーソルが四方に矢...
-
Shift押しながら、矢印ボタンで...
-
エクセルVBAでセル範囲のデータ...
-
エクセルで0を除いて昇順に並...
-
Excelで急に動かなくなる
-
エクセルの複数セルに同時に同...
-
フィルタを解除した後の表示位置
-
ピポットテーブルエラー解決方法
-
エクセルで「1~15」の乱数...
おすすめ情報
すみません
お礼は昼休みになります
これはVBAでは大変ですね
1列で2行以上をマウスで範囲選択されるケースもあります
使う人は想定外の操作をするので、VBAは完ぺきにしようと思うと終わりがないです