No.2
- 回答日時:
こんばんは
>こういうことをマクロで実現することはできますでしょうか
できます。
こう回答しますと「サンプルをください」と言いたい気持ちにはなるでしょうが、
実際に使うプログラムとなるとこのサイトでは限界があると思います。
MEGUMI19800214さんが勉強されるか、出来る人に依頼するかしかないと思います。
>ディレクトリ内にある複数のエクセルファイルデータ
同じフォルダ内にあるエクセルファイルをすべて対象にするならば
Dir関数が利用できます。
Sub sumple()
Dim XlFile As String
ThisWorkbook.Activate
Worksheets(1).Select
Cells.Clear
XlFile = Dir("*.xls")
Do While XlFile <> ""
If XlFile <> ThisWorkbook.Name Then
'ここに、対象のエクセルファイルを開きコピーするプログラムを記述
End If
XlFile = Dir()
Loop
End Sub
コピー先のセルの最終行を取得するには
[A65536].end(xlup)
が便利です(A列は必ず値が入っており、空欄はないと想定しています)。
マクロからエクセルファイルを開いたり閉じた出来ますが、対象のファイルが既に開いていたらどうする?などの処理も必要です。
rukukuさま
分かりやすいご連絡を頂きまして本当にありがとうございます!
私はマクロについては本当にかじった程度なのですが、
マクロの記録を使ってみて、rukukuさまのアドバイスを参考に下記のマクロを作ってみました。
でも、うまく動きませんでした。
[A65536].end(xlup)も試してみたのですが、A,B,C,G,H列で使用する場合、
[A65536].end(xlup)
[B65536].end(xlup)
[C65536].end(xlup)
[G65536].end(xlup)
[H65536].end(xlup)
とするのでしょうか?
お忙しいところ大変恐れ入りますがもしお時間ありあしたら返信を頂ければ助かります。
宜しくお願い致します。
Sub 今月の整理()
Dim XlFile As String
ThisWorkbook.Activate
Worksheets(1).Select
Cells.Clear
XlFile = Dir("*.xls")
Do While XlFile <> ""
If XlFile <> ThisWorkbook.Name Then
Range("A2:C8,G2:H8").Select
Range("G2").Activate
Selection.Copy
ActiveSheet.Paste
Range("A9").Select
Application.CutCopyMode = False
ActiveWorkbook.Save
End If
XlFile = Dir()
Loop
End Sub
No.3
- 回答日時:
>でも、うまく動きませんでした。
私のサンプルに一部間違いがありました。申し訳ありません。
また、MEGUMI19800214さんが作成した部分にも不足があります。
それらを含めて、回答します。
まず、私が間違えた点です。
最初のDir関数は、以下の様にフォルダ名を指定する必要があります。
XlFile = Dir(ThisWorkbook.Path & "\*.xls?")
ThisWorkbook.Pathでマクロのあるブックのフォルダ名が取得できます
xlsの後ろに「?」を付けたのは、バージョン2007以降で拡張子がxlsxになったことへの対応です。
ExcelマクロからExcelファイルを開くには
Workbooks.Open ファイル名
を使います。このとき、新しく開いたブックが「アクティブ」になります。
Worksheets(1)以外が選択されている場合に備えて、ブックを開いたらWorksheets(1)を選択します。
また、2つのブックの間でコピーするので、どちらのブックを対象にしているのかを指示します。
>[A65536].end(xlup)も試してみたのですが、A,B,C,G,H列で使用する場合、
[A65536:H65536].End(xlUp)
でA~H列の最終の行が分かります。
以下がサンプルです。
Sub sumple()
Dim XlFile As String
Dim MotoDataLastRow As Long
Dim CopySakiLastRow As Long
ThisWorkbook.Activate
Worksheets(1).Select
Cells.Clear
XlFile = Dir(ThisWorkbook.Path & "\*.xls?")
Do While XlFile <> ""
If XlFile <> ThisWorkbook.Name Then
Workbooks.Open ThisWorkbook.Path & "\" & XlFile, ReadOnly:=True
Worksheets(1).Select
MotoDataLastRow = Workbooks(XlFile).Worksheets(1).[A65536:H65536].End(xlUp).Row '元データファイルの最終行を取得
CopySakiLastRow = ThisWorkbook.Worksheets(1).[A65536:E65536].End(xlUp).Row 'インポート先の最終行を取得
Range([A1], Cells(MotoDataLastRow, "C")).Copy ThisWorkbook.Worksheets(1).Cells(CopySakiLastRow + 1, "A")
Range([G1], Cells(MotoDataLastRow, "H")).Copy ThisWorkbook.Worksheets(1).Cells(CopySakiLastRow + 1, "D")
Workbooks(XlFile).Close False
End If
XlFile = Dir()
Loop
End Sub
本当にありがとうございます!
大成功でした。
恐縮なのですが、コピー範囲を指定するときに
2行目以降の列でデータがるものをすべて
とする場合、
[A65536:H65536]
に何を付け足せば上記の命令になるのでしょうか?
めぐ
No.4ベストアンサー
- 回答日時:
>2行目以降の列でデータがるものをすべて
Range([A1], Cells(MotoDataLastRow, "C")).Copy ThisWorkbook.Worksheets(1).Cells(CopySakiLastRow + 1, "A")
Range([G1], Cells(MotoDataLastRow, "H")).Copy ThisWorkbook.Worksheets(1).Cells(CopySakiLastRow + 1, "D")
を以下のように変更します
Range([A2], Cells(MotoDataLastRow, "C")).Copy ThisWorkbook.Worksheets(1).Cells(CopySakiLastRow + 1, "A")
Range([G2], Cells(MotoDataLastRow, "H")).Copy ThisWorkbook.Worksheets(1).Cells(CopySakiLastRow + 1, "D")
ただし、2行目以降に全くデータがないときには1行目をコピーしてしまいます。
そこで、IF文を使って2行目以降にデータがあるときだけコピーするようにします。
If MotoDataLastRow > 1 Then
Range([A2], Cells(MotoDataLastRow, "C")).Copy ThisWorkbook.Worksheets(1).Cells(CopySakiLastRow + 1, "A")
Range([G2], Cells(MotoDataLastRow, "H")).Copy ThisWorkbook.Worksheets(1).Cells(CopySakiLastRow + 1, "D")
End If
本当に何から何までありがとざいました。
頂いた内容でまったく問題なくできました。
親切にご指導下さりまして本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
- Excel(エクセル) Excelの関数でこんな処理ができますか 1 2023/02/08 13:46
- Excel(エクセル) マクロか関数で処理したいのですが、教えて頂けませんか。 8 2022/10/31 15:18
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルのオートフィルターのしぼりをクリアーしたい 2 2022/12/24 08:36
- UNIX・Linux Linuxについて質問です。 シェルスクリプト名をfind.shとして、以下の条件をすべて満たすファ 1 2023/02/03 03:50
- Excel(エクセル) VBA 文字列変換と指定した列にある日時データから時間を削除する方法について 2 2022/04/14 15:23
- Visual Basic(VBA) 複数ファイルのデータの統合について 12 2022/05/14 12:03
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- Excel(エクセル) VBA 指定した列にある日時データから時間を削除する方法について 4 2022/04/14 11:17
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAで保存しないで閉じると空の...
-
マクロの保存先、開いてるすべ...
-
【Excel VBA】マクロでExcel自...
-
エクセル関数>参照ファイル名...
-
複数のExcelブックを1つ...
-
excel VBA シート保存について...
-
エクセル;相対パスを絶対パスへ...
-
ファイルごとにセルの移動方向...
-
【Excel】特定セルの内容をテキ...
-
エクセルVBAで作成した別ブック...
-
【Excel】マクロの保存先について
-
Excel VBAで他のブックを選択...
-
マクロ 自動でパスワード及び指...
-
エクセルでメッセージボックス...
-
エクセルで読み取り専用の時に...
-
ブックを開いたとき自動的にバ...
-
エクセルで複数のファイル(ブッ...
-
エクセル 半角カナを全角に、...
-
エクセルマクロで(セルの削除...
-
名前の変わるブックをアクティ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAで保存しないで閉じると空の...
-
エクセル関数>参照ファイル名...
-
【Excel VBA】マクロでExcel自...
-
エクセル;相対パスを絶対パスへ...
-
マクロの保存先、開いてるすべ...
-
【Excel】マクロの保存先について
-
excelで直前に参照していたブッ...
-
EXcelのマクロで相対パスでファ...
-
エクセルVBAで作成した別ブック...
-
複数のExcelファイルの印刷設定...
-
エクセルのvbaにて thisworkboo...
-
EXCELのボタンによるマクロの登...
-
エクセルVBA 個人用マクロブッ...
-
EXCELマクロで、開いてはいるが...
-
EXCELブックが勝手に開いて困っ...
-
エクセルで未保存に対するメッ...
-
[フィルターオプションの設定]...
-
【Excel】特定セルの内容をテキ...
-
ファイル名変更後も、マクロを...
-
名前の変わるブックをアクティ...
おすすめ情報