[[20190320084748]] 『同一シートで複数のマクロを実行』(luke) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『同一シートで複数のマクロを実行』(luke)

同一のシートで複数のマクロ

同じ特定の文字で条件を決めているからか、指定した範囲外もマクロが動いてしまいます。
そういった場合二つのマクロが干渉しないようにするにはどうすれば
いいのでしょうか。

よろしくお願いします。

< 使用 Excel:Excel2016、使用 OS:unknown >


説明が抽象的過ぎて説明に困ります。
特定の文字列が入力されているセルや行に対してのみ処理を行いたいという意味ならば
ルールさえ明確であれば可能なはずですが、このままでは回答できません。
(たかは) 2019/03/20(水) 09:05

たかはさんありがとうございます
昨日もここで教わったものなのですが。

Sub 非表示()
' 定休者非表示 Macro

    Dim r As Range
    Dim i As Long
    Cells.EntireRow.Hidden = False
    For i = 2 To Cells(Rows.Count, "B").End(xlUp).Row
        If Cells(i, "B").Value = "定休" Then
            If r Is Nothing Then
                Set r = Cells(i, "B").Resize(6).EntireRow
            Else
                 Set r = Union(r, Cells(i, "B").Resize(6).EntireRow)
            End If
        End If
    Next i
   r.EntireRow.Hidden = True
End Sub

このマクロと

    Sub ★定休非表示()

   Dim fCell As Range, starCell As Range, EndCell As Range
   Dim serchRange As Range

   Cells.EntireRow.Hidden = False
   Set EndCell = Cells(Rows.Count, 1).End(xlUp).Offset(1)
   EndCell.Value = "★"

   Set serchRange = Range(Cells(30, 1), Cells(Rows.Count, 1).End(xlUp))

   Set fCell = serchRange.Cells(1, 1)
   Set fCell = serchRange.Find("定休", fCell, xlValues, xlPart, xlByColumns, xlNext)
   If fCell Is Nothing Then Exit Sub
   Do
      Set starCell = serchRange.Find("★", fCell)
      Range(fCell.Offset, starCell.Offset(-1)).EntireRow.Hidden = True
      Set fCell = serchRange.Find("定休", fCell, xlValues, xlPart, xlByColumns, xlNext)
   Loop Until fCell Is Nothing
   EndCell.ClearContents

 End Sub

このマクロです!
(luke) 2019/03/20(水) 09:18


イメージは。。。

 こいつを
     |[A] |[B] |[C] 
 [1] |名前|出勤|時間
 [2] |A   |休み|9時 
 [3] |    |    |    
 [4] |    |    |    
 [5] |    |    |    
 [6] |    |    |    
 [7] |B   |定休|9時 
 [8] |    |    |    
 [9] |    |    |    
 [10]|    |    |    
 [11]|    |    |    
 [12]|C   |休み|9時 
 [13]|    |    |    
 [14]|    |    |    
 [15]|    |    |    
 [16]|    |    |    

こうなっていて

     |[A] |[B] |[C] 
 [1] |名前|出勤|時間
 [2] |A   |休み|9時 
 [3] |    |    |    
 [4] |    |    |    
 [5] |    |    |    
 [6] |    |    |    
 [12]|C   |休み|9時 
 [13]|    |    |    
 [14]|    |    |    
 [15]|    |    |    
 [16]|    |    |  
そこからしたの30行目から

★の定休から

★ 担当者1: 9:00〜20:30 休み

   11:00〜12:00 SC 
   13:00〜15:30 a君
   15:30〜17:00 bくん
   18:00〜20:00 Tくん
   20:00〜20:30 送迎
★ 担当者2:  定休
   15:30〜16:00 OA
   16:00〜18:00 ?tさん
   18:00〜19:00 kさん
   19:00〜20:00 pさん 送迎
★ 担当者3:  休み
   11:00〜12:00 サポート
   15:30〜20:00 hさん
   20:00〜20:30 送迎

