• ベストアンサー

VBAで対象となる月の数を出す方法を教えて下さい。

end-uの回答

  • end-u
  • ベストアンサー率79% (496/625)
回答No.3

>しかし、Format$の 「$」の意味が解りません。 Format関数やReplace関数など、文字列を扱う関数には、$が付いた関数があります。 $付き関数は文字列型の値を返し、付いていないものはバリアント型の値を返します。 例えば、文字列型変数に受ける場合は、この$付き関数を使った方が速度的にも有利とされています。 ...が、今回のケースはあまり気にする事はないでしょう。 普段から、あまり意識して使い分けてるわけではないので適切ではなかったかもしれません。 参考にされるなら以下のサイトなど。 http://www.tsware.jp/labo/labo_32.htm http://hanatyan.sakura.ne.jp/vbhlp/sonota_no1.htm

yokokama46
質問者

お礼

end-uさん。いつもお世話になります。「$」を最初に見たとき、byteタイプ?だったかな。と思い調べましたが違い、Like演算子にはなかったよなぁとか思い調べてみたのですがこれもやはり違い。結局頼ってしまいました。文字列型だったのですね。バリアント型と文字列型でメモリ容量の問題で文字列型型が有利。しかし、変換効率は元の型と置き換わってしまうかににもよるので、元が文字列型で、変換先も文字列型に変換して問題がないのなら、$をつけて行った方が有利ということなのですね。勉強させてもらいました。しかし、自分では。探せずにお手数かけました。ありがとうございました。いま、請求関係で焦りながら手探り状態です。しばらくの間OKWAVEに頻繁に出没してしまいそうですので、また助けて下さい。本当に有難うございました。YOKOKAMA46

