解決済
VBAで稼働日を求めたいのですがうまく出来ずに困っています。
A列:日付2008/1/1~2009/3/31まで入っています。
B列:『休』とお休みに該当した日をいれます。(土日とは限らない)
例として1月1日(A1セル)が休みとしたらB1セルに『休』と入れお休み表にします。
C列:適当な日を手入力します。(規則性は全く無し)
D列:C列の3稼働日後を入れたいです。
AやB列からどうスキャンし3稼働日後を出したらよいのか…
説明だと分かりづらいかもしれませんのでこんな感じの結果を得たいエクセルがあるので見ていただいた方が分かるかとも思います。
どなたかヒントでもあれば教えて下さい。
お願いします。
2008-06-12 22:23の質問
この質問と回答を読んで役に立った場合は「役に立つ質問」に投票してください。投票が多い質問は、役に立つ質問一覧に掲載され、より多くの人に見てもらうことができます。
Ads By Google
回答(3)
3.
2008-06-14 10:17:05

Option Explicit
Sub Macro1()
Function F_SearchRow(d As Date) As Long
Function F_Search3Kadoubigo(wRow As Long) As Variant
rem 2/11の3稼働日後は、2/18じゃなくて2/15ですよね???
Sub Macro1()
Dim r As Long, FoundRow As Long
Dim d As Variant
For r = 2 To Cells(65536, 3).End(xlUp).Row
d = Cells(r, 3).Value
If IsDate(d) Then '日付だったら
FoundRow = F_SearchRow(Cells(r, 3).Value)
If FoundRow > 0 Then
Cells(r, 4).Value = F_Search3Kadoubigo(FoundRow)
End If
End If
Next
End SubFunction F_SearchRow(d As Date) As Long
Dim r As Long
For r = 2 To Cells(65536, 1).End(xlUp).Row
If d = Cells(r, 1).Value Then
F_SearchRow = r
Exit Function
End If
Next
r = 0 '該当日付がなかったら0
End FunctionFunction F_Search3Kadoubigo(wRow As Long) As Variant
Dim r As Long, ct As Integer
ct = 0
For r = wRow To Cells(65536, 1).End(xlUp).Row
If Cells(r, 2).Value <> "休" Then
ct = ct + 1
If ct = 3 Then '3稼働日後を探せたら抜ける
F_Search3Kadoubigo = Cells(r, 1).Value
Exit Function
End If
End If
Next
F_Search3Kadoubigo = "3日後不明"
End Functionrem 2/11の3稼働日後は、2/18じゃなくて2/15ですよね???
ありがとうございます。ちょっと仕様が変わってしまったので追加書き込みしてあります。
1.
2008-06-13 02:20:50
土日は、稼働日に入らない様ですが、祝日は別にデータを持つのでしょうか?
何にしても、
今調べようとしている稼働日が
「休」マークが付けられているか、
マークは無いが、土日祝日であるなら、スキップしつつ、3日分数えればいいと思います。
何にしても、
今調べようとしている稼働日が
「休」マークが付けられているか、
マークは無いが、土日祝日であるなら、スキップしつつ、3日分数えればいいと思います。
回答レベル : アドバイス
2.
2008-06-13 16:14:50
>AやB列からどうスキャンし3稼働日後を出したらよいのか…
半分だけですけど、理解できますか?
Sub test()
Dim i, j, sagasu
For i = 2 To 18
End Sub
半分だけですけど、理解できますか?
Sub test()
Dim i, j, sagasu
For i = 2 To 18
Cells(i, 3).Select
sagasu = Cells(i, 3).Value
For j = 2 To 92
If Cells(j, 1).Value = sagasu Then
MsgBox j
End If
Next
NextEnd Sub
Ads By Google
コメント(4)
#1. Lode_Runner
2008-06-14 09:32:00
Dim i, j, sagasu じゃ
Variant宣言と一緒ですが…
#2. Lode_Runner
2008-06-14 10:19:07
65536は、Excel2003までのExcelの最大行数ということで了承してください。
#3. BLUEPIXY
2008-06-15 00:50:26
3>2/11の3稼働日後は、2/18じゃなくて2/15ですよね???
土日を除くという仕様だと解釈しましたが・
#4. はち
2008-06-15 15:07:24


