『列の非表示』(タカラカラー) マクロ初心者です。 宜しくお願いします。 「特定セルに数字を入力すると、指定した列が非表示になる」を Worksheetに入力しましたが、うまく非表示されませんでした。 どこを修正したら、良いのでしょうか? ・"AB3"に"28"を入力すると、AH〜AJの列が非表示 ・"AC3"に"29"を入力すると、AIとAJの列が非表示 ・"AD3"に"30"を入力すると、AJの列が非表示 宜しくお願いします。 Private Sub (ByVal Target As Range) If Intersect(Target, Range("AB3,AC3,AD3")) Is Nothing Then Exit Sub Columns("AH:AJ").Hidden = Range("AB3").Value = "28" Columns("AI:AJ").Hidden = Range("AC3").Value = "29" Columns("AJ").Hidden = Range("AD3").Value = "30" End Sub < 使用 Excel:Excel2013、使用 OS:unknown > ---- >うまく非表示されませんでした。 それ以前にコンパイルエラーでしょうに・・・。 (BJ) 2019/09/26(木) 11:24 ---- これってAB3セルに28と入力してAC3セルとAD3セルが空白だったりするとAH列だけが非表示になるのでは? >Columns("AH:AJ").Hidden = Range("AB3").Value = "28" ここでAH:AJ列が非表示になるが >Columns("AI:AJ").Hidden = Range("AC3").Value = "29" でAI:AJ列の非表示が解除され >Columns("AJ").Hidden = Range("AD3").Value = "30" でAJ列の非表示が解除される。 (ねむねむ) 2019/09/26(木) 11:30 ---- ありがとうございます。 修正するには、どのようにしたらよいでしょうか。 (タカラカラー) 2019/09/26(木) 11:35 ---- 列を重ならないようにするか、以下のように個々に判定するか(どういう条件ならFalseにするかを考えないとですが)でしょうか。 If Range("AB3").Value = "28" Then Columns("AH:AJ").Hidden = True End If (???) 2019/09/26(木) 11:44 ---- あー、戻す条件を考えると難しくなるくらいなら、最初に全部Falseにしてから、該当するものだけTrueにしてみてください。 (???) 2019/09/26(木) 11:51 ---- カレンダーでもつくってんでしょうか 月の日数によって表示列変えたいとか? もちょとやりたいこと詳しく書いた方が手戻りなくていいと思いますけど (´・ω・`) 2019/09/26(木) 12:37 ---- 想像するに >Worksheetに入力しましたが と言っていて >Private Sub (ByVal Target As Range) だから、本当はシートモジュールにChangeイベントの記述をしたのではないでしょうか? そうであれば、???さんのアドバイスのように個々に判定したらどうでしょうか? Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("AB3")) Is Nothing Then Columns("AH:AJ").Hidden = Range("AB3").Value = "28" If Not Intersect(Target, Range("AC3")) Is Nothing Then Columns("AI:AJ").Hidden = Range("AC3").Value = "29" If Not Intersect(Target, Range("AD3")) Is Nothing Then Columns("AJ:AJ").Hidden = Range("AD3").Value = "30" End Sub あと、「.Value = "30"」のようにわざわざ【文字列】で判定しているのがちょっと気になります。 当方(Excel2007/Windows10)でテストしたら【数値】でも反応しちゃいます。 (もこな2) 2019/09/26(木) 12:55 ---- 皆さん、アドバイスありがとうございます。 会議が入ってしまい、そのまま外出しましたので返信遅くなってしまいました。 ´・ω・`のおっしゃる通り、カレンダーを作っておりまして、 月の日数によって表示列を変えようと思っております。 今日は会社には戻らないので、明日もこな2さんのでやってみようと思います。 (タカラカラー) 2019/09/26(木) 14:52 ---- >カレンダーを作っておりまして シートのどこかのセルに年月のデータが入っていれば、非表示列すぐわかるんですけど... (´・ω・`) 2019/09/26(木) 15:02 ---- ユーザー設定のビューで対応というのではどうでしょう? (コナミ) 2019/09/26(木) 15:07 ---- カレンダーであれば、処理は作成(更新)するときの1回だけだから、changeイベントを使うような話ではないとおもいます。 むしろ、カレンダーなのだから、月末日を数値で取得して対応する(不要な)列の表示・非表示を切り替えることを考えたほうがよいのでは? https://www.moug.net/tech/acvba/0120017.html https://www.tipsfound.com/vba/05day (もこな2) 2019/09/26(木) 17:06 ---- 列の表示非表示を使うまでもないと思います。 マクロを使うなら、最初から 当月の日付だけをセルに入れればいい話だと思うんですが。 (渡辺ひかる) 2019/09/26(木) 17:26 ---- 皆様、ありがとうございます。 返信遅くなってしまいました。 申し訳ありませんでした。 >カレンダーなのだから、月末日を数値で取得して 対応する(不要な)列の表示・非表示を切り替える ことを考えたほうがよいのでは? もこな2さんの方法でOKでした。 ありがとうございました。 もう一つ、いいでしょうか。 列の非表示について、上司から指示がありまして、 そのご相談を致します。 Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("AB3")) Is Nothing Then Columns("AH:AJ").Hidden = Range("AB3").Value = "28" If Not Intersect(Target, Range("AC3")) Is Nothing Then Columns("AI:AJ").Hidden = Range("AC3").Value = "29" If Not Intersect(Target, Range("AD3")) Is Nothing Then Columns("AJ:AJ").Hidden = Range("AD3").Value = "30" End Sub ですと、3つのセル(AB3,AC3,AD3)にそれぞれの数字(28,29,30) を入力するとAH:AJ、AI:AJ、AJ:AJの列がそれぞれ非表示になるのですが、 1つのセルにつの記号(◯、▽、▲)をそれぞれ入力したら、 A:C、B:C、C:Cの列が非表示にするには、 どのようにしたらよいでしょうか。 宜しくお願いします。 (タカラカラー) 2019/09/28(土) 10:11 ---- その式を応用してみたら? (kill) 2019/09/28(土) 10:37 ---- 3つのセルをAB3に変えてみたのですが、駄目でした。 このような単純な応用では駄目なのでしょうか? (タカラカラー) 2019/09/28(土) 19:43 ---- >>カレンダーなのだから、月末日を数値で取得して >>対応する(不要な)列の表示・非表示を切り替える >>ことを考えたほうがよいのでは? >もこな2さんの方法でOKでした。 いや、私が言いたかったのはこういうことですが・・・ ※標準モジュールに記述 Sub さんぷる() Dim Mydate As Date Dim i As Long With ActiveSheet Mydate = "2019/10/1" i = Day(DateSerial(Year(Mydate), Month(Mydate) + 1, 0)) .Columns("AH:AJ").Hidden = False Select Case i Case Is = 28: .Columns("AH:AJ").Hidden = True Case Is = 29: .Columns("AI:AJ").Hidden = True Case Is = 30: .Columns("AJ:AJ").Hidden = True End Select End With End Sub そして、一つの質問の方も何度も行うのでしょうか? (本当にChangeイベントで処理すべきか疑問があります) とりあえず、実際のコードを拝見させて頂いたほうが、わからない部分が特定しやすいとおもいますが、【1つのセル】というところに注目してこんな感じとかでしょうか ※該当のシートモジュールに記述 Private Sub Worksheet_Change(ByVal Target As Range) Dim 一つのセル As Range Set 一つのセル = Range("AB3") If Not Intersect(Target, 一つのセル) Is Nothing Then Select Case 一つのセル.Value Case Is = "◯" Columns("A:C").Hidden = True Case Is = "▽" Columns("B:C").Hidden = True Case Is = "▲" Columns("C:C").Hidden = True Case Else Columns("A:C").Hidden = False End Select End Sub (もこな2) 2019/09/28(土) 20:46 ---- [[20191006115431]] に移動らしい (もこな2) 2019/10/06(日) 12:06