No.4ベストアンサー
- 回答日時:
ANo3です
テスト中に入れ替えたのを、戻し忘れていました。
中ほどの
Set tb = Workbooks.Open(Filename:=ThisWorkbook.Path & "\" & fName, UpdateLinks:=0, ReadOnly:=False)
の部分は、以下が正です。すみません。
Set tb = Workbooks.Open(Filename:=ThisWorkbook.Path & "\" & fName, UpdateLinks:=0, ReadOnly:=True)
fujillin様
私の勝手なお願いに非常に長いVBAコードを作成していただき感謝いたします。
試したところ、問題なく実行できました。
大変助かります。
これでかなりはかどります。
本当にありがとうございました。
今後ともよろしくお願いします。
もちろん間違いなくベストアンサーです。
No.3
- 回答日時:
こんにちは
100個のファイルがあると、外部参照していたり、保護がかけられていたり、open時に実行されるマクロが混じっていたり…などなどの可能性があるので、ファイルオープン時のチェックをいろいろ行わないと、各種のメッセージやエラーが出る可能性がありますが、とりあえずそのあたりは無視して雰囲気のみのコードです。
(特に何もしていないファイルだけが対象なら動作するはずです)
ANo1様が紹介なさっているようなソフトを利用する方が、検討と検証を重ねているはずなので、確実性は高いはずと想像します。
以下、ご参考まで。
※ マクロのあるブックに各ブックのシートをまとめます。
マクロのあるブックは書き換えられるため、既存のデータは全て消されます。
(既存のシートは無条件で削除されます)
※ 対象は、マクロのあるブックと同じフォルダ内にあるブック(複数)です。
※ 各ブック内のシート(複数)を順にコピーしますが、シート名が重複する可能性が高いので、新しいシート名は『ブック名_シート名』に変えています。
※ 目次はそのままの順で、A列にブック名、B列にシート名の形式で作成します。
※ 多少はエラーや警告が出にくいようにはしていますが、基本的にエラー処理等は一切行っていませんので、ご注意ください。
単純コピーを行っていますので、壊れたブックをコピーすると、ペースト先のブックも壊れる場合があります。
※ ブック数が多いとそれなりに時間がかかりますので、テストは少数ファイルで行ってみてください。
(画面のチラつきを消したければ、コメントアウトしてある
'Application.ScreenUpdating = False/True
の行を有効にすることで、少しは速度向上にもなります)
Sub Sample()
Dim security, reg As Object
Dim wb As Workbook, sh As Worksheet, rng As Range
Dim tb As Workbook, ts As Worksheet, ns As Worksheet
Dim fName As String, fNstr As String
Set reg = CreateObject("VBScript.RegExp")
reg.Pattern = "\.xls[^\.]*$"
'目次シートを作成(他は削除)
Set wb = ThisWorkbook
wb.Worksheets.Add Before:=wb.Worksheets(1)
Application.DisplayAlerts = False
Do While wb.Worksheets.Count > 1
wb.Worksheets(2).Delete
Loop
Application.DisplayAlerts = True
Set sh = wb.Worksheets(1)
Set rng = sh.Range("A2:B2")
sh.Name = "目次"
rng.ColumnWidth = 15
rng.Offset(-1) = Array("ファイル名", "シート名")
'Stop(目次シートのみの状態)
'Application.ScreenUpdating = False
security = Application.AutomationSecurity
Application.AutomationSecurity = msoAutomationSecurityForceDisable
'フォルダ内の.xls*ファイルの内容を順にコピー
fName = Dir(wb.Path & "\*.xls*")
Do While fName <> ""
If fName <> wb.Name Then
Set tb = Workbooks.Open(Filename:=ThisWorkbook.Path & "\" & fName, UpdateLinks:=0, ReadOnly:=False)
rng.Cells(1, 1).Value = fName
fNstr = reg.Replace(fName, "") & "_"
'ブック内の各シートを順にコピー
For Each ts In tb.Worksheets
' ↓ではブック間だとうまく動作しない?
' ts.Copy After:=wb.Worksheets(wb.Worksheets.Count)
' やむを得ずセルのコピーで対応
wb.Worksheets.Add After:=wb.Worksheets(wb.Worksheets.Count)
Set ns = wb.Worksheets(wb.Worksheets.Count)
ns.Name = fNstr & ts.Name
ts.Cells.Copy Destination:=ns.Cells
rng.Cells(1, 2).Value = ts.Name
sh.Hyperlinks.Add Anchor:=rng.Cells(1, 2), Address:="", SubAddress:=ns.Name & "!A1"
Set rng = rng.Offset(1)
Next ts
tb.Close SaveChanges:=False
End If
fName = Dir
Loop
Application.AutomationSecurity = security
sh.Activate
'Application.ScreenUpdating = True
End Sub
No.2
- 回答日時:
VBAでやりたいなら次のようなステップを踏んではどうでしょうか?
① フォルダ内にあるxls(xlsx)データ名とデータ数を取得する.
② シートを作成する.
③ ある取得したデータ名と同一名のxlsファイルを開く.
④ アクティブシートを全選択し,コピーする.
⑤ ②で作成したシートに貼りつけする.
⑥ ②で作成したシート名を取得したデータ名に変更する.
⑦ ある取得したデータ名と同一名のxlsファイルを閉じる.
⑧ 繰り返し演算子(適当な引数)に1を加算する.
⑩ ②~⑧を繰り返し(Do~Loop),繰り返し演算子の数が①で取得したデータ数を超えた時に繰り返しを終了する.
データを開く順番は名前順で取得すれば良いと思います.
時間が無いので,コード記述まではできませんが,ご参考までに
ryo_ky様
ご回答、ありがとうございます。
ご回答していただいた内容を参考に本見ながらやってみたいと思います。
ただし自信がありませんので、時間があるときでかまいませんのでコードを記述していただければ助かります。
ありがとうございました。
よろしくお願いします。
No.1
- 回答日時:
方法↓
https://support.microsoft.com/ja-jp/help/881127
これを 延々と 100回繰り返す
複数のファイルをまとめる フリーソフト
http://www.vector.co.jp/soft/winnt/business/se40 …
しかし、ひとつのファイルに シートが 101も存在すると
それを探すのにも 手間がかかり 現実的ではないと思います。
DEBU-NEKOMARU様
リンク先までつけての回答ありがとうございます。
ブックの数はいろいろなんですが現在は教えていただいた上記の方法でやっています。
ネットで検索していたらVBAという方法が出てきたので本を買って調べたりしながらいくつか挑戦してみました。
しかし初心者のため、うまくできませんでした。
フリーソフトも会社のPCなため勝手にダウンロード出来ません。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelの警告について
-
エクセルの関数 ENTERを押...
-
エクセルを共有するとPCによっ...
-
Excel(2010)のフィルターが保...
-
Excelファイルをダブルクリック...
-
VBAでブックを非表示で開いて処...
-
WorkBooksをオープンさせずにシ...
-
エクセルにおける,「ブック」...
-
ブックのピボットを別ブックに...
-
同じフォルダへのハイパーリン...
-
Excelで複数ブックの同一セルに...
-
エクセルで参照しているデータ...
-
エクセルでウィンドウの枠固定...
-
Excel起動時に特定のワークシー...
-
VBA: ブックをアクティベイトで...
-
エクセルシートの一部を送りたい
-
エクセルで「ディスクがいっぱ...
-
Excelでブックの共有を掛けると...
-
別ブックから入力規則でリスト...
-
複数ファイルから特定シートの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの警告について
-
エクセルを共有するとPCによっ...
-
エクセルの関数 ENTERを押...
-
VBAでブックを非表示で開いて処...
-
Excel(2010)のフィルターが保...
-
エクセルで参照しているデータ...
-
エクセルにおける,「ブック」...
-
エクセルファイルを開かずにpdf...
-
ブックのピボットを別ブックに...
-
Excelで複数ブックの同一セルに...
-
Excelファイルをダブルクリック...
-
エクセルで「ディスクがいっぱ...
-
WorkBooksをオープンさせずにシ...
-
Excelでブックの共有を掛けると...
-
複数ファイルから特定シートの...
-
エクセルシートの一部を送りたい
-
Excel起動時に特定のワークシー...
-
エクセルで別ブックをバックグ...
-
エクセルで50行ごとに区切った...
-
別ブックから入力規則でリスト...
おすすめ情報