• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:(VBA)bat処理の結果がおかしい)

(VBA)bat処理の結果がおかしい

kkkkkmの回答

  • kkkkkm
  • ベストアンサー率65% (1639/2488)
回答No.6

「ファイルやフォルダの操作もVBAで」 はNo2で指摘されてましたね。 No4は完無視してください。

NuboChan
質問者

補足

以下に仮のコードを作成してみました。 (過去教えてもらったコードの組み合わせ) 「'フォルダー内のフォルダー数」までは、うまく処理されていますが 「'フォルダー内のフォルダーを書き出す」が最後の1個しか書き出されていません。 原因は何でしょうか ? --------------------------------------- Sub MooveUp_Directory() Dim strPath As String Dim intPathLen As Integer Dim intR As Integer Dim F As Variant Dim obj As WshShell Dim sPath As String Dim folderPath As String Dim CountFolder As Single Dim strFlName As String 'Range("A5:F100").Clear ' フォルダーを自由に選べること。 参考:officeTANAKA With Application.FileDialog(msoFileDialogFolderPicker) If .Show = True Then If Len(.SelectedItems(1)) = 3 Then ' c:\の場合とサブフォルダーの場合 mypath = .SelectedItems(1) Else mypath = .SelectedItems(1) & "\" End If End If End With If mypath = Empty Then MsgBox "フォルダー名の指定をキャンセルしました。": Exit Sub MyName = Dir(mypath, vbDirectory) ' 最初のフォルダ名を返します。 'Range("A2") = mypath 'コピー先フォルダーの指定 'BATファイルのコピー FileCopy "C:\MoveUp_Directory.bat", mypath & "MoveUp_Directory.bat" 'batファイルの起動 sPath = mypath & "MoveUp_Directory.bat" 'MsgBox mypath ChDir mypath CreateObject("Wscript.Shell").Run sPath 'Call obj.Run(sPath, WaitOnReturn:=True) 'フォルダー内の不要ファイルの削除 Kill mypath & "*.bat" Kill mypath & "*.rar" 'フォルダー内のフォルダー数 '--- 含まれるフォルダ名を知りたいフォルダのパス ---' folderPath = mypath '--- ファイルシステムオブジェクト ---' Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") '--- フォルダ数を格納する変数 ---' Dim n As Long CountFolder = fso.GetFolder(folderPath).SubFolders.Count MsgBox CountFolder 'フォルダー内のフォルダーを書き出す Range(Cells(1, "A"), Cells(500, "A")).ClearContents strFlName = Dir(mypath & "*", vbDirectory) MsgBox strFlName Do While strFlName <> "" If Replace(strFlName, ".", "") <> "" Then Cells(1, "A") = strFlName intR = intR + 1 End If strFlName = Dir Loop End Sub 'フォルダー名を元に戻す Sub 指定位置から文字列抜き出し() Dim MojiSuu As Single Dim KokoKara As Variant Dim i As Single Dim Nukidashi As String Dim EndRow As Single With Sheets("DATA") EndRow = .Cells(Rows.Count, "A").End(xlUp).Row For i = 1 To EndRow Nubering3 (i) KokoKara = Application.InputBox(prompt:="何番目から? 数値を入力してください", Title:="指定位置(数値入力)", Type:=1) If TypeName(KokoKara) = "Boolean" Then MsgBox "数値以外が入力されたので終了します。" Exit Sub End If .Activate MojiSuu = Len(.Range("A" & i)) Nukidashi = Mid(.Range("A" & i), KokoKara, MojiSuu) .Range("B" & i) = Nukidashi Next i End With Sheets("Number").Range("A1:XX100").Clear End Sub Sub Nubering3(ByVal DataRow As Long) Dim Ws1 As Worksheet, Ws2 As Worksheet Dim i As Long, j As Long, WRow As Long, WColumn As Long Dim uRows As Range, uRange As Range Dim font1 As Font Set Ws1 = Sheets("DATA") Set Ws2 = Sheets("Number") Set uRows = Ws2.Rows(1) Set uRange = Ws2.Range("A2") 'Numberシートの初期化(全体=数式・文字・書式・コメント全てをクリア) Ws2.Range("A1:XX100").Clear Application.ScreenUpdating = False WRow = 1: WColumn = 1 For j = 1 To Len(Ws1.Cells(DataRow, "A").Value) Ws2.Cells(WRow, WColumn).Value = j Ws2.Cells(WRow + 1, WColumn).Value = Mid(Ws1.Cells(DataRow, "A").Value, j, 1) Set uRange = Union(uRange, Ws2.Cells(WRow + 1, WColumn)) Set uRows = Union(uRows, Ws2.Rows(WRow)) If j Mod 40 = 0 Then WRow = WRow + 3 WColumn = 1 Else WColumn = WColumn + 1 End If Next 'Numeling 大文字、中央揃え uRows.HorizontalAlignment = xlCenter uRows.Font.Bold = True 'フォントサイズ指定 uRows.Font.Size = 9 '分割文字中央揃え罫線外枠 uRange.HorizontalAlignment = xlCenter uRange.Borders.LineStyle = xlContinuous 'フォントサイズ指定 'uRange.Font.Name = "HGP創英角ポップ体" uRange.Font.Size = 9 'セル幅を見やすく Ws2.Range("A1:xx100").ColumnWidth = 3 Application.ScreenUpdating = True Ws2.Activate Set Ws1 = Nothing Set Ws2 = Nothing Set uRows = Nothing Set uRange =

