- 締切済み
期間内の対象月を配列の変数にして順次呼び出したい
開始日2009/3/21 A 締め日2009/5/20 B という3月以上にまたがっている場合、変数AとBから3 4 5と取り出し、変数BNを配列としてその要素に3 4 5を組み入れたいのですが、良い方法はあるでしょうか? http://okwave.jp/qa4961912.htmlで別パターンなのですが、 前回までの質問の分は、皆様のお力をお借りして、対象ファイルをDo~Loopを用いダイアログ上で複数選択させ、別途請求対象期間により複数ファイルを統合、抽出、集計という流れで完成しました。有難うございました。 今回は、初めに請求対象期間から、対象月のファイルを順次選択させ、統合、抽出、集計という流れで進めたいのです。(対象月のファイルは月ごとのフォルダに一つずつ入っています。) 例として 開始日2009/3/21 A 締め日2009/5/20 B の場合 BNという変数に3 4 5と取り込みたいのです。 その後は3月のファイル、4月のファイル、5月のファイルと順次開き各ファイル中の対象シート(契約コード名)を処理してゆく流れです。 BN = Month(B)のように単月では取り出せるので通常の請求(3/21~4/20)みたいなのはOKなのですが、例示のように3月以上に跨った場合の対象月の取り出し方法が解りません。皆様お助け下さい。 以下その周辺のコードです。 この上は省略してます ’●複数対象コードの選択 省略 '●請求対象期間の入力 A = Application.InputBox("請求対象期間(開始日)を入力してください。", "開始日", "2009/3/21", Type:=2) If A = False Then MsgBox " Cancel ボタンが押されました" Exit Sub End If B = Application.InputBox("請求対象期間(締め日)を入力してください。", "締め日", "2009/4/20", Type:=2) If B = False Then GoTo OWARI End If If A > B Then MsgBox A & "~" & B & " は請求日と締め日が逆転してます。", vbOKOnly + vbCritical, "最初からやり直して下さい。" GoTo OWARI End If D = B - A MsgRec = MsgBox(A & "~" & B & "分でよろしいですか?", vbOKCancel + vbQuestion, "対象は" & D + 1 & "日分です") If MsgRec = vbCancel Then MsgBox " Cancel ボタンが押されました" Exit Sub End If '検索ブック名と検索パスを設定 省略 '**明細の選択** ←この辺でA(開始日)とB(締め日)からBNに対象月を取り込みBNを配列にしたい。 Mypath = ThisWorkbook.Path & "\明細書一覧" & "\" & BN & "月" MyFile = "明細書一覧" & BN & ".xls" 'ここにファイル名記入 ←この辺でMypath & MyFileをOpenFileNameにしたい。 For i = LBound(OpenFileName) To UBound(OpenFileName) ←この辺は自信が有りません。 Workbooks.Open OpenFileName(i) ' *****ここから計算**** For Each SH2 In Sheets '(名前)が名前になったシートがある場合の処理 For q = 1 To myGetNames.Count On Error GoTo warp If myGetNames(q) = Left(SH2.Name, InStr(SH2.Name, "(") - 1) Then On Error GoTo 0 '***統合処理開始*** 以下省略
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
まずVBAの質問らしいが、VB.VB.NETの別を、まず標題に書くこと。回答が変わることが多い。 我流のコードなど長々と読者に読ませないで、実例をもう1,2例増やしてくれたほうが判りやすい。 エクセルの場合で、日付がヒヅケシリアル値(この意味判ってますか。対するのは文字列で入っているなど)こんなのMonth関数を使って A1=2009/3/21 、B1=2009/5/20 の場合、 Bn="" For m=month(A1) to Month(b1) k(i)=Bn & m & " " Next m Msgbox n で仕舞いではないか。 その後結果をどうするのか 誤解している点、難しいと思った点をもっと絞って質問のこと。 == 質問の始めの部分と >For i = LBound(OpenFileName) To UBound(OpenFileName) ←この辺は自信が有りません。 Workbooks.Open OpenFileName(i) などはどう関係が有るのか。 わからない部分は質問の回答を得て、関係ないところとのつなぎなど質問者自信がやること。この質問コーナーはヒントをもらう場である。
お礼
Mcnt = Month(B) - Month(A) + 1 ReDim BN(1 To Mcnt) i = 0 For Month = Month(A) To Month(B) i = i + 1 BN(i) = Month Next で配列に組み入れました。参考になった部分は For M = Month(A) To Month(B)でした。 これからBN(i)を廻し、質問点の2番目の Mypath = ThisWorkbook.Path & "\明細書一覧" & "\" & BN & "月" MyFile = "明細書一覧" & BN & ".xls" 'ここにファイル名記入 をそれぞれ Mypath = ThisWorkbook.Path & "\明細書一覧" & "\" & BN(i) & "月" MyFile = "明細書一覧" & BN(i) & ".xls" 'ここにファイル名記入 に変更しOpenFileNameに関連させ、対象ファイルを順次開く作業を継続させます。
補足
ヒントを頂き 月の数字は For M = Month(A) To Month(B) で順次取り出せることに気づきました。(あっそうか!的でした) 対象月の要素数は Mcnt = Month(B) - Month(A) + 1 でOKですね。 しかし残念ながら For i = 1 To Mcntの後 変数BNに3 4 5を(例ではBN(i)をBN(1)は3 BN(2)は4 BN(3)は5) と指定してゆく方法が解らないのです。(配列に組み込む) 教えてもらえませんでしょうか?