いろいろ考えたのですがわからないために質問させていただきます
ご指導宜しくお願いします。
Aというフォルダにある
book1
book2
book3
というエクセルファイルを一括に選択して自らに取り込んだ後
処理をして別フォルダに保存するという流れをしたいのですが
わかりません。
処理自体は不要列の削除と簡単なのですがファイルの数が多いため
一括でしたいのです。ご指導宜しくお願いします。
Sub test()
Dim OpenFileName As Variant
Dim wb As Workbook
ChDir CreateObject("WScript.Shell").SpecialFolders("desktop")
'ファイルを開く
OpenFileName = Application.GetOpenFilename("ExcelBook,*.xls,AccessDB,*.mdb")
'キャンセル
If OpenFileName = False Then
'終了
Exit Sub
End If
'このブックのSheet1をクリア
ThisWorkbook.Sheets("Sheet1").Cells.Clear
'ワークブックを開く
Set wb = Workbooks.Open(OpenFileName)
'選択されたブックの最初に表示するシートをコピー
wb.ActiveSheet.Cells.Copy Destination:=ThisWorkbook.Sheets("Sheet1").Cells(1, 1)
'閉じる
wb.Close False
'画面固定
Application.ScreenUpdating = False
'不要列選択
Range("A:A,C:C,E:E,G:G,I:I,K:K,M:M,O:O").Select
'選択列を削除
Selection.Delete Shift:=xlToLeft
Range("a1").Select
Dim ws As Worksheet
'元々開いていたシートを退避
Set ws = ActiveSheet
'全てのワークシートを新しいブックにコピー
Worksheets.Copy
'名前を自分で入れる場合
Application.Dialogs(xlDialogSaveAs).Show
ActiveWorkbook.Close False '新しいブックを閉じる
ws.Activate '元々開いていたシートを表示
現状はこのような感じで一つ一つ処理しています。
No.6ベストアンサー
- 回答日時:
サンプルです。
同名のファイルが既に存在する場合の処理とか考慮していません。
取りあえず、i の値を付けるようにしてあります。
Dim wb As Workbook
Dim opnFile As Variant
Dim filFilter As String
Dim i As Integer
filFilter = "Excel Files ,*.xl*"
opnFile = Application.GetOpenFileName(FileFilter:=filFilter, MultiSelect:=True)
If IsArray(opnFile) Then
For i = 1 To UBound(opnFile)
Set wb = Workbooks.Open(opnFile(i))
wb.Sheets("Sheet1").Cells.Copy _
Destination:=ThisWorkbook.Sheets("Sheet1").Range("A1")
wb.Close False
ThisWorkbook.Sheets("sheet1").Copy
ActiveWorkbook.Close _
savechanges:=True, FileName:=ActiveSheet.Name & i & ".xls"
ThisWorkbook.Sheets("sheet1").Cells.ClearContents
Next
End If
No.5
- 回答日時:
>回答番号:No.4 この回答へのお礼
> こんな感じで取り込んだあとシート別にブックにして保存でいいのですが
> エクセルファイルの取り込み方がわからなくて悩んでおります。
”エクセルファイルの取り込み方”の意味が理解できません。
どういう状態、意味のにでしょうか?
シートを別ブックに保存の件は
シートラベルを右クリック>「移動またはコピー」>「移動先」を新しいブック>「名前を付けて保存」
といった操作を「マクロの記録」すればどうでしょうか。
しかし、これだけのコードが書けるレベルの方が、悩まれることが不思議です。
シートを別ブックに保存は悩んだ結果
Sub test()
Dim ShtCnt As Integer, i As Integer
ShtCnt = ActiveWorkbook.Worksheets.Count
i = 1
ChDir ("C:\TEST\")
Do
Sheets(i).Activate
Sheets(i).Copy
ActiveWorkbook.Close savechanges:=True _
, Filename:=ActiveSheet.Name & ".xls"
i = i + 1
Loop Until i > ShtCnt
End Sub
こうなりました。
No.4
- 回答日時:
> Book0というマクロを含んだエクセルで
> Aというフォルダにある
> Book1のSheet1を
> Book3のSheet1に表示させたいのです。
表示=Copyということですね。
ということなら、ブック名、シート名を明記しなければなりません。
複数のブック、シートを操作する場合、
それらを省略した記述にすると、ActiveWorkBook、ActiveSheetを指定したことになり、
間違ってコピーされたり削除される現象が起こります。
> 'このブックのSheet1をクリア
> ThisWorkbook.Sheets("Sheet1").Cells.Clear
> 'ワークブックを開く
> Set wb = Workbooks.Open(OpenFileName)
> '選択されたブックの最初に表示するシートをコピー
> wb.ActiveSheet.Cells.Copy Destination:=ThisWorkbook.Sheets("Sheet1").Cells(1, 1)
で、ThisWorkbookは、実行したマクロがあるBook0ということになります。
Book3にコピーするなら
Workbooks("Book3.xls").Sheets("Sheet1").Cells.Clear
Set wb = Workbooks.Open(OpenFileName)
wb.Sheets("Sheet1").Cells.Copy Destination:=Workbooks("Book3.xls").Sheets("Sheet1").Cells(1, 1)
と、明記しなければいけません。
次のブックは、Book3のどこにコピーするのですか?
このままでは上書きと同じことになり、前のブックのデータが消滅しそうです。
失礼しました
このBook3はBook0の間違いです。
つまりは特定のフォルダにあるエクセルファイルを一度
マクロを実行する本体に取り込みたいということなのです。
雰囲気としては
Sub ReadTextFiles()
Const DirName = "C:\TEMP"
'上記で指定されたフォルダに存在するファイルで、
'拡張子がtxtのものをすべて1シートとして読み込む
Dim fs, dir, fc, f1, stream As Object
Set fs = CreateObject("Scripting.FileSystemObject")
Set dir = fs.GetFolder(DirName)
Set fc = dir.Files
For Each f1 In fc
If LCase(fs.GetExtensionName(f1.Name)) = "txt" Then
Worksheets.Add after:=Worksheets(Worksheets.Count)
Sheets(Worksheets.Count).Name = f1.Name
Set stream = f1.OpenAsTextStream
Do While stream.AtEndOfStream <> True
Cells(stream.Line, 1) = stream.ReadLine
Loop
stream.Close
End If
Next
End Sub
こんな感じで取り込んだあとシート別にブックにして保存でいいのですが
エクセルファイルの取り込み方がわからなくて悩んでおります。
No.3
- 回答日時:
#1です。
任意に複数のファイルを選択したいのか、勝手にフォルダ内のファイルに対して
自動で切り替えて実行したいのか。。。後者と解釈しました。
参考URLはフォルダ内の「ファイル名」の取得ですが、「ファイル名」が取得できれば
ファイルを順次開く事になりますけど、そう言う意味ではなかったようですね。
No.2
- 回答日時:
GetOpenFileNameメソッドのMultiSelectオプションをTrueにすれば複数のFileを選択できます。
Sub test1()
Dim opnFile As Variant
Dim fFilter As String
Dim i As Integer
ChDir CreateObject("WScript.Shell").SpecialFolders("desktop")
fFilter = "Excel Files ,*.xl*,AccessDB ,*.mdb"
opnFile = Application.GetOpenFileName(FileFilter:=fFilter, MultiSelect:=True)
If IsArray(opnFile) Then
For i = 1 To UBound(opnFile)
MsgBox opnFile(i)
Next
End If
End Sub
No.1
- 回答日時:
回答ありがとうございます。
しかしファイル「名」を取得したいのではなくて
選択したブックそのものを取り込みたいのです。
具体的にいうと
Book0というマクロを含んだエクセルで
Aというフォルダにある
Book1のSheet1を
Book3のSheet1に表示させたいのです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Visual Basic(VBA) VBAでファイルを開くプログラムがエラーです 2 2023/02/21 16:56
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) シートをコピーする下記記述でダイアログを用いた記述がわかりません?( A = Dir(ThisWor 4 2022/08/22 12:26
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAが途中で止まります
-
VBA シートをコピーする際に Co...
-
別ブックをダイアログボックス...
-
VBAで別ブックのシートを指定し...
-
ワイルドカード「*」を使うとう...
-
VBS Bookを閉じるコード
-
VBAで複数のブックを開かずに処...
-
エクセルのマクロについて教え...
-
VBA コードを実行すると画面が...
-
ADOで複数のBookから抽出
-
ExcelVBA:すでに開かれている...
-
複数のエクセルブックをひとつ...
-
VBA 実行時エラー 2147024893
-
ExcelのVBAです。フォルダ内の...
-
Excelファイルを開くとき、読み...
-
Excelブックがアクティブになっ...
-
vbaで他のブックに転記したい。...
-
【ExcelVBA】zip圧縮されたCSV...
-
エクセルのマクロについて教え...
-
Excelマクロ 該当する値の行番...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
エクセルVBAが途中で止まります
-
別ブックをダイアログボックス...
-
【ExcelVBA】インデックスが有...
-
ワイルドカード「*」を使うとう...
-
【ExcelVBA】VBA実行でダイアロ...
-
ExcelのVBAです。フォルダ内の...
-
フォルダ内の全てのファイルに...
-
VBA コードを実行すると画面が...
-
VBA 別ブックからコピペしたい...
-
VBAで別ブックのシートを指定し...
-
VBS Bookを閉じるコード
-
vbaでvbaProjectのパスワード解...
-
【VBA】全シートの計算式を全て...
-
VBA シート名が一致した場合の...
-
【ExcelVBA】zip圧縮されたCSV...
-
複数のエクセルブックをひとつ...
-
VBSでExcelのオープン確認
-
VBAで別のブックにシートをコピ...
-
【Excel VBA】書き込み先ブック...
おすすめ情報