A 回答 (8件)
- 最新から表示
- 回答順に表示
No.8
- 回答日時:
rin01 さん、こんばんは。
Wendy02です。
質問主さんに、ここをお借りして、少し回答をよせておきます。
>検証もせず、いい加減な回答をしてしまってゴメンナサイ!!
いいえ。それは、最初の日だけの問題なので、その出だしの数日間だけを別処理すればよいのではないでしょうか?私の書いた配列数式は、現実的ではありませんし、実用度は低いと思います。ただ、違ったものを考えただけですから。
>Wendy02さんは、以前、Q&Aで色々教えて頂いた
>Wendyさんでしょうか?
rinさんのお名前は、記憶にあります。あの頃の私と、今の私では、かなり違いがあるかもしれません。かなり手広く VBA に手を出すようになりました。VBAは、卒業だとは思っていても、つい書いてしまいます。
Niiさんがお書きになっていたので、公開する予定はありませんでしたが、このまま回答がないといけませんので、私の考えた、ユーザー定義関数を出しておきます。
数式は、このように書きます。D1:D16 に、祭日データを置きます。
=myWorkdays(Year(Now()),$A$1,ROW(A1),$D$1:$D$16)
myWorkdays(年,月,1日から何番目, 祭日データ)
数式は、このようにして、フィルダウン・コピーします。祭日データは、既存のデータをシリアル値で、セルに書いてください。
標準モジュールに設定します。
'---------------------------------------------------------------------
Function myWorkdays(ByVal iYear As Integer, _
ByVal iMonth As Integer, _
Optional ByVal idx As Variant, _
Optional ByVal rHoliday As Range, _
Optional ByVal iWkEnd As Integer = 6) As Variant
'使い方:
'myWorkdays(年,月,[インデックス],[祭日データ],[オプション])
'インデックス: 月の初めから何番目-数字
'祭日データ: 祭日データをシリアル値で、セルの範囲に入れる
'ウィークエンドオプション:通常ナシ、6以外の数字を入れると土曜日が入る
Dim arDates() As Date
Dim rHolidays() As Variant
Dim i As Integer, j As Integer, n As Integer
Dim c As Range
Dim dummy As Variant
If Not rHoliday Is Nothing Then
'祭日データを1次元に変換
For Each c In rHoliday
If VarType(c.Value2) = vbDouble Then
If IsError(CDate(c.Value)) = False Then
ReDim Preserve rHolidays(n)
rHolidays(n) = c.Value2
n = n + 1
End If
End If
Next c
End If
'祭日データの配列が成り立たない場合ダミーを作る
On Error Resume Next
dummy = UBound(rHolidays)
If Err.Number > 0 Then
ReDim rHolidays(0)
rHolidays(0) = 0
End If
On Error GoTo 0
If iWkEnd <> 6 Then iWkEnd = 7
'土曜オプション
For i = 1 To Day(DateSerial(iYear, iMonth + 1, 0))
If Weekday(DateSerial(iYear, iMonth, i), vbMonday) < iWkEnd Then
If UBound(Filter(rHolidays(), CLng(DateSerial(iYear, iMonth, i)))) < 0 _
Then
ReDim Preserve arDates(j)
arDates(j) = DateSerial(iYear, iMonth, i)
j = j + 1
End If
End If
Next i
If IsMissing(idx) Then
myWorkdays = arDates(0)
ElseIf idx - 1 > UBound(arDates) Then
myWorkdays = ""
Else
myWorkdays = arDates(idx - 1)
End If
End Function
'---------------------------------------------------------------------
皆さん、本当にありがとうございました。
指示通り、いろいろやってみましたが、私の技量では難しすぎて、無理みたいです。
これからも、何とか出来るように頑張りたいと思います。
No.7
- 回答日時:
Rinで~す。
。♪>1日が土曜日・日曜日、祭日の場合、例えば、06年1
>月,4月,7月,10月のような場合は、最初の日が成り立ち>ませんから
Wendy02さんの
書かれている通りでした。
検証もせず、いい加減な回答をしてしまって
ゴメンナサイ!!
私の回答は無視してください。
関係ないレスですみませんが
Wendy02さんは、以前、Q&Aで色々教えて頂いた
Wendyさんでしょうか?
もしそうでしたら、大変嬉しいのですが~。。。
ホントに、関係ないレスでゴメンナサイ。。。Rin
No.6
- 回答日時:
No.5のPublic Function 平日(月 As Long) As Long ~ 最初のEnd Function迄は無視で^^;
A1に月を入力した後、ボタンをクリックする必要はありませが、これでどうでしょう?
Private Sub CommandButton1_Click()
Dim 日 As Date
Dim 月 As Long
Dim 日数 As Long
Dim セル As Long
月 = Cells(1, 1).Value
セル = 1
For 日 = DateSerial(2006, 月, 1) To (DateSerial(2006, 月 + 1, 1) - 1)
If 国民の祝日(日, 1) = "" And Weekday(日) > 1 And Weekday(日) < 7 Then
Cells(セル, 2).Activate
ActiveCell.Value = 日
セル = セル + 1
End If
Next 日
End Sub
No.5
- 回答日時:
2006年固定で、平日をカウントする
Public Function 平日(月 As Long) As Long
Dim 日 As Date
Dim 日数 As Long
For 日 = DateSerial(2006, 月, 1) To (DateSerial(2006, 月 + 1, 1) - 1)
If 国民の祝日(日, 1) = "" And Weekday(日) > 1 And Weekday(日) < 7 Then
日数 = 日数 + 1
End If
Next 日
平日 = 日数
End Function
Public Function 国民の祝日(今日 As Date, chk_l As Integer) As String
Dim 年 As Long
国民の祝日 = ""
年 = Year(今日)
If Format(今日, "yyyymm") < 194807 Then
Exit Function
End If
If Format(今日, "mmdd") = 101 Then
国民の祝日 = "元日"
Exit Function
End If
If 年 < 2000 And Format(今日, "mmdd") = 115 Then
国民の祝日 = "成人の日"
Exit Function
ElseIf 年 >= 2000 Then
If 第一月曜(DateSerial(年, 1, 1)) + 7 = 今日 Then
国民の祝日 = "成人の日"
Exit Function
End If
End If
If 年 >= 1966 And Format(今日, "mmdd") = 211 Then
国民の祝日 = "建国記念の日"
Exit Function
End If
If DateSerial(年, 3, Int(0.24242 * 年 - Int(年 / 4) + 35.84)) = 今日 Then
国民の祝日 = "春分の日"
Exit Function
End If
If Format(今日, "mmdd") = 503 Then
国民の祝日 = "憲法記念日"
Exit Function
End If
If Format(今日, "mmdd") = 429 Then
If 年 < 1989 Then
国民の祝日 = "天皇誕生日"
Exit Function
ElseIf 年 >= 1989 And 年 < 2007 Then
国民の祝日 = "みどりの日"
Exit Function
Else
国民の祝日 = "昭和の日"
Exit Function
End If
End If
If 年 >= 2007 And Format(今日, "mmdd") = 504 Then
国民の祝日 = "みどりの日"
Exit Function
End If
If Format(今日, "mmdd") = 505 Then
国民の祝日 = "こどもの日"
Exit Function
End If
If 年 >= 1995 Then
If 年 < 2003 And Format(今日, "mmdd") = 720 Then
国民の祝日 = "海の日"
Exit Function
ElseIf 年 >= 2003 Then
If 第一月曜(DateSerial(年, 7, 1)) + 14 = 今日 Then
国民の祝日 = "海の日"
Exit Function
End If
End If
End If
If 年 >= 1966 Then
If 年 < 2003 And Format(今日, "mmdd") = 915 Then
国民の祝日 = "敬老の日"
Exit Function
ElseIf 年 >= 2003 Then
If 第一月曜(DateSerial(年, 9, 1)) + 14 = 今日 Then
国民の祝日 = "敬老の日"
Exit Function
End If
End If
End If
If DateSerial(年, 9, Int(0.24204 * 年 - Int(年 / 4) + 39.01)) = 今日 Then
国民の祝日 = "秋分の日"
Exit Function
End If
If 年 >= 1966 Then
If 年 < 2000 And Format(今日, "mmdd") = 1010 Then
国民の祝日 = "体育の日"
Exit Function
ElseIf 年 >= 2000 Then
If 第一月曜(DateSerial(年, 10, 1)) + 7 = 今日 Then
国民の祝日 = "体育の日"
Exit Function
End If
End If
End If
If Format(今日, "mmdd") = 1103 Then
国民の祝日 = "文化の日"
Exit Function
End If
If Format(今日, "mmdd") = 1123 Then
国民の祝日 = "勤労感謝の日"
Exit Function
End If
If 年 >= 1989 And Format(今日, "mmdd") = 1223 Then
国民の祝日 = "天皇誕生日"
Exit Function
End If
If 今日 = #4/10/1959# Then
国民の祝日 = "皇太子明仁親王の結婚の儀"
Exit Function
End If
If 今日 = #2/24/1989# Then
国民の祝日 = "昭和天皇の大喪の礼"
Exit Function
End If
If 今日 = #11/12/1990# Then
国民の祝日 = "即位礼正殿の儀"
Exit Function
End If
If 今日 = #6/9/1993# Then
国民の祝日 = "皇太子徳仁親王の結婚の儀 "
Exit Function
End If
If chk_l Then
If 今日 > #4/12/1973# Then
If Weekday(今日) = 2 Then
If Len(国民の祝日(今日 - 1, 0)) Then
国民の祝日 = "振替休日"
Exit Function
End If
ElseIf 年 >= 2005 Then
If Weekday(今日) = 3 Then
If Len(国民の祝日(今日 - 1, 0)) Then
If Len(国民の祝日(今日 - 2, 0)) Then
国民の祝日 = "振替休日"
Exit Function
End If
End If
ElseIf Weekday(今日) = 4 Then
If Len(国民の祝日(今日 - 1, 0)) Then
If Len(国民の祝日(今日 - 2, 0)) Then
If Len(国民の祝日(今日 - 3, 0)) Then
国民の祝日 = "振替休日"
Exit Function
End If
End If
End If
End If
End If
End If
If 年 >= 1985 Then
If Len(国民の祝日(今日 - 1, 0)) Then
If Len(国民の祝日(今日 + 1, 0)) Then
国民の祝日 = "国民の休日"
Exit Function
End If
End If
End If
End If
End Function
Public Function 第一月曜(今日 As Date) As Date
今日 = DateSerial(Year(今日), Month(今日), 1)
Do Until Weekday(今日) = 2
今日 = 今日 + 1
Loop
第一月曜 = 今日
End Function
No.4
- 回答日時:
こんにちは。
厳密に、この言葉を守るとすれば、
>A1に2と入力すると、B列に2月の1日から28、29日まで土曜・日曜・祝祭日(休日)を除いた日のように、
1日が土曜日・日曜日、祭日の場合、例えば、06年1月,4月,7月,10月のような場合は、最初の日が成り立ちませんから、配列数式で行うしかありませんね。なお、WORKDAY関数の使い道を探しましたが、配列が受けないようでした。
=IF(SUM((WEEKDAY(DATE(YEAR(NOW()),$A$1,ROW($A$1:$A$31)),2)<6)*(ISERROR(MATCH(DATE(YEAR(NOW()),$A$1,ROW($A$1:$A$31)),$D$1:$D$20,0)))*(MONTH(DATE(YEAR(NOW()),$A$1,ROW($A$1:$A$31)))=$A$1))>=ROW(A1),SMALL(IF((WEEKDAY(DATE(YEAR(NOW()),$A$1,ROW($A$1:$A$31)),2)>5)+(ISERROR(MATCH(DATE(YEAR(NOW()),$A$1,ROW($A$1:$A$31)),$D$1:$D$20,0))=FALSE)>0,"",DATE(YEAR(NOW()),$A$1,ROW($A$1:$A$31))),ROW(A1)),"")
※配列の確定が必要です。
『配列の確定』
一旦、数式のところで、F2を押して、再度、SHIFT キーとCTRL キーを押しながら、ENTER を押すと、式が実体化して、値が出てきます。その後で、フィルドラッグで、コピーします。このレベルですと、VBAの処理のほうが簡単です。
D列 (祭日データ)
2006/1/1
2006/1/2
2006/1/9
2006/2/11
2006/3/21
2006/4/29
2006/5/3
2006/5/4
2006/5/5
2006/7/17
2006/9/18
2006/9/23
2006/10/9
2006/11/3
2006/11/23
2006/12/23
No.3
- 回答日時:
No.2
- 回答日時:
可能か不可能化で言えば、可能かと・・・
ただ、補足をお願いします。
土曜・日曜・祝祭日(休日)を除いた日:何日って表示ですか?それとも、日にちの一覧ですか?
祝祭日って、毎年変わりますよね?年度はどうすれば、いいのでしょう?
参考URL:http://okwave.jp/kotaeru.php3?q=402887
この回答への補足
B1から列に日にちの一覧を表示させたいと思っています。
年度は、A1に2007.1(年と月)と入力しても良いのですが、できるだけ簡単な方法をと思っています。
No.1
- 回答日時:
こんにちは~♪
★どこかのセル範囲に、1年間の祝日一覧を作っておきます。
その範囲がD1:D20の場合。
B1: =IF($A$1=MONTH(WORKDAY(DATE(2006,$A$1,1),ROW(A1)-1,$D$1:$D$20)),WORKDAY(DATE(2006,$A$1,1),ROW(A1)-1,$D$1:$D$20),"")
下にコピーします。
WORKDAY関数は、「アドイン関数」なので、メニューバーの[ツール]-[アドイン]の「分析ツール」にチェックしてから使用してください。
★その範囲がD1:D20を祝日一覧とかで名前定義して
式に組み込んでもいいと思います。
カン違いならゴメンナサイ!!。。。。Rinでした~♪♪
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- Excel(エクセル) エクセルの祝日に色が反映しない 4 2022/05/18 09:58
- Excel(エクセル) Excelで祝日を除く1回目の金曜日を返す 3 2023/01/31 16:07
- Visual Basic(VBA) 祝日を除いた月曜から土曜までの1週間分の日付行を選択し、別シートへカットアンドペーストしたい 13 2023/07/13 22:46
- その他(買い物・ショッピング) 24時間コスメのファンデーションを購入を18時10分頃に購入しました。 ご注文後、通常2~3日以内に 1 2023/05/27 18:46
- アルバイト・パート アルバイトをしている高校生(定時制)です。 アルバイトをして1年と半年が経ちました。 平日は木曜日と 3 2023/02/23 07:09
- その他(Microsoft Office) エクセルについて教えてください。 3 2023/05/19 18:19
- Excel(エクセル) エクセルで不可日と祝祭日の考慮してランダムに毎日の当番表を作成したいと思っています。 1 2023/07/12 21:14
- 求人情報・採用情報 気になる求人があったのですが、、、 年間休日:105日 休日:日、祝日 土曜日の出勤が月に2~3日 1 2022/12/03 10:55
- Java Java、配列の問題を教えて欲しいです。 ・日、月、火、水、木、金、土 ・各曜日の英語 を2次元配列 2 2023/07/10 19:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【関数】スペースがいくつ入っ...
-
西暦や和暦の表示をyyyymmdd表...
-
【Microsoft Office Excel Comp...
-
Excelはなんで先頭の0を消すん...
-
Excelのセルを飛ばして入力する
-
別シートからの文字を変更
-
エクセルの行の抽出について質...
-
Excelのオートフィル
-
Excel 2019 のピボットテーブル...
-
スプレッドシート クエリ関数 1...
-
excelの不要な行の削除ができな...
-
Excel初心者です。 詳しい方、...
-
【Excel】セル内の時間帯が特定...
-
Excel初心者です。 詳しい方、...
-
EXACT関数とIF関数の組み合わせ...
-
Excelのグラフ軸について
-
スマートな関数を教えて下さい。
-
Excelで全角を半角にしたいので...
-
【マクロ】エクセルにかいてあ...
-
Excel:一部のフォントでセルの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル内にある数字の出現回...
-
Excel関数の先頭に「@」が入っ...
-
エクセルの気味悪い不思議
-
Excel VBAで、実行時にsheet上...
-
表示されている人数だけを数え...
-
他人が作ったマクロの理解
-
Excelの関数について質問です。
-
Excel 集計表
-
エクセル 日時の計算式について
-
Excelの関数に関して質問です。...
-
エクセル:セル内の文字列の下...
-
絞り込み検索
-
エクセルの関数で
-
エクセルの書式設定について教...
-
余分なEXCELファイルに印刷され...
-
VBA 同一シート内での転記の仕方
-
長期休みの関数はありますか
-
Excelの空のセル
-
エクセルで入力してある文を別...
-
Excelのマクロで、セルを結合し...
おすすめ情報