Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : Excel 2010)
シートごとに決まった処理をする
投稿日時: 20/07/13 20:31:58
投稿者: あべの

初めて質問いたします。失礼があったらすみません。
 
同じフォーマットの任意の数のシートがあるブックに、
例えば男女で別の処理をしたいです。
男女でやりたい処理はマクロを作成してあるのですが、
例えばすべてのシートのcells(3,2)に男女の別が書いてあるとして、
それを拾って男なら男用マクロ、女なら女用マクロを
すべてのシートで実行するにはどうしたらよいでしょうか。
 
お知恵をお貸しください。よろしくおねがいいたします。

回答
投稿日時: 20/07/14 09:01:01
投稿者: 半平太

Sub Sample()
    Dim Ws As Worksheet
 
    For Each Ws In Worksheets
        Select Case Ws.Cells(3, 2).Value
            Case "男"
                Call 男用P(Ws)
            Case "女"
                Call 女用P(Ws)
        End Select
    Next Ws
End Sub
 
Sub 男用P(WsToProc As Worksheet)
    With WsToProc
        '所定処理
        Debug.Print .Name & "は男処理"
    End With
End Sub
 
Sub 女用P(WsToProc As Worksheet)
    With WsToProc
        '所定処理
        Debug.Print .Name & "は女処理"
    End With
End Sub

投稿日時: 20/07/14 13:21:15
投稿者: あべの

半平太さま
 
ありがとうございます。早速やってみます。助かりました。
すみません、これ後半はなにやってるんですか?

回答
投稿日時: 20/07/14 15:03:57
投稿者: 半平太

>これ後半はなにやってるんですか?
 
男女に分けてどんな処理をするマクロなのか分からないので、
処理すべきシートオブジェクトの取得が必要となるケースを想定して、
引数の渡し方(のサンプル)を書いたまでです。

投稿日時: 20/07/14 16:58:50
投稿者: あべの

すみません、教えていただいたのに、できません涙
 
後半部分なんですか?とお聞きして
[/quote]男女に分けてどんな処理をするマクロなのか分からないので、
処理すべきシートオブジェクトの取得が必要となるケースを想定して、
引数の渡し方(のサンプル)を書いたまでです。
 
とお答えいただいたのに、自分が不勉強なものでさっぱりわからず、
前半部分だけで実行してみたのですが、
すると最初のシートしか処理が実行されず。
この時点で
[/quote] Call 男用P(Ws)
 ここの部分の「(Ws)」がわからず Call男用Pだけでやってみていたので、
次はつけてやってみたら、エラーメッセージがでて実行できず、
 
後半部分もやはり必要なのかと、
そのまま書いてみたら、今度はエラーは出ずでしたが、マクロも実行されずでした。

投稿日時: 20/07/14 17:01:51
投稿者: あべの

もしかして、対象をThisWorkbookにすればいいのか?

回答
投稿日時: 20/07/14 17:40:12
投稿者: 半平太

では、引数を渡さない方式で・・・(気が進まないですが、止むを得ないです)
 
以下でやってみてください。
 

Sub Sample()
    Dim Ws As Worksheet
    Dim ck
    
    For Each Ws In Worksheets
        ck = Ws.Cells(3, 2).Value

        If ck = "男" Or ck = "女" Then
            Ws.Activate
            
            If ck = "男" Then
                Call 男用のプログラム名
            Else
                Call 女用のプログラム名
            End If
        End If
    Next Ws
End Sub

回答
投稿日時: 20/07/14 17:43:31
投稿者: sk

半平太 さんの引用:
Debug.Print .Name & "は男処理"

あべの さんの引用:
後半部分もやはり必要なのかと、
そのまま書いてみたら、今度はエラーは出ずでしたが、マクロも実行されずでした。

VBE 上でイミディエイトウィンドウが開かれていない可能性。

投稿日時: 20/07/15 16:35:43
投稿者: あべの

半平太さま
 
できました!スマートじゃないけど、はじめのマクロで、Erchforの次にシートをアクティブにして処理するようにしたらできました!
大変助かりました。
引数についても勉強しはじめ、すこしずつわかってきたところです。ありがとうございました。