Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


12751 / 13646 ツリー ←次へ | 前へ→

【8685】セルについて ひよこ 03/10/29(水) 12:07 質問
【8687】Re:セルについて よろずや 03/10/29(水) 12:36 回答
【8701】Re:セルについて ひよこ 03/10/29(水) 15:51 質問
【8781】Re:セルについて しのしの 03/11/3(月) 3:41 回答
【8788】Re:セルについて ちゃっぴ 03/11/3(月) 15:24 回答
【8782】Re:セルについて caution 03/11/3(月) 7:43 回答
【8783】Re:セルについて Hirofumi 03/11/3(月) 10:21 回答
【8856】Re:セルについて ひよこ 03/11/6(木) 11:30 お礼

【8685】セルについて
質問  ひよこ  - 03/10/29(水) 12:07 -

引用なし
パスワード
   VBAはじめたばかりの超ひよっこです。
誰か教えてください。

やりたいことは
『色をつけたいセルを選択し、ボタンを押したとき、
選択しているセルが、あるブロック内にあれば1のメッセージ、
そうでなければ2のメッセージを出す』
です。
今選択しているセルがあるブロック内にあれば・・という文が作れなくて
困っています。
簡単なことかもしれませんが、教えてください。よろしくお願いします。

【8687】Re:セルについて
回答  よろずや  - 03/10/29(水) 12:36 -

引用なし
パスワード
   >今選択しているセルがあるブロック内にあれば・・という文が作れなくて

ヘルプで Intersect メソッド をご覧ください。

【8701】Re:セルについて
質問  ひよこ  - 03/10/29(水) 15:51 -

引用なし
パスワード
   ありがとうございます!
Intersectを使って1、2のメッセージを出すことができました。
が、もうひとつ問題が・・

『色をつけたいセルを選択し、ボタンを押したとき、
選択しているセルが、あるブロック内にあれば1のメッセージ、
そうでなければ2のメッセージを出す』

選択しているセルがブロック内と外にかかっている場合、
2のメッセージを出したいのですがどうやって条件を作ればよいのでしょうか?
教えてください。
すみません。初歩的ですね。。

【8781】Re:セルについて
回答  しのしの  - 03/11/3(月) 3:41 -

引用なし
パスワード
   ひよこさん、こんにちは。

>選択しているセルがブロック内と外にかかっている場合、
>2のメッセージを出したいのですがどうやって条件を作ればよいのでしょうか?

選択しているセルの数より
Intersectして得られたセルの数が少ない場合内と外にかかっていると
言えるのではないでしょうか?

ただし、老婆心ですが、
選択しているのがセルであるかどうかのチェック
選択しているのが複数範囲である場合の処理
についても注意が必要であると思います。


勝手ですが、当面このサイトにお邪魔できませんので、
もし、続きのご質問があった場合、どなたか、お答えをよろしくお願いします。

【8782】Re:セルについて
回答  caution  - 03/11/3(月) 7:43 -

引用なし
パスワード
   >選択しているセルがブロック内と外にかかっている場合、
選択されているセルが、単数にせよ復数にせよ
For 〜 Nextなんか使って個々のセルについて判断してはいかがでしょう。

【8783】Re:セルについて
回答  Hirofumi E-MAIL  - 03/11/3(月) 10:21 -

引用なし
パスワード
   選択している範囲が1つの方形なら
こんなのでも善いかも?

Public Sub Test()

  Dim i As Long
  Dim lngScopeRowTop As Long
  Dim lngScopeRowEnd As Long
  Dim lngScopeColTop As Long
  Dim lngScopeColEnd As Long
  Dim rngTarget As Range
  Dim blnContain As Boolean
  
  '例としてブロックの範囲が"C5:F15"の場合の各Row、Column位置
  lngScopeRowTop = 5
  lngScopeRowEnd = 15
  lngScopeColTop = 3
  lngScopeColEnd = 6
  
  Set rngTarget = Selection
  With rngTarget
    If lngScopeRowTop <= .Row _
        And (.Row + .Rows.Count - 1) <= lngScopeRowEnd Then
      If lngScopeColTop <= .Column _
          And (.Column + .Columns.Count - 1) _
                      <= lngScopeColEnd Then
        blnContain = True
      End If
    End If
  End With
  Set rngTarget = Nothing
  
  If blnContain Then
    MsgBox "1のメッセージ"
  Else
    MsgBox "2のメッセージ"
  End If
  
End Sub

【8788】Re:セルについて
回答  ちゃっぴ  - 03/11/3(月) 15:24 -

引用なし
パスワード
   こんな感じでいかがでしょう?

<説明>
rngTarget1がrngTarget2の範囲に完全に含まれている場合、Intersectメソッドは
その共有部分を返すので、すなわちrngTarget1を返すはずです。
したがって完全に含まれる場合とそれ以外でやりたいことができるのでは?


Sub nannka()
  rngTarget1 As Range   '選択セル範囲(対象先)
  rngTarget2 As Range   '判定を行うセル範囲(対象元)
  
  Set rngTarget2 = Range(〜)   '選択セル範囲を指定
  Set rngTarget2 = Range(〜)   '対象元を指定
  
  '対象先が対象元に完全に含まれる場合
  If Intersect(rngTarget1, rngTarget2) = rngTarget1 Then
    MsgBox メッセージ1
  'それ以外
  Else
    MsgBox メッセージ2
  End If
  
End Sub

【8856】Re:セルについて
お礼  ひよこ  - 03/11/6(木) 11:30 -

引用なし
パスワード
   よろずやさん、しのしのさん、ちゃっぴさん、
cautionさん、Hirofumiさん
どうもありがとうございました。
Hirofumiさんの方法をとらせてもらいました。

しかし、、、
セルの選択はひとつの方形ではなくCtrlキーを使っていくつか
選択する場合もあります。(可能性は少ないケド)
もうちょっと悩んでみます。
またお世話になるかもしれません。
そのときはまたよろしくお願いします。

12751 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free