- ベストアンサー
どれくらい容量を増やせばE:ドライブにコピペ可能?
J:ドライブからE:ドライブに最新の(2週間以内)のファイルをコピペしていますが 途中でE:ドライブが満杯でコピペ出来なくなりました。 CD /D %TEMP% C:\Windows\System32\Robocopy.exe J:\ E:\ /S /MAXAGE:14 /XD "System Volume Information" "$RECYCLE.BIN" 後どれくらいの容量を増やせばE:ドライブにコピペ出来るかはチェックできますか ? とりあえずE:の不要そうなファイルを削除して完了まで進めたい。
- みんなの回答 (19)
- 専門家の回答
質問者が選んだベストアンサー
> type:=1 でも Type:=2としなくても良いと言う事になりますよね ? type:=1にしないとボックスへの入力時に数字以外の規制をしてくれなくなります。 多分ですが、エクセルが受ける側に合わせて型変換してくれているのではと思います。 たとえば、普通のInputBoxは数字を入れても戻り値はStringですが、Longで受けてもエラーにはならないのでそんな感じです。 Application.InputBoxは指定した型が戻り値です。 「型変換するよ」ということで以下のようにしておくと違和感がないかもしれません。 Temp = CStr(Application.InputBox(prompt:="何日前からのファイルをコピペしますか ?", Title:="日数指定 (Max=14)", Type:=1)) ちなみに FixDay = CByte(Temp) を FixDay = Temp にしてもエラーになりません。 多分、他の言語だと今回のように型変換しない場合は、全てのパターンでエラーだと思います。
その他の回答 (18)
- notnot
- ベストアンサー率47% (4900/10358)
> 私の考えた方法は、 コピー先にすでに同名ファイルがあって、上書きされる物もあると言うことですね。 >1)以下でJ:ドライブの1/2以降の日付のファイルを拾い出してEXCEL(CSV)で保存する これは良いとして、 > 2)以下でE:ドライブの1/2以降の日付のファイルを拾い出してEXCEL(CSV)で保存する じゃなくて、日付指定無しで( /d +2023/01/02 の部分を消す)、全ファイルのリストを作って、そのうち、1)とディレクトリ・ファイル名が一致する物だけ抽出して、そのファイルのサイズ合計が上書きで亡くなるサイズなので、1)のコピーされるサイズからそれを引けば良いかと思います。 > ちゃんとやるにはファイルのサイズをクラスターサイズ単位にするようにしていますが > 私が知らないクラスターサイズでやったほうがMB単位より正確に出るとのことでしょうか ? クラスターサイズが4096だとすると、ファイルサイズ2000のファイルを作った場合、ディスク上では4096バイト分のディスクエリアを使用します。4097バイトのファイルを作ると、8192バイトになります(圧縮設定をしていない場合)。ファイルの物理的な割り当て単位がクラスターだからです。 ファイルのプロパティーを見ると、「サイズ」と「ディスク上のサイズ」の2つのバイト数が書いてあります。 2000バイトのファイル2つを新規コピーするためには、コピー先に4000バイトじゃなくて8129バイトの空きが必要と言うことですが、わかりますか? 細かいことを言うと、サイズが数百バイトのファイルはディスク上の記憶場所が違うので、プロパティーの「ディスク上のサイズ」が0と表示されます。実際にはゼロの訳ないのですが説明は細かいので略。
お礼
notnotさん、アドバイスありがとうございます。 kkkkmさんから教えてもらったコードが 思うような結果が出ないのであせっています。 すいませんが、 notnotさんのアドバイスを検討する余裕がないので少し時間をください。 そのため、返事が遅れますがご容赦いただけますと幸いです。
補足
notnotさんへ、 >コピー先にすでに同名ファイルがあって、上書きされる物もあると言うことですね。 ターゲットファイルがmp3なので日々更新されるなどは考えにくいのですが リマスター版などでは同一ファイル名でもサイズが異る事が有りえます。 (但しフォルダー名が異なると思うので可能性は低いです。) kkkkkmさんのアドバイスでうまく処理は出来るようになりましたが スレが伸びすぎて見通しが流石に悪くなりました。 このスレはこれで閉じたいと思います。 勉強の為アドバイスを受けた方法も試してみます。 上手くいかなかったら新しく質問しますね。。
- kkkkkm
- ベストアンサー率66% (1719/2589)
Sub GetFileInfo(ByVal FrmDir As String, ByRef i As Long, ByVal FixDay As Integer) 訂正です Function GetFileInfo(ByRef FrmDir As String, ByRef i As Long, ByRef FixDay As Integer) にしてください。癖でSubやByValにしてましたが再帰の場合はByRefの方がいいと思います。
- kkkkkm
- ベストアンサー率66% (1719/2589)
> コードの不備が原因でハング状態になりました。 お礼のコードそのままで(input部分は入力が面倒なので直接値を指定しました)問題なく終わりました。 エラーの原因かどうかはわかりませんが 保存側の存在確認が無いように思います。 If Not objFSO.FolderExists(ToDir) Then MsgBox ("保存側:指定のフォルダは存在しません") Exit Sub End If 以下はエラーとは関係ないですが Range(i & ":" & i).Delete は Rows(i).Delete でいいと思います。 FixDayはマイナスでいくと思うのでそれがわかるようにした方がいいと思います。 Dim FixDay As Integer グローバル変数にしていますが Sub フォルダとファイル一覧取得_階層考慮() のローカル変数にして GetFileInfoの引数にしたほうがいいような気もします。 Sub GetFileInfo(ByVal FrmDir As String, ByRef i As Long, ByVal FixDay As Integer) Call GetFileInfo(FrmDir, i, FixDay) ↑2か所 あと、サイズの計算ですがたとえば500kのファイルが7個だとしたら 送る側の総容量 =7MB 1GB となりますがいいのでしょうか。
お礼
kkkkkmさん、現状連絡です。 シートが又破壊したのかと新規にエクセルを立ち上げて コードを書き込んで試してみました。 Function GetFileInfo の処理でものすごく時間が掛かっているようです。 そのため、見た目ハングしているよう状態になっています。 30分程度で以下のようにB列のみに4行だけ出力が有りました。 あまりの遅さにctrl+Breakでマクロを強制終了しました。 kkkkkmさんの方では、問題ないとの事ですが こちらの環境(読み出し側のHDD)がやはり何かおかしいようです。 |[A]|[B] |[C]|[D]|[E]|[F] [1]| | | | | | [2]| |~CF21.tmp| | | | [3]| |~9FB2.tmp| | | | [4]| |~7043.tmp| | | | [5]| |~40D4.tmp| | | | [6]| | | | | | [7]| | | | | | 訂正アドバイスを受けて以下のように修正しました。 サイズの計算(送る側の総容量)の修正は、まだ途中なのでおかしなママです。 肝心の異常な遅さを解決する方を優先としました。 '--------------------------------------------------------------- Option Explicit ' ----- MIcrosoft Script Runtime 導入の事 ----- Sub フォルダとファイル一覧取得_階層考慮() Dim objFSO As FileSystemObject Dim FrmDir As String, ToDir As String Dim i As Long Dim FDS As String Dim FixDay As Integer FrmDir = InputBox("どこから (J)", "送る側のドライブレター") FrmDir = FrmDir & ":\" ToDir = InputBox("どこへ (E)", "保存側のドライブレター") ToDir = ToDir & ":\" FixDay = InputBox("何日前からのファイルをコピペしますか ?") '日付指定はマイナス (プラスで指定したら符号反転) If FixDay > 0 Then FixDay = -FixDay Set objFSO = New FileSystemObject '送る側のドライブの存在確認 If Not objFSO.FolderExists(FrmDir) Then MsgBox ("指定のフォルダは存在しません") Exit Sub End If '保存側のドライブの存在確認 If Not objFSO.FolderExists(ToDir) Then MsgBox ("保存側:指定のフォルダは存在しません") Exit Sub End If '指定ドライブの空き容量(MB) FDS = Format(objFSO.GetDrive(ToDir).AvailableSpace / 1024 / 1024, "#,##") 'MB i = 2 'シートの2行目から出力 Call GetFileInfo(FrmDir, i, FixDay) Dim lc As Long, ii As Long Dim CSize As Long '処理行の総数(空白行を含む) lc = Cells(Rows.Count, "C").End(xlUp).Row Application.ScreenUpdating = False '空白行の削除 For i = lc To 1 Step -1 If Cells(i, "C").Value = 0 Then Range(i).Delete End If Next i Application.ScreenUpdating = True '処理行の総数(空白行を削除後) lc = Cells(Rows.Count, "C").End(xlUp).Row 'C列をMB単位に換算してE列に書き出す Dim target For i = 1 To lc target = Cells(i, "C").Value Range("E" & i).Value = WorksheetFunction.RoundUp(target / 1024, 1) 'MBに換算 Next 'E列の合計を算出 For i = 1 To lc CSize = WorksheetFunction.Sum(Range("E1:E" & ii)) Next '合計数を表示(MB & GB) MsgBox "送る側の総容量 = " & CSize & " MB" & vbCrLf & _ " " & WorksheetFunction.RoundUp(CSize / 1024, 1) & " GB" & vbCrLf & _ "空き容量 = " & FDS & "MB" Set objFSO = Nothing End Sub Function GetFileInfo(ByRef FrmDir As String, ByRef i As Long, ByRef FixDay As Integer) Dim objFSO As FileSystemObject Dim objFolder As Folder Dim objFolderSub As Folder Dim objFile As File Set objFSO = New FileSystemObject Set objFolder = objFSO.GetFolder(FrmDir) 'サブフォルダ一覧 On Error Resume Next For Each objFolderSub In objFolder.SubFolders '再帰 Call GetFileInfo(FrmDir, i, FixDay) Next 'ファイル一覧 For Each objFile In objFolder.Files With objFile If .DateLastModified >= DateAdd("D", FixDay, Date) Then Cells(i, 2) = .Name Cells(i, 3) = .Size Cells(i, 4) = .DateLastModified i = i + 1 End If End With Next Set objFSO = Nothing Set objFolder = Nothing Set objFolderSub = Nothing End Function
- kkkkkm
- ベストアンサー率66% (1719/2589)
> 途中でエラーが出たのでローカルウインドウを見てみると$Recycle.Bin関連のファイルでした。 コードを直すときに、以前再帰で処理したことがあったと思ってブックを探しても、どれだかわからなくてもやもやしてたのですが、$Recycle.Binで質問検索したら見つかって(ブックも見つかって)もやもやが消えました。 https://okwave.jp/qa/q10064272.html アクセス禁止(隠しフォルダ)のフォルダを除外してましたね。 > E:の残容量と比較して不足分を事前に予測する事が出来て 残容量もVBAで取得して容量があれば現状のコピー(コマンドでしょうか)まで実行するようなマクロにすれば楽な気もします。 無ければE:のファイルを必要なだけマクロで削除してからコピーするというものもありだと思いますが、何を削除するかの選定が面倒そうですね。 送る側のサイズ計算はクラスタで計算したほうがいいと思います。 あくまでも単純化した計算ですが(受ける側でファイルを削除する必要があるとして) 1クラスタ4096として 送る側5000のファイルが2個あるとした場合ファイルサイズは10000 ファイル5000→ディスク上8192(クラスタが2) が2個なので ディスク上16384(クラスタが4) 受ける側、4000と6000のファイルファイルサイズは送る側と同じ10000 ファイル4000→ディスク上4096(クラスタが1) ファイル6000→ディスク上8192(クラスタが2) ディスク上12288(クラスタが3) という事になり、ファイルサイズだけで合わせて削除すると受け手側の容量が不足になると思います。 送る側クラスタサイズ、受ける側ファイルサイズで計算すると余裕をもっていけるのではないでしょうか。
お礼
kkkkkmさん、追加のアドバイスありがとうございます。 >アクセス禁止(隠しフォルダ)のフォルダを除外してましたね。 そうです。 最終的には、On Error Resume Next で逃げていました。 今回も、同じ状況になりそうなので早めに逃げています。 私がエラーが出る件でノミネートされた名前は 下のURLにも記載されている $RECYCLE.BIN\S-1-5-21- で始まるファイルでした。 (トータールで8個ほど存在) https://news.mynavi.jp/article/win10tips-224/ 私は、Everthingと言うファイル検索ソフトを利用していますが $RECYCLE.BIN を検索ワードに指定すると当該ファイルがヒットするので まとめて削除する事にしました。 現コードは、少し改造して以下のようになっています。 (進行形なので改造が見込まれます。) 改造していてコードが見えなくなっています。 コードの不備が原因でハング状態になりました。 コードもどこがおかしいか添削していただけないでしょうか ? Option Explicit Dim FixDay As Integer Sub フォルダとファイル一覧取得_階層考慮() Dim objFSO As FileSystemObject Dim FrmDir As String, ToDir As String Dim i As Long Dim FDS As String FrmDir = InputBox("どこから (J)", "送る側のドライブレター") FrmDir = FrmDir & ":\" ToDir = InputBox("どこへ (E)", "保存側のドライブレター") ToDir = ToDir & ":\" FixDay = InputBox("何日前からのファイルをコピペしますか ?") Set objFSO = New FileSystemObject If Not objFSO.FolderExists(FrmDir) Then MsgBox ("指定のフォルダは存在しません") Exit Sub End If '指定ドライブの空き容量(MB) FDS = Format(objFSO.GetDrive(ToDir).AvailableSpace / 1024 / 1024, "#,##") i = 2 'シートの2行目から出力 Call GetFileInfo(FrmDir, i) Dim lc As Long, ii As Long Dim CSize As Long '処理行の総数(空白行を含む) lc = Cells(Rows.Count, "C").End(xlUp).Row Application.ScreenUpdating = False '空白行の削除 For i = lc To 1 Step -1 If Cells(i, "C").Value = 0 Then Range(i & ":" & i).Delete End If Next i Application.ScreenUpdating = True '処理行の総数(空白行を削除後) lc = Cells(Rows.Count, "C").End(xlUp).Row 'C列をMB単位に換算してE列に書き出す Dim target For i = 1 To lc target = Cells(i, "C").Value Range("E" & i).Value = WorksheetFunction.RoundUp(target / 1024 / 1024, 0) 'MBに換算 Next 'E列の合計を算出 For ii = 1 To lc CSize = WorksheetFunction.Sum(Range("E1:E" & ii)) Next '合計数を表示(MB & GB) MsgBox "送る側の総容量 = " & CSize & " MB" & vbCrLf & _ " " & WorksheetFunction.RoundUp(CSize / 1024, 0) & " GB" & vbCrLf & _ "空き容量 = " & FDS Set objFSO = Nothing End Sub Sub GetFileInfo(ByVal FrmDir As String, ByRef i As Long) Dim objFSO As FileSystemObject Dim objFolder As Folder Dim objFolderSub As Folder Dim objFile As File Set objFSO = New FileSystemObject Set objFolder = objFSO.GetFolder(FrmDir) 'サブフォルダ一覧 On Error Resume Next For Each objFolderSub In objFolder.SubFolders '再帰 Call GetFileInfo(objFolderSub.Path, i) Next 'ファイル一覧 For Each objFile In objFolder.Files With objFile If .DateLastModified >= DateAdd("D", FixDay, Date) Then Cells(i, 2) = .Name Cells(i, 3) = .Size Cells(i, 4) = .DateLastModified i = i + 1 End If End With Next Set objFSO = Nothing Set objFolder = Nothing Set objFolderSub = Nothing End Sub
- kkkkkm
- ベストアンサー率66% (1719/2589)
> B列にE:\の直下のフォルダー名が出力されるだけです。 > (階層構造になるサブディレクトリーが出力されません。) サブフォルダーの有無が不明でしたので、指定してフォルダだけのコードになっています。 サブフォルダーも含めるのでしたら再帰を利用するといいと思います。 (サブフォルダ名は出力してしません) 指定したフォルダの2週間以内のファイル個々のファイルサイズ等を出力してディスク使用量をセルに式を入れて算出します。 ファイルのプロパティで確認できるディスク上のサイズです。 J:の2週間以内のファイルのディスク上のサイズを取得してE:から削除する容量の目安を得るためのコードです。 ファイルのディスク上のサイズはクラスタ単位で消費されると思いますからクラスタサイズは確認してください。 > >申し訳ないですがその計算方法が分かりません。 > とコメントにあるのでこのマクロは、開発途中のマクロで改善しないと実用にならないとの事でしょうか ? 4096(クラスタサイズ)以下のサイズのファイル数分J:の2週間以内のファイルサイズが実際より多めに算出されますので、E:から削除する目安サイズが多めになりますが、余裕を持つという意味ではこのままでもいいのではないかと思います。 Sub Test() Dim objFSO As FileSystemObject Dim strDir As String Dim i As Long strDir = "フォルダをフルパスで指定" Set objFSO = New FileSystemObject If Not objFSO.FolderExists(strDir) Then MsgBox ("指定のフォルダは存在しません") Exit Sub End If i = 2 'シートの2行目から出力 Call GetFileInfo(strDir, i) Set objFSO = Nothing End Sub Sub GetFileInfo(ByVal strDir As String, ByRef i As Long) Dim objFSO As FileSystemObject Dim objFolder As Folder Dim objFolderSub As Folder Dim objFile As File Set objFSO = New FileSystemObject Set objFolder = objFSO.GetFolder(strDir) 'サブフォルダ一覧 For Each objFolderSub In objFolder.SubFolders '再帰 Call GetFileInfo(objFolderSub.Path, i) Next 'ファイル一覧 For Each objFile In objFolder.Files With objFile If .DateLastModified >= DateAdd("D", -14, Date) Then Cells(i, 2) = .Name Cells(i, 3) = .Size Cells(i, 4) = .DateLastModified i = i + 1 End If End With Next Set objFSO = Nothing Set objFolder = Nothing Set objFolderSub = Nothing End Sub
お礼
kkkkkmさん、サブフォルダー対応版のコードありがとうございます。 途中でエラーが出たのでローカルウインドウを見てみると$Recycle.Bin関連のファイルでした。 ゴミ箱には、何も残っていない(完全削除)のになぜだかヒッしています。 (この原因は、いまだに判っていません。) 以前もこのような事が有ったのを思い出して 以下のようにエラーを無視して実行するようにしたらB,C,D列に エラー箇所以外では上手く表示されました。 サブフォルダ一覧 On Error Resume Next For Each objFolderSub In objFolder.SubFolders '再帰 Call GetFileInfo(objFolderSub.Path, i) '-------------------------------- >J:の2週間以内のファイルのディスク上のサイズを取得してE:から削除する容量の目安を得るためのコードです。 このコードでコピペを始める前に J:の2週間以内のファイルのディスク上のサイズを多めに求めておいて E:の残容量と比較して不足分を事前に予測する事が出来てとてもスマートな運用ができそうです。 現状、E:が残量不足に至って1/16 08:44 のnotnotさんへのお礼に書いたような 打開策を考える必要が無くなります。 >4096以下のサイズのファイルは全て4096になってファイルのプロパティで見たサイズと異なります。 >4096(クラスタサイズ)以下のサイズのファイル数分J:の2週間以内のファイルサイズが実際より多めに算出されますので、 >E:から削除する目安サイズが多めになります 4096=4KBなのでそれほど小さなサイズのファイルは、 iconなどの画像ファイルなどでそれほど多くは無いしご指摘のとうり多めに算出されるので実用上は全く問題ないです。
- kkkkkm
- ベストアンサー率66% (1719/2589)
VBAですが 以下のサイトを参考にして 第119回.ファイルシステムオブジェクト(FileSystemObject) https://excel-ubara.com/excelvba1/EXCELVBA419.html 指定フォルダ直下のサブフォルダとファイルを一覧出力 のファイルのループの所を For Each objFile In objFolder.Files With objFile If .DateLastModified >= DateAdd("D", -14, Date) Then Cells(i, 2) = .Name Cells(i, 3) = .Size Cells(i, 4) = .DateLastModified i = i + 1 End If End With Next にして 個々のディスク使用サイズは以下の式で計算すればいかがでしょう。 クラスタサイズ4096として =4096*ROUNDUP(C2/4096,0) ただ、4096以下のサイズのファイルは全て4096になってファイルのプロパティで見たサイズと異なります。 申し訳ないですがその計算方法が分かりません。 クラスタサイスは以下のコマンドで fsutil fsinfo ntfsinfo j:
お礼
kkkkkmさん、いつもお世話になりありがとうごじます。 以下のVBAのコードを頂いたのですが B列にE:\の直下のフォルダー名が出力されるだけです。 (階層構造になるサブディレクトリーが出力されません。) C,D列にサイズ等が出力されるはずが何も出力されません。 B列がフォルダー名なのでサイズが0(ゼロ)のためでしょうか ? >申し訳ないですがその計算方法が分かりません。 とコメントにあるのでこのマクロは、開発途中のマクロで改善しないと実用にならないとの事でしょうか ? Sub フォルダとファイル一覧取得() Dim objFSO As FileSystemObject Dim objFolder As Folder Dim objFolderSub As Folder Dim objFile As File Dim strDir As String Dim i As Long strDir = "E:\" Set objFSO = New FileSystemObject If Not objFSO.FolderExists(strDir) Then MsgBox ("指定のフォルダは存在しません") Exit Sub End If i = 2 'シートの2行目から出力 'サブフォルダ一覧 Set objFolder = objFSO.GetFolder(strDir) For Each objFolderSub In objFolder.SubFolders Cells(i, 2) = objFolderSub.Name i = i + 1 Next 'ファイル一覧 For Each objFile In objFolder.Files With objFile If .DateLastModified >= DateAdd("D", -14, Date) Then Cells(i, 2) = .Name Cells(i, 3) = .Size Cells(i, 4) = .DateLastModified i = i + 1 End If End With Next Set objFSO = Nothing Set objFolder = Nothing Set objFolderSub = Nothing End Sub
- notnot
- ベストアンサー率47% (4900/10358)
forfiles /p j:\ /s /d +2023/01/02 -c "cmd /c echo @fsize,@path" > files.csv と実行すると、CSVファイルにファイルサイズとファイル名が入るので、Excelで読み込んで、不要ディレクトリの行を削除して、サイズを集計しましょう。 (ちゃんとやるにはファイルのサイズをクラスターサイズ(多分4096)単位で切り上げてから合計します) 「14日以内」という指定は出来ないので「1月2日以降」のような指定をします。
お礼
notnotさん、アドバイスありがとうございます。 自分なりに少し打開策らしきモノが見えてきました。 私の考えた方法は、 1)以下でJ:ドライブの1/2以降の日付のファイルを拾い出してEXCEL(CSV)で保存する forfiles /p j:\ /s /d +2023/01/02 -c "cmd /c echo @fsize,@path" > files_J.csv 2)以下でE:ドライブの1/2以降の日付のファイルを拾い出してEXCEL(CSV)で保存する forfiles /p e:\ /s /d +2023/01/02 -c "cmd /c echo @fsize,@path" > files_E.csv 1),2)の違いがJ:ドライブに存在していてE:ドライブには無いファイル つまり、容量不足でコピペされていないファイルとなる 私の考えは、どうでしょうか ? 何かアドバイスがあればお願いします。 '---------------------------------------- forfiles /p j:\ /s /d +2023/01/02 -c "cmd /c echo @fsize,@path" > files.csv ですが、 作成できたCSVをEXCELで開くと1列目にサイズが出力されます。 これを、1024で割ると ----> KB 単位 さらに、1024で割ると ----> MB 単位 だと思います。 ちゃんとやるにはファイルのサイズをクラスターサイズ単位にするようにしていますが 私が知らないクラスターサイズでやったほうがMB単位より正確に出るとのことでしょうか ?
- furamanko
- ベストアンサー率27% (565/2056)
jのドライブと同等以上GB。
補足
「jのドライブと同等以上GB。」 それは、違いますね。 MAXは、J:ドライブの使用量です。 チェックする方法の有無を問うてます。
- 1
- 2
お礼
Dim FixDay As Byte でType:=1で、以下のようにCstrに変えたら Temp = CStr(Application.InputBox(prompt:="何日前からのファイルをコピペしますか ?", Title:="日数指定 (Max=14)", Type:=1)) (確かに「型変換するよ」ということでCStrにしておく方が違和感が有りません。) 以下で、オーバーフローのエラーが出ました。 '日付指定はマイナス (プラスで指定したら符号反転) If FixDay > 0 Then FixDay = -FixDa そこで以下のように変えたらうまく処理できるようになりました。 '----------------------------------------- Dim FixDay As Single 'キャンセルを判断するのに一度文字列(temp)を利用する Dim Temp As String Do While flag = False 'CStr関数は、引数をString型(文字列型)に変換します。 Temp = CStr(Application.InputBox(prompt:="何日前からのファイルをコピペしますか ?", Title:="日数指定 (Max=14)", Type:=1)) 'ドライブ指定でキャンセルを選択した場合 ----> キャンセル = False 'cancel を判断するためtempは文字型を指定 If Temp = "False" Then MsgBox "処理を終了します。" Set objFSO = Nothing Exit Sub 'Val関数は、文字列を数値に変換することができます。 ElseIf Abs(Val(Temp)) = 0 Then MsgBox ("指定日数がゼロは有りえません。") & vbCrLf & _ "指定日数を確認してください。" ElseIf Abs(Val(Temp)) > 14 Then MsgBox "日付指定の最大日数は、14日以内です。" & vbCrLf & _ "指定日数を確認してください。" Else flag = True 'コピペする日付を指定 FixDay = Val(Temp) 'CByte関数は、引数を評価してバイト型「0~255」を返す。 End If Loop '日付指定はマイナス (プラスで指定したら符号反転) If FixDay > 0 Then FixDay = -FixDay '------------------------------------------------- これで本当に一区切りついたと思います。 長々とお世話になりありがとうございます。
補足
すいません。 If FixDay > 0 Then FixDay = -FixDa を If FixDay > 0 Then FixDay = -FixDay に訂正します。 最後のyが抜けていました。