関連するQ&A

  • 期間内の対象月を配列の変数にして順次呼び出したい

    開始日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 '***統合処理開始*** 以下省略

  • ダイアログで選択させたファイルの重複防止を教えて下さいませ

    http://okwave.jp/qa4955154.htmlの続きなのですが、 下記コードのようにDo~Loopでダイアログを廻し対象ファイルを選択してもらうのですが、コードの書いてあるBOOKの選択は防止しているのですが、選択済みのファイルを選択してしまうことを下記コード中の '*****同じファイルの選択防止            ←ここを作りたいのです '*****同じファイルの選択防止完了 ここの部分に記入したいのです。 ダブリがあってもそのまま進むのですが、例示コードより先の開いたファイルを閉じる部分でエラー(Do~Loopで閉じてゆくので、既に閉じているものを閉じようとする結果) ダブリ選択は、集計が狂うので防がなければならないのですが、ダイアログ上では無理な気がするので、全て選択後の選択ファイルのコレクションをチェックさせたいのです。 どなたかお助け願えませんでしょうか? Do BN = Application.InputBox("元となる対象明細書一覧の年月を入力してください。1桁の月は02月のように入力)", , Default:="2009.04", Type:=2) If BN = False Then '入力なければ GoTo OWARI End If WorkPath = ThisWorkbook.Path & "\明細書一覧" & BN & "月" ChDrive WorkPath ChDir WorkPath mySelectFile = Application.GetOpenFilename(FileFilter:="Microsoft Excelブック,*.xls", _ Title:="対象の明細書を選んで下さい。Ctrlキーを押しながら複数ファイルを同時に選択出来ます。", MultiSelect:=True) '●●●選択ファイルをCollectionに登録 If IsArray(mySelectFile) Then myGetFiles.Add mySelectFile End If Rtn = MsgBox("他にも対象ファイルがありますか?", vbYesNo, "選択") If Rtn = vbNo Then Exit Do End If Loop '●●●Collectionの展開 If myGetFiles.Count = 0 Then MsgBox "ファイルがひとつも選択されていません!" GoTo OWARI End If Mypath = ThisWorkbook.Path MyFile = "\請求制御.xls" 'ここにファイル名記入 cnt = 0 '●myGetFilesのチェック cnt = 0 For Each OpenFileName In myGetFiles For i = LBound(OpenFileName) To UBound(OpenFileName) cnt = cnt + 1 If OpenFileName(i) = Mypath & MyFile Then MsgBox "同じファイルが含まれてます。", vbInformation, "同じファイルは選択出来ません" GoTo OWARI End If '*****同じファイルの選択防止              ←ここを作りたいのです '*****同じファイルの選択防止完了 tmp = tmp & Dir(OpenFileName(i)) & vbCrLf Next i Next OpenFileName '●選択したファイルの一覧化及び数量の表示 MsgBox vbCrLf & tmp & vbCrLf & "の全" & cnt & "枚です" & vbCrLf & "これらでよろしいですか? ", vbInformation, "選択したファイルは "

  • エクセルVBAでConsolidate

    以下は、ネット検索で見つけたサンプルコードです。 同じフォルダ内の全ブックのSheet1のA1:B10をThisWorkbookのSheet1に統合しています。 Sub test2() Dim MyFile As String, MyPath As String Dim SumFile() As Variant, i As Long MyPath = ThisWorkbook.Path & "\" MyFile = Dir(MyPath, vbNormal) Do Until MyFile = "" If MyFile <> ThisWorkbook.Name Then ReDim Preserve SumFile(i) 'A1からB10の値を変数に代入 SumFile(i) = "'" & MyPath & "[" & MyFile & "]Sheet1'!R1C1:R10C2" i = i + 1 End If MyFile = Dir Loop If i = 0 Then MsgBox "データが有りません": Exit Sub Worksheets("Sheet1").Range("A1").Consolidate Sources:=SumFile() End Sub 質問1 Sheet1だけでなく全シートのA1:B10をThisWorkbookのSheet1に統合するためにはどう書き換えればよいのでしょうか? 質問2 上記コードではなぜ、ブックを開かずにデータがとれるのでしょうか?

  • ダイアログボックスで複数フォルダの複数ファイルの選択

    ダイアログボックスで複数フォルダの複数ファイルの選択がうまくいきません。 単一フォルダ内からの複数ファイルの選択は機能しているのですが、ダイアログボックスで他のフォルダを選択して他のファイルを選択すると最終的に選択したファイルのみが残り、先に選択した分が累積されません。  OpenFileNameが上書きされるのが原因な気がするのですが配列への累積処理が解りません。 その後の処理で選択したファイルを全て開いて加工したいので、累積させる方法を知りたいのです。下記コードはLoop処理で行おうとして累積が解らないままのものです。 一度のダイアログ表示で複数フォルダの複数ファイルを選択出来る方法があればそれでもかまいません。どなたか助けては頂けないでしょうか。お願いします。 '**明細の選択(複数同時)** Do BN = Application.InputBox("対象明細書の年月を入力してください。1桁の月は02月のように入力)", , Default:="2009.04", Type:=2) If BN = False Then '入力なければ GoTo OWARI End If WorkPath = ThisWorkbook.Path & "\明細書一覧" & BN & "月" ChDrive WorkPath ChDir WorkPath OpenFileName = Application.GetOpenFilename(FileFilter:="Microsoft Excelブック,*.xls", _ Title:="対象の明細書を選んで下さい。Ctrlキーを押しながら複数ファイルを同時に選択出来ます。", MultiSelect:=True) Rtn = MsgBox("他にも対象ファイルがありますか?", vbYesNo, "選択") If Rtn = vbNo Then Exit Do End If Loop Mypath = ThisWorkbook.Path MyFile = "\請求制御.xls" 'ここにファイル名記入 If IsArray(OpenFileName) Then For i = 1 To UBound(OpenFileName) If OpenFileName(i) = Mypath & MyFile Then MsgBox "同じファイルが含まれてます。", vbInformation, "同じファイルは選択出来ません" GoTo OWARI End If tmp = tmp & Dir(OpenFileName(i)) & vbCrLf Next MsgBox vbCrLf & tmp & vbCrLf & "の全" & i - 1 & "枚です" & vbCrLf & "これらでよろしいですか? ", vbInformation, "選択したファイルは "

  • 一部マクロを変更したいので教えてください。

    現在、下記のようなマクロを使用しています。 Sub sample() Dim myFile As String, myPath As String, i As Long Application.ScreenUpdating = False myPath = InputBox("フルパスでフォルダーを指定") myFile = Dir(myPath & "\*.xls", vbNormal) Do Workbooks.Open myPath & "\" & myFile For i = 1 To ActiveWorkbook.Sheets.Count If WorksheetFunction.CountA(Sheets(i).Range("B7:B11")) = 0 Then Sheets(i).Range("B7") = "*" End If Next ActiveWorkbook.Close True myFile = Dir() Loop While myFile <> "" Application.ScreenUpdating = True MsgBox "完了 !!" End Sub 上から4行目のmyPath = InputBox("フルパスでフォルダーを指定")を パスを入力するマクロではなくてもっと簡単にフォルダを選択するマクロに変更したいのですが どうすればいいですか?

  • VBAのDirをつかってブックを検索した後のことについて。

    VBAのDirをつかってブックを検索した後のことについて。 お世話になっております。 以下のコードでファイルを開いたものをアクティブにするにはどうすればよろしいでしょうか? 流れ 1)以下のコードでブックを開き、このブックのセルを検索、コピー 2)貼り付けブックを開いて貼り付け 3)もう一度以下のブックで開いたブックのセル検索、コピー 4)貼り付けブックに貼り付け 流れの3)でつっかかってます。 どうか宜しくお願い致します。 ///コード/// Dim myPath As String Dim myFile As String myPath = "C:\Documents and Settings\1234567\デスクトップ\棚卸" & "\" myFile = Dir(myPath & "*棚卸一覧表(1G).xls") If myFile <> "" Then Workbooks.Open Filename:=myPath & myFile Else MsgBox "ファイルは見つかりませんでした" End If

  • excel マクロ PDF化の際のエラーについて

    エクセルブックを一括で名前をつけてpdfに変換するようなマクロを作ろうとして作ってみました。 基本は、マクロで印刷を一気に行う要領でpdfをアクティブプリンタに設定したのですが、見かけ上pdfファイルが作成されるものの、開くと破損していますとなってしまい、きちんとpdf化が出来ていないようです。 システムフォントを利用~のエラーは回避できたのですが、無理やりファイル名を指定しているせいでこのようになっているのでしょうか。 お手数ですがアドバイスをお願いします。 マクロの記録ではアクティブプリンタを指定して、プリントアウトというものしか記録されないので、プリントアウトのところが何か間違っているとは思うのですが・・・ 以下コードです。 Sub PrtPDF() Dim MyFile As String, MyPath As String Dim wb As Object Dim fn As String If vbNo = MsgBox("フォルダ内のブックの一括印刷を行いますか?", vbYesNo) Then GoTo CloseFile Dim bookname1 As String bookname1 = "Conv.xls" MyPath = ThisWorkbook.Path & "\" '自分のパスを取得 MyFile = Dir(MyPath & "*.xls", vbNormal) 'パス内のxlsファイル If LCase(MyFile) = LCase(bookname1) Then MyFile = Dir 'MyFileとbookname1が同じファイルの場合スキップする Do Until MyFile = "" '対象ファイルがなくなるまで Set wb = Workbooks.Open(MyPath & "\" & MyFile) '選択したファイルを開く fn = MyPath & "PDF\" & Range("J4").Value & ".pdf" 'アクティブシートを印刷する。 Application.ActivePrinter = "Adobe PDF on Ne07:" ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, PrtoFileName:=fn 'アクティブブックを閉じる。 ActiveWorkbook.Close MyFile = Dir '次のファイルを検索 If LCase(MyFile) = LCase(bookname1) Then MyFile = Dir 'MyFileとbookname1が同じファイルの場合スキップする Set wb = Nothing Loop '繰り返し GoTo ProcessEnd CloseFile: ActiveWorkbook.Close MsgBox "処理を中止しました。" Exit Sub ProcessEnd: MsgBox "処理が終了しました" End Sub

  • Application.DisplayAlerts =Falseでも警告される?

    下記のコードを実行するとSheet1という名前のシートがないBookを開いた場合、「統合元ファイル○○のSheet1を開けません」という警告がでます。 無ければ集計しなくていいので「はい」を押せばいいのですが、その都度止まってしまうのは困ります。 Application.DisplayAlerts = False としても警告されるのはなぜでしょうか?出ないようにすることは出来ないのでしょうか? Sub test03() 'Sheet1のみ開かずに統合 Dim MyFile As String, MyPath As String Dim SumFile() As Variant, i As Long MyPath = ThisWorkbook.Path & "\" MyFile = Dir(MyPath & "*.xls", vbNormal) Do Until MyFile = "" If MyFile <> ThisWorkbook.Name Then ReDim Preserve SumFile(i) Application.DisplayAlerts = False SumFile(i) = "'" & MyPath & "[" & MyFile & "]Sheet1'!R1C1:R10C2" 'A1からB10のLinkを変数に代入 Application.DisplayAlerts = True i = i + 1 End If MyFile = Dir Loop If i = 0 Then MsgBox "データが有りません ( ̄□ ̄;)!!": Exit Sub Worksheets("Sheet1").Range("A1").Consolidate Sources:=SumFile() End Sub

  • VBAでご相談です!

    Excel2010使用。 VBA初心者です。 VBAでご相談させて下さい。 複数のファイルを1つにまとめる 作業をしたいと思い、ググったところ あるサイトで下記のコードを見つけました。 ただ、このコードでは、ファイルをダイアログから 選択する形になります。 これを、ファイルを指定した状態で実行させたいと思い、 自分で試してみたのですが、上手くいきませんでした。 同一フォルダ内には4つのファイルがあり、全て同じ様式の シートが複数あります。ただ、フォルダ名が毎月変更になります。 この同一フォルダ内のデータの中の特定のシートを一つのシートに まとめたいと考えているのですが、可能でしょうか? 可能であれば、アドバイスいただけるとありがたいです。 Sub sample() Dim myPath As String Dim wb_A As Workbook, wb_B As Workbook Dim i As Long, s As Long myPath = Application.GetOpenFilename(("Excel ファイル (*.xls), *.xls"), , "データを蓄積するブックを選択して下さい。") If myPath = "False" Then Exit Sub Set wb_A = Workbooks.Open(myPath) myPath = Application.GetOpenFilename(("Excel ファイル (*.xls), *.xls"), , "データを取得するブックを選択して下さい。") If myPath = "False" Then Exit Sub Set wb_B = Workbooks.Open(myPath) With wb_B For i = 1 To .Worksheets.Count 'wb_Bループ For s = 1 To wb_A.Worksheets.Count 'wb_Aループ '同じ名前のシートがあるとき データコピー If .Worksheets(i).Name = wb_A.Worksheets(s).Name Then .Worksheets(i).Range("A1").CurrentRegion.Copy _ wb_A.Worksheets(i).Range("A65536").End(xlUp).Offset(1) Exit For End If '同じ名前のシートが無いとき シートコピー If s = wb_A.Worksheets.Count Then .Worksheets(i).Copy Before:=wb_A.Sheets(1) End If Next s Next i wb_B.Close False MsgBox "完了" End With End Sub ※長文、説明下手で申し訳ありませんが よろしくお願いします。 <参考URL>   http://www.excel.studio-kazu.jp/kw/20040709212700.html

  • Excel 2010 VBA:ファイル名を読み込む

    下は複数のcsvファイルを一つに合体するVBAです。これにシートの右端に読み取ったファイル名を追加するにはどうしたらよいでしょうか。 よろしくお願いします。 Sub macro1() Dim myPath As String Dim myFile As String Dim s As String myPath = ThisWorkbook.Path & "\" On Error Resume Next Kill myPath & "合体版.csv" On Error GoTo 0 myFile = Dir(myPath & "*.csv") If myFile = "" Then Exit Sub Open myPath & "合体版.csv" For Output As #1 Do Until myFile = "" Open myPath & myFile For Input As #2 Do Until EOF(2) Line Input #2, s Print #1, s Loop Close #2 myFile = Dir() Loop Close #1 End Sub