- ベストアンサー
VBAの繰り返し作業について
VBAで以下のような作業をしています。 (1)エクセルの任意のセルに日付(営業日)を入力する (2)VBAでその営業日のファイル(ファイル名=営業日)を展開、集計し、別ファイルとして保存する (1)の日付を変更してVBAを実行すれば他の日のデータが作成できるのですが、 数年分のデータの作業をする必要があり、(2)が終わったら(1)の営業日を1日後にし、 指定日まで繰り返し作業をさせるようにしたいです。 (2012/7/13が終わったら2012/7/16を作成する) 営業日は月~金で、祝日も営業日です。 有効な方法をご存じの方がいらっしゃいましたらご教示お願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
(1)のセルをA1セルとして (2)のマクロはMacro1として作成済みだとして sub macro2() dim a as date dim b as date dim i as long a = inputbox("start yyyy/m/d") b = inputbox("end yyyy/m/d") for i = a to b if weekday(i, vbmonday) < 6 then range("A1") = i call macro1 end if next i end sub
その他の回答 (1)
- nicotinism
- ベストアンサー率70% (1019/1452)
ファイル名の命名規則はどうなっていますか? そこが分からないと核心には迫れないかと。 例、2012_7_1 Or 2012_07_01 Or H240701 Or ・・・ 取りあえず考えられるのは、 一個のフォルダ内に全てまとまっているとして 新規Bookをそのフォルダ内に作成(保存)し Sub sumple() Dim basePath As String Dim fromDay As Date, toDay As Date Dim fName As String Dim i As Long fromDay = InputBox("いつから?") toDay = InputBox("いつまで?") basePath = ThisWorkbook.Path For i = fromDay To toDay 'ここでファイル名の変換処理が行われているとして 'fName = functionXYZ() If Dir(basePath & "\" & fName) <> "" Then 'ファイルが存在した場合 '質問中の(2) の処理 End If Next End Sub のようになるかと思います。 懸念される事。 Excel2007以降では拡張子がXLS→XLSXもあります。 数年分のデータなので、中には20101115改.xls なんてのもあるかも? シートのフォーマットが変わっていて、(2)の処理でエラー発生。 なども考えると 適当なシートにFor ループの処理が行われたのか、Dir関数で"" だったのか などなどをエラー処理で書き出す必要があるかもしれない。 当初、WeekDay関数で土日をスキップ・・とも考えましたが 仕事が長引いてファイル名が翌日(休日)になってしまっている、 お盆・正月休業や○/△日は創立記念日でお休みなども考えると 期間中を逐一ループして・・・が無難かと思います。
お礼
ご回答ありがとうございます。 こちらの情報に不十分な点があり失礼しました。 命名規則はyyyy/m/dとなっています。 データはすべて今年エクセル2010で出し直していますので拡張子はxlsxです。 ファイル名はすべて月曜~金曜で、祝日等のイレギュラーはありません。 Inputboxを使用した方法は今後の参考にしたいと思います。 ありがとうございました。
お礼
ご回答ありがとうございます。 上記コードの追加で望んでいた処理ができました。 weekdayの使い方、勉強になりました。 別のVBAでも使わせて頂きたいと思います。 ありがとうございました。