[[20061029234748]] 『ピボットテーブルで日付スルー方法』(トランス) ページの最後に飛ぶ

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

 

『ピボットテーブルで日付スルー方法』(トランス)

以前は『指定日置換』にて、お世話になりました。

今回の質問ですが、月初日〜集計開始日の間でピボットテーブルに該当日付(土日祝など)データがない場合、スルーする方法に困っております。
以下に現状のマクロを記載しますので、解決法を教えて頂きたいです。宜しくお願い致します。

    Dim MyDate     As Variant
    Dim MyDate1    As Date
    Dim d          As Integer
    Dim n          As Integer

    MyDate = InputBox("集計開始日(yyyy/m/d)")

    If MyDate = "" Then
       MsgBox "入力が不正です。マクロを終了します。"
       Exit Sub
    End If

    MyDate1 = DateSerial(Format(DateAdd("m", -1, Date), "yyyy"), Format(DateAdd("m", -1, Date), "m"), 1)

    d = DateDiff("d", MyDate1, CDate(MyDate))

    For n = 1 To d

    Sheets("ピボット").Select

    ActiveSheet.PivotTables("ピボットテーブル1").PivotSelect "日付", xlButton
    With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("日付")
         .PivotItems(Format(CDate(MyDate) - n, "yyyy/m/d")).Visible = False

    End With

    Next n

[エクセルのバージョン] Excel2000 or Excel97

[OSのバージョン] Windows2000 or WindowsNT


 的ハズレでしたらスミマセン(あきお)
 2つばかり思いつきます。
  1. 入力日付の存在チェックを行い、存在しない日付をリジェクトする方法
  2. ダミーですべての日付データを予め追加しちゃう方法


 「2」の方法で、土日祝に「ScheduleBoard(アプリ)」にてダミーフラグ数値(99:文化の日など)を
 入力して上のマクロで月初日〜集計開始日(営業日も含む)の期間を除外して、さらに

    ActiveSheet.PivotTables("ピボットテーブル1").PivotSelect "数値", xlButton
    With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("数値")
         .PivotItems("99").Visible = False

 で集計開始日〜月末の土日祝のみ除外して、必要な期間の営業日データのみ取得
 出来出来そうなイメージが出来ましたので試してみます。

 あきおさん、有難う御座いました。


いつもお世話になっております。

 今度は、集計終了日〜月末の間でピボットテーブルに日付(未来営業日や土日祝など)データがない場合の
 ピボットテーブルにて非表示アイテムにする方法で困っております。
 以下に現状のマクロを記載しますので、解決法を教えて頂きたいです。
 宜しくお願い致します。

 ※元データには、2ヶ月分のデータが入っていて、前月初〜集計開始日と
   集計終了日〜翌月末が余分になる為、ピボットテーブルにて
   非表示アイテムにする必要があります。

   実施したい内容は、ピボットテーブルの元データで日付の入力有無を検索
   → ない場合は非表示アイテムにする対応をスルー(ある場合は非表示アイテムにする)
   → 次の日の入力有無を検索  の繰り返しです。

    Dim EDate      As Date
   Dim FDate      As Date
    Dim NDate      As Date
    Dim MyDate1    As Variant
    Dim MyDate2    As Variant
    Dim y          As Variant
    Dim m          As Variant
    Dim d1         As Integer
    Dim d2         As Integer
    Dim i          As Integer
    Dim n1         As Integer
    Dim n2         As Integer
    Dim Filepath   As String
    Dim FindDate1  As Range
    Dim FindDate2  As Range

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    y = InputBox("作成年(yyyy)")

    If y = "" Then
       MsgBox "入力が不正です。マクロを終了します。"
       Exit Sub
    End If

    m = InputBox("作成月(m)")

    If m = "" Then
       MsgBox "入力が不正です。マクロを終了します。"
       Exit Sub
    End If

    FDate = DateSerial(y, m, 1)
    NDate = DateSerial(y, m + 2, 1)
    EDate = DateAdd("d", -1, NDate)

    Filepath = "C:\users\集計\工数\" & Format(FDate, "ge") & "\元ネタ\" & m & "月\雛型.xls"

    Workbooks.Open (Filepath)

    Worksheets(m & "月").Select
    Range("A1:F" & Range("A65536").End(xlUp).Row).Copy

    Windows("工数集計表が35日雛形.xls").Activate
    Worksheets("元データ").Select
    Range("A1").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False

    Windows("雛型.xls").Activate
    ActiveWorkbook.Close

    Windows("工数集計表が35日雛形.xls").Activate
    Sheets("ピボット").Select
    ActiveSheet.PivotTables("ピボットテーブル1").RefreshTable

    MyDate1 = InputBox("集計開始日(yyyy/m/d)")

    If MyDate1 = "" Then
       MsgBox "入力が不正です。マクロを終了します。"
       Exit Sub
    End If

    MyDate2 = InputBox("集計終了日(yyyy/m/d)")

    If MyDate2 = "" Then
       MsgBox "入力が不正です。マクロを終了します。"
       Exit Sub
    End If

    d1 = DateDiff("d", FDate, CDate(MyDate1))
    d2 = DateDiff("d", CDate(MyDate2), EDate)

    For n1 = 1 To d1

    Sheets("元データ").Select      
        Set FindDate1 = Columns("A:A").Find(What:=Format((FDate) + n1 - 1, "yyyy/m/d"), _
        LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=True)

        If FindDate1 Is Nothing Then
            GoTo Through1
        End If

    Sheets("ピボット").Select
    ActiveSheet.PivotTables("ピボットテーブル1").PivotSelect "日付", xlButton
    With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("日付")
         .PivotItems(Format((FDate) + n1 - 1, "yyyy/m/d")).Visible = False

    End With
Through1:
    Next n1

    For n2 = 1 To d2

    Sheets("元データ").Select

        Set FindDate2 = Columns("A:A").Find(What:=Format((EDate) - n2 + 1, "yyyy/m/d"), _
        LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=True)

        If FindDate2 Is Nothing Then
            GoTo Through2
        End If

    Sheets("ピボット").Select
    ActiveSheet.PivotTables("ピボットテーブル1").PivotSelect "日付", xlButton
    With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("日付")
         .PivotItems(Format((EDate) - n2 + 1, "yyyy/m/d")).Visible = False

    End With
Through2:
    Next n2

    For i = 1 To 35

    Sheets("工数集計表").Select
    Range("A13") = MyDate1
    Range("G13:CA132").Replace _
    What:="【" & i & "】", Replacement:=Format(CDate(MyDate1) - 1 + i, "yyyy/m/d"), _
    LookAt:=xlPart, MatchCase:=False

    Next i

    Application.ScreenUpdating = True
    Application.DisplayAlerts = True

コメント返信:

[ 一覧(最新更新順) ]


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