関連するQ&A

  • VBAでのフォルダ指定方法について

    EXCELファイルが保存されているディレクトリ配下のフォルダーを指定できるようにしたくていろいろ試してみたのですが、うまくいきません。 どなたか、お知恵をお貸しください。 以下ソースです。 Private Sub CommandButton1_Click() Dim ShellApp As Object Dim oFolder As Object Dim MyPath As String MyPath = ActiveWorkbook.Path Set ShellApp = CreateObject("Shell.Application") Set oFolder = ShellApp.BrowseForFolder(0, "処理ファイルの格納フォルダ選択", 1, MyPath) If Not oFolder Is Nothing Then TextBox1.Value = oFolder.Items.Item.Path End If Set ShellApp = Nothing Set oFolder = Nothing End Sub

  • VBA 探しているFileがないときの処理方法

    現在、下記のようにしてマクロ実行ブックと同じ階層のフォルダ名を取得してAに、フォルダ内のabc.XLSのC9の値をBに、abc.XLSの更新日時をCに表示させています。 このとき、フォルダ内にabc.XLSが無い場合にファイル名をAに書き出してB及びCは空白というように表示したいのですが、どのようにすればよろしいでしょうか。 macro1は以前質問させて頂いたものがベースになっています。ExecuteExcel4Macroを使っている関係でファイル名が無いときの処理はDirを使ってできるとmougで調べてわかりましたが、自分の知識ではできず、macro2を作成したのですが、指定ファイルがない場合の処理がうまくできずにいます。 macro1はファイルオープンの窓が開きます。macro2はファイルが存在しないという窓が開きます。 どちらの場合でもかまいませんのでお力をお貸し頂けませんでしょうか。 Sub macro1() Dim myPath As String Dim myFolder As String Dim r As Long r = 3 myPath = ThisWorkbook.Path & "\" myFolder = Dir(myPath, vbDirectory) myBook = "abc.XLS" Application.ScreenUpdating = False Range("A3:C60").Clear Do Until myFolder = "" If myFolder <> "." And myFolder <> ".." Then If (GetAttr(myPath & myFolder) And vbDirectory) = vbDirectory Then Cells(r, 1) = myFolder Cells(r, 2).Value = ExecuteExcel4Macro("'" & myPath & myFolder & "\[" & myBook & "]Sheet1 '!R9C3") On Error Resume Next Cells(r, 3) = FileDateTime(myPath & myFolder & "\" & myBook) On Error GoTo 0 If Cells(r, 3) = "" Then Cells(r, 2) = "myBook" End If Cells(r, 2).NumberFormatLocal = "#,##0_ " Cells(r, 3).NumberFormatLocal = "y""年""m""月""" With Range("A3:C60") .Sort Key1:=Range("C3"), Order1:=xlAscending .Borders.LineStyle = True End With r = r + 1 End If End If myFolder = Dir() Loop Application.ScreenUpdating = True End Sub Sub Macro2() Dim myPath As String Dim myFolder As String Dim myBook As String myPath = ThisWorkbook.Path & "\" myFolder = Dir(myPath, vbDirectory) myBook = "abc.XLS" i = 2 Do Until myFolder = "" If myFolder <> "." And myFolder <> ".." Then If (GetAttr(myPath & myFolder) And vbDirectory) = vbDirectory Then Workbooks.Open (myPath & myFolder & "\" & myBook) Range("C9").Activate Selection.Copy ThisWorkbook.Activate Cells(i, 1) = myFolder Cells(i, 2).PasteSpecial xlValues Cells(i, 3) = FileDateTime(myPath & myFolder & "\" & myBook) Workbooks(myBook).Close SaveChanges:=False i = i + 1 End If End If myFolder = Dir() Loop End Sub

  • フォルダー名に特殊文字?が存在する場合にエラー発生

    以下のコードでフォルダー名を取得しています。 しかし、フォルダー名に特殊文字?が存在する場合に下記でエラーが発生します。  例えば「Oxygène」 でeの上に’があるなど   If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then      実行エラー 53: ファイルが見つかりません。 これは、excelの仕様で処理できないのでしょうか ? 他のコードで処理できれば教えて下さい。 --------------------------------------- Sub フォルダ名取得() Dim MyName Dim MyPath Dim i As Long ’仮の消込(初期化: 前回の記入文をクリアー) Range("A5:H50").Clear i = 1 ' フォルダーを自由に選べること。 参考:officeTANAKA With Application.FileDialog(msoFileDialogFolderPicker) If .Show = True Then ' MsgBox .SelectedItems(1) If Len(.SelectedItems(1)) = 3 Then ' c:\の場合とサブフォルダーの場合 MyPath = .SelectedItems(1) Else MyPath = .SelectedItems(1) & "\" End If End If End With If MyPath = Empty Then MsgBox "フォルダー名表示をキャンセルしました。": Exit Sub 'Range("b2:c2").ShrinkToFit = True ' 縮小してセル内に表示 MyName = Dir(MyPath, vbDirectory) ' 最初のフォルダ名を返します。 '親フォルダー Range("A2") = MyPath Do While MyName <> "" ' ループを開始します。 ' 現在のフォルダと親フォルダは無視します。 If MyName <> "." And MyName <> ".." Then ' ビット単位の比較を行い、MyName がフォルダかどうかを調べます。 If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then Range("a" & i + 4) = MyPath & MyName ' アクティブシートA5セルから下方にフルパス表示。 Range("b" & i + 4) = MyName ' アクティブシートB5セルから下方にフォルダ名表示 i = i + 1 End If End If MyName = Dir ' 次のフォルダ名を返します。 Loop MsgBox MyPath & "の中にフォルダーは" & (i - 1) & "個のフォルダーがありました。" End Sub

  • VBAでのフォルダ指定方法について 2回目

    フォルダー指定時に使用する「ShellApp.BrowseForFolder」について教えてください。 パス指定するところに直にフルパスを記述すると、そのフォルダを先頭として配下のフォルダが表示されます。 -イメージー 【業務】  【業務1】  【業務2】 しかし、変数にするとエラーは出ないのですが指定したパスを無視してデフォルトの表示となります。 -イメージー 【デスクトップ】  【マイドキュメント】  【マイコンピュータ】      : ファイルを置いて実行させるフォルダーが固定で無いので、ファイルを置いてあるフォルダ配下のみ表示させたいのですが無理なのでしょうか。 実行環境が97なのが影響してるのでしょうか。 どなたか、お助けください。 以下、今試しているソースです。 Dim ShellApp As Object Dim oFolder As Object Dim MyPath As String MyPath = ActiveWorkbook.Path ChDir MyPath 'MyPathの中身が「C:\Documents and Settings\ABC\My Documents\業務」であることを確認 MsgBox (MyPath) Set ShellApp = CreateObject("Shell.Application") '直にパス指定すると、業務を先頭にその配下のフォルダ指定となる Set oFolder = ShellApp.BrowseForFolder(0, "処理ファイルの格納フォルダ選択", 1, "C:\Documents and Settings\ABC\My Documents\業務") 'MyPathがきいてない。デスクトップを先頭にその配下のフォルダ指定となる Set oFolder = ShellApp.BrowseForFolder(0, "処理ファイルの格納フォルダ選択", 1, MyPath)

  • batファイルで、あるディレクトリ配下に存在する場合は、実行を中断

    batファイルのコードで、 このbatファイルがある特定のディレクトリ内にある場合は、即座に実行を中断するようにしたいのですが、どうすればよいでしょうか。 詳しく述べます。 あるbatファイルがあります。 このbatファイルは、普段、マウスでダブルクリックして実行しています。 仮に、このbatファイルが C:\Temp\a というディレクトリにある場合に実行を中断するには、 ======================== set ThisScriptPath=%~dp0 if "%ThisScriptPath%" == "C:\Temp\a\" goto END ・・・ :END set ThisScriptPath= ======================== というようなコードを入れておけばいいと思います。 しかし、C:\Temp の中の「どのサブディレクトリにbatファイルがある場合でも(aサブディレクトリでもbサブディレクトリでも、何階層下でも)」実行を中断するにはどうすればいいのでしょうか。

  • bat処理

    batファイルを使ってCドライブのユーザーのtempフォルダの中の Excelファイルxlsを一括削除したい Osはwin7とxp for /d %%a in (subdir*) do del "%%a\*.jpg" うまく動きません、よろしくお願いします。

  • Excel VBA:ダイアログを使ってファイル名を取得したい

    ファイルを開く際に、GetOpenFilenameを使用し、以下のように記述しています。 Dim sFName As String Dim sPath As String sPath = ThisWorkbook.Path & "\データフォルダ" ChDir sPath sFName = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", MultiSelect:=False) このとき、win98ですと、指定したフォルダが表示されますが、 win2000やXPですと、Excelのカレントフォルダが表示されます。 ダイアログ表示したときに、任意のフォルダを表示させるには、どのようにしたらよいですか? ご回答よろしくお願いします。

  • フォルダをコピー フォルダの中に入れたい FSO

    vbaです。よろしくお願いします。 Sub Sample() Dim myFSO As Object Dim MyPath As String MyPath = "C:\Users\ああああ\Desktop\" Set myFSO = CreateObject("Scripting.FileSystemObject") myFSO.CopyFolder MyPath & "コピーしたフォルダーを入れるフォルダー", MyPath & "コピーするフォルダ" Set myFSO = Nothing End Sub こんな感じで、デスクトップにある、"コピーするフォルダ"をコピーして、 デスクトップにある、"コピーしたフォルダーを入れるフォルダー"の中に入れたいのですが 上記のコードを実行しても何も起きません。 コピーしたフォルダーを入れるフォルダーの中身を見ても、空です。 ”コピーしたフォルダーを入れるフォルダー”の中に、"コピーするフォルダ" を入れる方法を教えてください。

  • bat処理リストを元にコピー

    batやvbsを使って下記のような動作ができるか教えて頂きたいです。 ・ ・ (1)数十個のファイル名一覧を拡張子付きでcsvでリスト化(ファイル毎に改行)済み (2)上記ファイルを元に[p:]ドライブ内でサブディレクトリを含め検索し[C:\copy]フォルダにコピーする。 以上の動作ですがbatでfor文を使用してやろうとしましたが、サブディレクトリまで含めた検索の動作ができません。 お分かりになる方宜しくお願い致します。

  • 実行時エラー 76 パスが見つかりません。

    VBAのFileSystemObjectでフォルダをコピーしているのですが フォルダ1は問題なくコピーできるのですが 毎回フォルダ2だけは、 実行時エラー 76 パスが見つかりません。 と言うエラーになってしまいます。 Sub Sample() Dim myFSO As Object Dim MyPath As String MyPath = "C:\" Set myFSO = CreateObject("Scripting.FileSystemObject") myFSO.CopyFolder MyPath & "フォルダ2", MyPath & "新フォルダ2" Set myFSO = Nothing End Sub このようなコードなのですが、フォルダ1もフォルダ2も同じコードを使っています。 フォルダ2に関しては容量が10GBくらいありますが、フォルダが重すぎるのが原因でしょうか?