これが

★ 担当者1: 9:00〜20:30 休み

   11:00〜12:00 SC 
   13:00〜15:30 a君
   15:30〜17:00 bくん
   18:00〜20:00 Tくん
   20:00〜20:30 送迎
★ 担当者3:  休み
   11:00〜12:00 サポート
   15:30〜20:00 hさん
   20:00〜20:30 送迎

このようになるイメージです!

これをすると、上の閉じていたものが開いたりしてしまうので干渉しないようにできないかと思いました!

(luke) 2019/03/20(水) 09:22


説明わかりにくいと思いますが。。。
どなたかご教授いただけませんか。。。
(luke) 2019/03/20(水) 11:17

出先のため詳しくコードを書く暇が無いのですが
Cells.EntireRow.Hidden = False
が全ての行の非表示を解除しています。
作成なさった方はバグ防止のために入れたものと思われます。
雑に誤魔化すならばその1行を削除してしまえば行けそうに見えますが、バグの温床にはなります。
全ての行ではなく、30行目以降の非表示を解除に変更すれば解決すると思われます。
(たかは) 2019/03/20(水) 11:20

 私のコードですねぇ
(稲葉) 2019/03/20(水) 11:25

たかはさん
ありがとうございます。
試してみます!

稲葉さん
ありがとうございます。
昨日のものをもう少し工夫してみようかと思いまして。。。!
(luke) 2019/03/20(水) 11:29


 こんなリストが同一シートに存在すること自体馬鹿げているし、
[[20190319133819]]
 の
 >先方がとんでもないつくりで頼まれてきたのです。。。

 依頼されたなら、正しいデータ構成を助言をするべきだし
 全て他人任せで与えられたコードを理解しようとしない姿勢は「先方」もこの先困るだろうな...

 >上の閉じていたものが開いたりしてしまうので干渉しないように
 二番目のコードの    Cells.EntireRow.Hidden = False を削除して、一番目のコードの
 End Sub の一行上に
 Call ★定休非表示
 とするだけで済むと思うけど?

(seiya) 2019/03/20(水) 14:27


seiyaさん
ありがとうございます。

おっしゃる通りです。
まだまだ理解が足りていないのは承知していますが。
右も左もわからず仕事が回ってきたので何からいいのかわからなく相談させてもらう形になりました。
みなさん最初はそうだったと思いますが。。。

ここで教えてもらったものを提出するわけではなく
実際にやっている案件で試しにやってみてと来たので
僕がやっているのはあくまでも練習として課題を与えられたような形です。
まったく関係ない業界にいたので本当に何をすればと思い相談していただいていました。
あまり身の上を語ってもあれなのでここらへんでやめておきますが。。。

教えてもらってそのまま横流ししてるわけではなくコードを自分なりに調べなおし
理解しようとしながら勉強させてもらっていますので

また何かあればご助力の程よろしくお願いします。
アドバイスありがとうございます!!長文失礼しました。

(luke) 2019/03/20(水) 14:45


 >僕がやっているのはあくまでも練習として課題を与えられたような形です。 
 これが本当なら、なんでここで質問するの?
 その練習を他人にやらせて、なに考えているの?

 >みなさん最初はそうだったと思いますが。。。 
 全く同意できない
(稲葉) 2019/03/20(水) 17:07

僕も未だに質問をする身なので質問することの是非はいいませんが、
マクロ1とマクロ2で表記方法が違う箇所があるのでそこを整理することをお勧めします。
cellの指定方法あたり。

F8を押すと1行ずつマクロの動作を確認できるので、どこで悪さをしているのか特定できるようになって応用が利きますよ。
原因を特定して解決法が分からないときに質問すると回答もしやすいし、回答に対して理解もしやすいと思いますよ。

ただ、正規化もしていないデータベースは将来後悔すると思うので今のうちに理想的なデータベースの作り方をい意識するべきとは思います。
(たかは) 2019/03/20(水) 18:02


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.