[[20150118002830]] 『土日祝日盆正月を除く日付』(take) ページの最後に飛ぶ

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

 

『土日祝日盆正月を除く日付』(take)

今回、[[20061231105723]]

 Sub getWeekDay()
    Dim regExp As Object
    Set regExp = CreateObject("VBScript.RegExp")
    regExp.Pattern = "[日土祝]"
    Dim lastLine As Long
    lastLine = Range("A65535").End(xlUp).Row
    Dim wdLine As Long
    wdLine = 2
    For i = 2 To lastLine
        If Not regExp.test(Cells(i, "B").Value) = True Then
            Cells(wdLine, "C").Value = Cells(i, "A").Value
            Cells(wdLine, "D").Value = Cells(i, "B").Value
            wdLine = wdLine + 1
        End If
    Next
 End Sub

を厚かましくコピペ使って作りました。
後、12月29日、30日、31日、1月2日、3日、8月13、14日、15日を
VBAで除く方法を教えて貰えませんか?
VBAは詳しくないので出来ればまたコピペ出来るようにお願い出来ませんか?
宜しくお願いします。

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

< 使用 Excel:Excel2007、使用 OS:Windows7 >


 こんばんは

 あちらにコメントした

 この形で対応するなら、12月29日や30日のB列を 休(月) や 休(火) という形にして
 regExp.Pattern = "[日土祝]"  を regExp.Pattern = "[日土祝休]" とすればいけるんじゃない?

 これではだめですか?

(β) 2015/01/18(日) 00:36


 一応、正攻法(??)も。
 同じシートでも別シートでもいいので、祝祭日や会社の休みの日を yyyy/mm/dd で ずらっと登録し
 その日付リストに名前を "休日" と設定してください。

 なお、以下のコードではB列の値は無視して、A列の日付から曜日を判定しています。

 Sub Sample()
    Dim c As Range
    Dim z As Long
    Dim i As Long
    Dim x As Variant
    Dim flag As Boolean

    Application.ScreenUpdating = False

    i = 2
    Range("C2:D2").Resize(ActiveSheet.UsedRange.Rows.Count - 1).ClearContents

    For Each c In Range("A2", Range("A" & Rows.Count).End(xlUp))

        z = Weekday(c.Value)
        flag = False

        Select Case z
            Case vbSaturday, vbSunday
                flag = True
            Case Else
                x = Application.Match(c.Value, Range("休日"), 0)
                If IsNumeric(x) Then flag = True
        End Select

        If Not flag Then
            Cells(i, "C").Resize(, 2).Value = c.Resize(, 2).Value
            i = i + 1
        End If

    Next

 End Sub

(β) 2015/01/18(日) 01:23


βさん、祝日リストは出来ましたがVBAではうまく出来ませんでした・・・
βさんの最初のコメントといろいろググッてなんとか出来ました。
ありがとうございました。
また、聞くことがあるかも知れませんがその時は宜しくお願いします。
本当にありがとうございました。
(take) 2015/01/18(日) 02:07

 ◆関数による方法です(参考にしてください)
 ◆A3から直接「土日祝日」を除いた日付を表示させます
 1)C2から祝日および、年始・年末・お盆休みを入力して、
 2)そのリストに「祝日」と名前を付けます
 3)A1に「西暦年」、A2に「月」を入力するようにします
 4)A3=WORKDAY(DATE(A1,A2,1),1,祝日)
 5)A4=IF(A3="","",IF(MONTH(WORKDAY(A3,1,祝日))=$A$2,WORKDAY(A3,1,祝日),""))
 6)A4の式を下にコピーします
 7)B3=TEXT(A3,"aaa")
 8)B3の式を下にコピー

 ________A_________B______C
 1____2015_______________祝日
 2______1______________2015/1/1
 3____2015/1/5____月___2015/1/2
 4____2015/1/6____火___2015/1/3
 5____2015/1/7____水___2015/1/12
 6____2015/1/8____木___2015/2/11
 7____2015/1/9____金___2015/3/21
 8____2015/1/13___火___2015/4/29
 9____2015/1/14___水___2015/5/6
 10___2015/1/15___木___2015/5/4
 11___2015/1/16___金___2015/5/5
 12___2015/1/19___月___2015/8/13
 13___2015/1/20___火___2015/8/14
 14___2015/1/21___水___2015/8/15
 15___2015/1/22___木___2015/7/20
 16___2015/1/23___金___2015/9/21
 17___2015/1/26___月___2015/9/22
 18___2015/1/27___火___2015/9/23
 19___2015/1/28___水___2015/10/12
 20___2015/1/29___木___2015/11/3
 21___2015/1/30___金___2015/11/23
 22____________________2015/12/23
 23____________________2015/12/29
 24____________________2015/12/30
 25____________________2015/12/31

 (maron) 2015/01/18(日) 07:59

 もう目に留まらないかもしれませんが・・・

 こちらでは問題なく処理できているので【VBAではうまく出来ませんでした・】が気になります。
 もしかして・・休日のリストに名前を付けるというところを、そのリストがあるシート名を休日としたのかな・・??

 (maron)さんの例を借りると、C2:C25 に 【名前の定義】で、「休日」(maronさんの場合は「祝日」) とするんですけど
 そうしてもなお、うまくいかなかったということでしょうかねぇ?

(β) 2015/01/18(日) 10:59


 関数による方法が上がっていますが、

 > 4)A3=WORKDAY(DATE(A1,A2,1),1,祝日)

 これだと月初が平日であっても除外されてしまいませんか?

 A3: =WORKDAY(DATE(A1,A2,0),1,祝日)
             ~~~
 
(JKT) 2015/01/18(日) 12:07

 >これだと月初が平日であっても除外されてしまいませんか?
 ◆そうですね、買い物に行くのに急いでいたので(ちょっと言い訳・・・)

 (maron) 2015/01/18(日) 12:17

コメント返信:

[ 一覧(最新更新順) ]


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