[[20211228160037]] 『行ではなく列で行いたい』(1192) ページの最後に飛ぶ

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

 

『行ではなく列で行いたい』(1192)

VBAの色々な機能を調べていたら参照にしたいものがありました。
C1に開始の日付C2に終了の日付を指定することで、指定期間のみを表示させるVBAになります。
こちらは、行を非表示にしていますが、列にしたいと思っています。
単純にRowをColumnに変更してみましたができませんでした。

N列に4月1日、NN列に3月31日と入力されているExcelデータがあるので
期間を指定した際、N列〜NN列の期間外を非表示としたいです。
年末の忙しい中申し訳ございませんが詳しい方がいらっしゃいましたらアドバイスをお願い致します。
Sub DatePeriod()

    Dim sRow As Long: sRow = 5
    Dim eRow As Long: eRow = 1500
    '全表示
    Range(Rows(sRow), Rows(eRow)).Hidden = False
    '非表示設定
    If IsDate(Range("C1").Value) And IsDate(Range("C2").Value) Then
        Dim mDate As Date: mDate = Cells(sRow, "C").Value
        Dim mDate2 As Date: mDate2 = Cells(eRow, "C").Value
        Dim sDate As Date: sDate = Range("C1").Value
        Dim eDate As Date: eDate = Range("C2").Value
        Dim memo As Long
        '開始より前を非表示
        If CLng(sDate) > CLng(mDate) Then
            memo = CLng(sDate) - CLng(mDate) + sRow - 1
            Range(Rows(sRow), Rows(memo)).Hidden = True
            Cells(memo + 1, "C").Activate
        End If
        '終了より後を非表示
        If CLng(mDate2) > CLng(eDate) Then
            memo = CLng(eDate) - CLng(mDate) + sRow + 1
            Range(Rows(memo), Rows(eRow)).Hidden = True
        End If
    End If

End Sub

< 使用 Excel:Office365、使用 OS:Windows10 >


>単純にRowをColumnに変更してみましたができませんでした。
横着せずに、ちゃんとそれぞれの命令を理解されたほうがよいとおもいます。
まぁそれはそれとして。

↓は、5〜1500行目を非表示にしています。

    Sub 研究1()
        Cells.EntireRow.Hidden = False
        Rows("5:1500").Hidden = True
    End Sub

そして、それは↓でも同じ結果になります。

    Sub 研究2()
        Cells.EntireRow.Hidden = False
        Range("A5:B1500").EntireRow.Hidden = True
    End Sub

なぜ同じになるのかというと

 前者は、Rows("5:1500")を非表示にしなさい
 後者は、Range("A5:B1500")が【含まれる行】を非表示にしなさい

という命令をしていて、結局5〜1500行目を操作しているからです。

なので、↓のどちらかになるようにしてみてはどうでしょうか?

 Range(セル範囲の始まり,セル範囲の終わり).EntireRow.Hidden = True
 Rows(始まりの行番号 & ":" & 終わりの行番号).Hidden = True

(もこな2) 2021/12/28(火) 16:36


ご参考。

 Sub Test()

    Cells.EntireColumn.Hidden = False

    Range(Cells(1, "N"), Cells(1, Range("C1") - Range("N1") + Range("N1").Column - 1)).EntireColumn.Hidden = True

 End Sub

(ひまつぶし) 2021/12/28(火) 16:44


失礼。行じゃなくて列でしたね。
であれば↓のように【.EntireColumn】を使えばよいですね。
    Sub 研究3()
        Cells.EntireColumn.Hidden = False
        Range("B1", "Z5").EntireColumn.Hidden = True
    End Sub

(もこな2) 2021/12/28(火) 16:47


もこな2様、ひまつぶし様ありがとうございます。
これらは最初に入れるのでしょうか。
正直どこに入れたらいいのか分かりません。
大変勉強不足で申し訳ございません、、、
(1192) 2021/12/28(火) 16:51

あくまでもご参考ということで、既存のコードを修正するものではなく
単独で動作します(ご希望の動作ではありませんが、試してみてください。)

(ひまつぶし) 2021/12/28(火) 18:58


オフラインでもオンラインでも要求要望は後から出てくるんですよね〜(笑)

(チンチクリン) 2021/12/28(火) 19:56


 こんばんは!
今年も残り僅かになりましたね。
ちょっとお掃除疲れしましたので書いてみましたよ。
あってますか????
2行目に日付が入力されているものとしてます。。。
後は、アレンジしていただけると助かります。。。
では、、では、、

 Option Explicit
Sub DatePeriod()
    Const sCol As Long = 14
    Const eCol As Long = 378
    '全表示
    Range(Columns(sCol), Columns(eCol)).Hidden = False
    '非表示設定
    If IsDate(Range("C1").Value) And IsDate(Range("C2").Value) Then
        Dim mDate As Long: mDate = Cells(2, sCol).Value2
        Dim mDate2 As Long: mDate2 = Cells(2, eCol).Value2
        Dim sDate As Long: sDate = Range("C1").Value2
        Dim eDate As Long: eDate = Range("C2").Value2
        Dim memo As Long
        '開始より前を非表示
        If sDate > mDate Then
            memo = sDate - mDate + sCol - 1
            Range(Columns(sCol), Columns(memo)).Hidden = True
            Cells(2, memo + 1).Activate
        End If
        '終了より後を非表示
        If mDate2 > eDate Then
            memo = eDate - mDate + sCol + 1
            Range(Columns(memo), Columns(eCol)).Hidden = True
        End If
    End If
End Sub
(SoulMan) 2021/12/28(火) 20:52

コメント返信:

[ 一覧(最新更新順) ]


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