신 Excel의 신 달력 (?)에서 날짜를 안내

신 캘린더란?



슬프게도, 날짜에 해당하는 부분이 이렇게되어있는 Excel을 만나는 것이 드물게 자주 있습니다 ...


연월




11

12

...

19

2020년 4월
20

21

...

29

30

1

2

...

14

2020년 5월
15

16

...

30

31

1

2

...

9

2020년 6월
10

11

...

20


연월이나 일은, 서식으로 그렇게 되어 있는 것이 아니라, 각각 캐릭터 라인과 수치로 격납되고 있습니다.
인간이 읽는 분에는 문제없는 Excel입니다만, 데이터로서 처리할 때의 고통 포인트는,
  • 연월의 문자열은, 그 달내의 특정의 날 옆에 있는 것이 아니고, 「가운데 편의 어딘가」에 입력하고 있다.
  • 캘린더 개시일, 종료일 모두 달의 도중의 경우가 있다.

  • 같은 곳입니까?
    연월이 반드시 그 달내의 선두일 옆에 입력하고 있으면, 「아래 방향으로 필」로 어떻게든 할 수 있으므로, 셀이 결합되고 있는 편이 좋다고 하는 드문(?) 케이스이기도 합니다.

    신 캘린더에서 날짜를 도출



    샘플


    let
        GodCalendar = #table(
            type table [年月 = text, 日 = Int64.Type],
            {
                {null, 11}, {null, 12}, {null, 13}, {null, 14},
                {null, 15}, {null, 16}, {null, 17}, {null, 18}, {null, 19}, {"2020年4月", 20}, {null, 21},
                {null, 22}, {null, 23}, {null, 24}, {null, 25}, {null, 26}, {null, 27}, {null, 28},
                {null, 29}, {null, 30},
                {null, 1}, {null, 2}, {null, 3}, {null, 4}, {null, 5}, {null, 6}, {null, 7},
                {null, 8}, {null, 9}, {null, 10}, {null, 11}, {null, 12}, {null, 13}, {null, 14},
                {"2020年5月", 15}, {null, 16}, {null, 17}, {null, 18}, {null, 19}, {null, 20}, {null, 21},
                {null, 22}, {null, 23}, {null, 24}, {null, 25}, {null, 26}, {null, 27}, {null, 28},
                {null, 29}, {null, 30}, {null, 31},
                {null, 1}, {null, 2}, {null, 3}, {null, 4}, {null, 5}, {null, 6}, {null, 7},
                {null, 8}, {null, 9}, {"2020年6月", 10}, {null, 11}, {null, 12}, {null, 13}, {null, 14},
                {null, 15}, {null, 16}, {null, 17}, {null, 18}, {null, 19}, {null, 20}
            }
        ),
        年月日のnullではない最初と最後の要素取り出す = List.Transform(
            {GodCalendar[年月], GodCalendar[日]},
            each
                let
                    rn = List.RemoveNulls(_),
                    fl = {List.First(rn), List.Last(rn)}
                in
                    fl
        ),
        それらをガッチャンコして日付に変換する = List.Transform(
            List.Zip(年月日のnullではない最初と最後の要素取り出す),
            each Date.FromText(_{0} & Number.ToText(_{1}, "0日"))
        ),
        開始日と終了日がゲットできたのでリストにする = 
            let
                start = それらをガッチャンコして日付に変換する{0},
                end = それらをガッチャンコして日付に変換する{1}
            in
                List.Dates(
                    start,
                    Duration.Days(end - start) + 1,
                    #duration(1, 0, 0, 0)
                ),
        元テーブルに追加 = Table.AddColumn(
            GodCalendar,
            "日付",
            each Function.ScalarVector(
                type function(dummy as any) as any,
                (inputTable) => 開始日と終了日がゲットできたのでリストにする
             )([0]),
             type date
        )
    in
        元テーブルに追加
    

    결과





    주의점



    이번 샘플의 경우, 신 캘린더측에 여분의 날(같은 날이 더브 하고 있는 등)이 있는 경우, 에러가 나오므로 깨닫을 수 있습니다만, 빠져 있는 경우는 에러가 나오지 않습니다.
    처음과 마지막만 보고 있기 때문에, 도중의 달의 표기가 잘못되어 있어도 문제 없다는 메리트는 있습니다만, 기본적으로는, 신 캘린더측도 캘린더로서 모순이 없을 필요가 있어, 상정되는 모순의 내용 에 따라 대응 방법을 바꿀 필요가 있을 것 같습니다.

    원래



    「일」의 부분의 「값」이 제대로 일자가 되어만 있으면 문제 없기 때문에, 재이용하기 쉬운 Excel의 만드는 방법을 꾸준히 계몽해 나가는 것도 중요하네요(직장 환경에 따라서는 그쪽이 어려울 수 있지만 ...)

    좋은 웹페이지 즐겨찾기