みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

条件A→MSGBOX 条件B→マクロ実行 

 
 顧客データーを並べ替えるマクロを組んでいます。
 顧客データは、10行目以降です。
 この10行目以降のセルがアクティブになっていなければ、「並べ替えマクロ」が実行されないようにしようと思っています。

 代わりに次のようなメッセージ
 「MsgBox "顧客情報、データ内のどこかをクリックして下さい", vbCritical」
 …と表示させようと思っています。

 以前、質問をしたところ、次のようなアドバイス(シートモジュール)を頂きました。
 
*************************************
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Row < 10 Then
MsgBox "顧客情報、データ内のどこかをクリックして下さい", vbCritical
End If
End Sub
*************************************

…これは、見事に機能したのですが、
これですと、マクロの実行不実行に関わらず、
「9行目より上のセルがクリックされたら」…無条件でメッセージボックスが表示されてしまいます。

そこで、
次のような分岐を作成したいのです。

【9行目以上のセルがアクティブな場合】
 →メッセージボックスが表示され、アクティブセルを10行目以降のどこかにするように促され、マクロ終わり。

【10行目以下のセルがアクティブ】
 →並べ替えマクロの実行

 並べ替えマクロはできていますが、
 この上の分岐の部分がまだできません。

 これについてのアドバイスをお願いできればと思います。

 どうぞ、よろしくお願いいたします。 

投稿日時 - 2012-08-18 12:40:58

QNo.7650212

困ってます

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

何をやってるのか理解してください。応用以前の問題です。


sub すでに出来上がったマクロ()

 if activecell.row < 10 then
  msgbox "エリア内を選択すること"
  exit sub
 end if

’ if その他の並べ替え実行条件が成立していなければ
’  msgbox "実行条件が成立していない"
’  exit sub
’ end if


 msgbox "並べ替え GO"

end sub

投稿日時 - 2012-08-18 14:32:49

お礼

 すみません。初心者なもので・・・。
 お陰様で、しかし、解決しました。
 ご回答、どうもありがとうございました! 

投稿日時 - 2012-08-20 14:37:02

ANo.4

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

ご相談は
>そこで、次のような分岐を作成したいのです。

という事ですが、お話の流れからいうと

private sub worksheet_change(byval Target as excel.range)

 if 並べ替え実行条件成立していなければ
 ’スルー
  exit sub
 end if

 if activecell.row < 10 then
  msgbox "エリア内を選択すること"
  exit sub
 end if

 msgbox "並べ替え GO"

end sub

という具合ではありませんか?

投稿日時 - 2012-08-18 13:53:21

お礼

ご回答、どうもありがとうございました!

投稿日時 - 2012-08-20 14:37:15

ANo.2

単に趣味の問題ですが、ワタシ的には

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 If activecell.Row < 10 Then
  MsgBox "顧客情報、データ内のどこかをクリックして下さい", vbCritical
  exit sub
 End If
 msgbox "並べ替え GO"
End Sub

とします。




フローで言えば
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 If Target.Row < 10 Then
  MsgBox "顧客情報、データ内のどこかをクリックして下さい", vbCritical
 else
  msgbox "並べ替え GO"
 End If
End Sub

でいいです。

投稿日時 - 2012-08-18 13:19:31

補足

 早速のご回答をありがとうございます。
 それで…すみません、一つ説明不足でした。
 
 以前、同様なシートモジュールを教えていただいたのですが、
 それを「すでに出来上がったマクロ」の上にはりつけたところ、駄目でした。
 
 「並べ替え」のマクロボタンを押してからの分岐にしたいので、
 できれば、シートモジュールではなく、
 
 すでに出来上がっている「並べ替えマクロ」の上部に 挿入する形のものを教えていただければありがたいです…。
 
 どうぞ、よろしくお願いいたします!
 
 

投稿日時 - 2012-08-18 13:55:18

お礼

ご回答、どうもありがとうございました!

投稿日時 - 2012-08-20 14:37:32

ANo.1

こんにちは!

>並べ替えマクロはできていますが・・・

というコトなので、

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Row < 10 Then
MsgBox "顧客情報、データ内のどこかをクリックして下さい", vbCritical
Exit Sub
Else
'並び替えのマクロ
End If
End Sub

といった感じではどうでしょうか?m(_ _)m

投稿日時 - 2012-08-18 13:11:24

補足

 早速のご回答をありがとうございます。
 それで…すみません、一つ説明不足でした。
 
 以前、同様なシートモジュールを教えていただいたのですが、
 それを「すでに出来上がったマクロ」の上にはりつけたところ、駄目でした。
 
 「並べ替え」のマクロボタンを押してからの分岐にしたいので、
 できれば、シートモジュールではなく、
 
 すでに出来上がっている「並べ替えマクロ」の上部に 挿入する形のものを教えていただければありがたいです…。
 
 どうぞ、よろしくお願いいたします!
 
 

投稿日時 - 2012-08-18 13:55:35

お礼

 どうも、ありがとうございました。
 お陰様で、解決いたしました!  

投稿日時 - 2012-08-20 14:37:56