A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
こんにちは。
これは、内容的に思った以上に難しくややこしいです。
また、唐突ですが、ここのところ、私のコードが複雑だから、ボツにするという人が何人かいるようです。私は、そんなにマクロはうまくもありません。また、回答者にも、同様の、複雑なマクロは書くべきではないという意見を持つ人がいます。今回の内容の3分の1は、エラー対策です。
それで手を抜いたコードをポストして、BAになったとしても、VBAのプログラミングとして、安易なコードは、結果的には自分のためにならないと思います。
なお、これは、Excel 2013 で作りました。互換性は考慮されていますが、パスワード周りが、多少不安が残ります。果たして、そんな仕様だったかどうかということです。必ず、パスワードが入っていないファイルを対象としています。
また、失敗の可能性は、多少なりとも考慮しておいてください。Pkzipなどで、フォルダごとバックアップをとっておくと良いかもしれません。元に戻すマクロも用意したものの、必ずしも成功するとは限りませんから。
'//
Sub ArrangingAllxlFiles()
Dim fName, myPath As String
Dim i As Long, j As Long
Dim wb As Workbook
Dim sh As Worksheet
Dim myFiles()
Dim fn
Const PWD As String = "aaa" ' パスワード
Set sh = ThisWorkbook.Worksheets(1)
'' ("E:\VBA\シート挿入.xlsm")
'なるべくSheet1 とかいう名称でないほうがよいです。
myPath ="E:\VBA\対象フォルダ\" '必ず末尾には、『¥』を入れてください。
fName = Dir(myPath & "*.xls?", vbNormal)
Do While fName <> ""
If (GetAttr(myPath & fName) And vbNormal) = vbNormal Then
If ThisWorkbook.Name <> fName Then '同名ファイル名不可
ReDim Preserve myFiles(i)
myFiles(i) = fName
i = i + 1
End If
End If
fName = Dir
Loop
Application.ScreenUpdating = False
For Each fn In myFiles
On Error Resume Next
If Right(fn, 4) = ".xls" Then Stop
With Workbooks.Open(myPath & fn, , , , "", "")
If Err.Number <> 1004 Then
Err.Clear
sh.Copy before:=.Worksheets(1)
'旧バージョンへの対策
If Err.Number = 1004 Then
.Worksheets.Add before:=.Worksheets(1)
sh.UsedRange.Copy .Worksheets(1).Range("A1")
.Worksheets(1).Name = sh.Name 'こちらは名前が変わらないい時がある
End If
Application.DisplayAlerts = False
.SaveAs myPath & fn, , PWD, PWD
Application.DisplayAlerts = True
.Close False
Else
Debug.Print fn 'エラーを起こしたファイル名を記録
End If
If Err() = 0 Then j = j + 1 'エラー無しファイルのカウント
End With
Err.Clear
On Error GoTo 0
Next fn
Application.ScreenUpdating = True
MsgBox UBound(myFiles) + 1 & "中、" & j & "個設定しました。", vbInformation
End Sub
'//
Debug.Print fn は、問題ないと分かり、不要になりましたら、その行を削除して構いません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel VBA 指定フォルダに格納されている全エクセルファイルに指定シートを挿入する方法について 1 2022/08/22 11:53
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/21 09:28
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 11:27
- Excel(エクセル) PDFファイルに日付を名前にして保存したい。 エクセル2019でワークシートに請求書のフォームを作り 2 2023/05/27 11:13
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルのオートフィルターのしぼりをクリアーしたい 2 2022/12/24 08:36
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) Excel ファイルを指定し、指定されたファイル内にシートを統合するVBA 8 2023/07/10 10:09
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/06/04 09:39
- Excel(エクセル) フォルダ内の全ブックのシート名を変更したい 7 2022/09/22 21:34
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイルのアクセス回数について
-
エクセルのプロパティーでセキ...
-
ExcelブックをGoogleスプレッド...
-
Wordで差込印刷した後に別々の...
-
Excel csv保存 列数が異なる場...
-
VBAの結果をテキストファイルへ。
-
エクセルファイル名に更新日時...
-
大量のCSVファイルをExcel形式...
-
PowerPoint 2002でファイル名を...
-
【Excel VBA】ファイルを保存し...
-
EXCEL 検索時の設定
-
エクセル UserForm 呼び出しで...
-
サブフォルダから部分一致のエ...
-
Word2010で閉じるボタン押下後...
-
バッチファイル 二つ上のディ...
-
エクセルで複数のコメントのサ...
-
エクセルvbaでdocuworksprinter...
-
フォルダ内のPDFファイル名を変...
-
DXFファイルをVBで取り込み、図...
-
VBA一覧取得 再投稿
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイルのアクセス回数について
-
エクセルのプロパティーでセキ...
-
Wordで差込印刷した後に別々の...
-
ExcelブックをGoogleスプレッド...
-
Excel csv保存 列数が異なる場...
-
エクセル UserForm 呼び出しで...
-
サブフォルダから部分一致のエ...
-
エクセルファイル名に更新日時...
-
PowerPoint 2002でファイル名を...
-
EXCEL 検索時の設定
-
エクセルでcsvファイルを開いて...
-
マクロ実行後、表示がおかしくなる
-
複数のexcelのファイルを一括で...
-
実行時エラー52
-
【Excel VBA】ファイルを保存し...
-
VBAでマクロを使って、マクロ無...
-
vbaでボタンをクリックして上書...
-
大量のCSVファイルをExcel形式...
-
For~Nextルーチンで最初の1回...
-
Word2010で閉じるボタン押下後...
おすすめ情報