
はじめまして。VBA初心者のため、お知恵を貸してください。
1つのフォルダの中に、いちご10月、いちご11月、みかん9月、なし8月、、という形で、月別のフルーツの売り上げデータが複数あります。
このExcelを、フルーツ別に1つのブックにまとめたいのですが、どのようなマクロにすればよいでしょうか。→例 いちご売上高 というExcelに、10月、11月というシートがついているイメージ
1、まとめたエクセルには、フルーツ名と売上高(例 いちご売上高.xlsx)というファイル名にしたいです。
2、月別のExcelに、シートは1つだけです。(月がシート名。例 10月)
3、フルーツによって、売上がない月もあります。
Excelの数が多く、手作業に時間がかかってしまうので
マクロでの作業に変更したいです。
よろしくお願いします。。
No.1ベストアンサー
- 回答日時:
Sub フルーツ別にExcelファイルを作成()
Dim wsSource As Worksheet
Dim wsDest As Worksheet
Dim LastRow As Long
Dim FruitName As String
Dim DestWorkbook As Workbook
Dim SourceWorkbook As Workbook
' 作業するフォルダのパスを指定します。必要に応じて変更してください。
Dim FolderPath As String
FolderPath = "C:\YourFolderPath\"
' フォルダ内のファイルを処理します。
Dim FileName As String
FileName = Dir(FolderPath & "*.xlsx")
' ファイルが存在する限りループします。
Do While FileName <> ""
' ファイルを開きます。
Set SourceWorkbook = Workbooks.Open(FolderPath & FileName)
' ファイル名からフルーツ名を抽出します。
FruitName = Left(FileName, InStr(FileName, "売上高") - 1)
' フルーツ名.xlsxの新しいブックを作成します。
Set DestWorkbook = Workbooks.Add
' 新しいブックにシートを1つ追加します。
Set wsDest = DestWorkbook.Sheets(1)
' シート名をフルーツ名に設定します。
wsDest.Name = FruitName
' ソースブックのデータをコピーして貼り付けます。
Set wsSource = SourceWorkbook.Sheets(1)
LastRow = wsSource.Cells(wsSource.Rows.Count, "A").End(xlUp).Row
wsSource.Range("A1:B" & LastRow).Copy wsDest.Range("A1")
' ソースブックを閉じて、次のファイルに進みます。
SourceWorkbook.Close SaveChanges:=False
FileName = Dir
Loop
' ファイル保存ダイアログを表示して、フルーツ別のExcelファイルを保存します。
Dim SavePath As String
SavePath = Application.GetSaveAsFilename("フルーツ別売上高.xlsx", FileFilter:="Excelファイル (*.xlsx), *.xlsx")
If SavePath <> "False" Then
DestWorkbook.SaveAs SavePath
End If
' 新しいブックを閉じます。
DestWorkbook.Close SaveChanges:=False
End Sub
回答いただき、ありがとうございます。
早速実行してみたところ、
DestWorkbook.SaveAs SavePath
のところで、止まってしまい、「オブジェクト変数又はwithブロック変数が設定されていません」というメッセージがでました。
全然分かっておらず、、、、、大変申し訳ないのですが、どのように対応すればよいでしょうか。
No.3
- 回答日時:
不明点です。
1.ファイルのフルーツ名の末尾に数字が付くことがありますか。
例として、みかん112月.xlsx の場合、
みかん1の12月分と判断できますが、
それを許すと、みかん11月.xlsxは、みかん1の1月分なのか、みかんの11月分なのかの判断ができなくなります。
従って、フルーツ名の末尾に数字が付くことがないことが保証されていれば、実現可能です。
2.ファイルの件数はおよそ何件でしょうか。
フルーツの件数が約40件だとすると、12か月分なので、最大40×12=480件
およそ、500件程度かと想定しますが、実際のところは、どのくらいあるのでしょうか。
3.○○売上高.xlsxのシートの並びは、どのようにしますか、
左から、
1案:1月、2月、3月、4月、・・・・11月、12月
2案:4月、5月、・・・・11月、12月、1月、2月、3月
が考えられます。2案は4月が年度開始月の場合に採用されることが多いです。
ご回答ありがとうございます!
不明点が多く、申し訳ありません。また、返信が遅くなり申し訳ありませんでした。
ご確認いただいた点ですが
1、フルーツ名の後ろに数字がつくことはありません。
2、ファイル件数は、1ヶ月20程度です。
3.シートの並び順は、二案の4月はじまりとなります。
と、なります。
No.2
- 回答日時:
こんにちは
不明点が多すぎるので、とてもコードにはできませんが、以下に大雑把な考え方を・・
同時並行で処理する方法も考えられますが、ややこしいと思いますので、(若干効率は悪いですが)順にひとつずつ処理する方法にしてあります。
ご参考までに。
1)まず、指定フォルダ内のフルーツ名をDictionaryなどを利用してリストアップします。
(エクセルなら、シートに全数リストアップしてから「重複を削除」してもよいです)
1-1)指定フォルダ内をDir関数やFSOを用いて、「.xlsx」ファイルを順に走査
(.xlsm等も含むのかは不明)
1-2)ファイル名が「xxx売上高.xlsx」のようなものは対象とせずスキップ
1-3)ファイル名の「11月」等より前の部分を取得
(月の数字が全角なのか半角なのか、あるいは混在なのか不明)
(InStr関数や正規表現で抜き出しできると思います)
1-4)dictionaryに登録することで、一意にする。
あるいは、シートにリストして「重複を削除」
※ 以上で、フォルダ内にあるフルーツ名のリストを作成できます。
※ 常に新規で作成するとしてよいのか、月別ファイルを追加して再実行する可能性があるのか等々不明ですが、一応、以下は後者として考えてあります。
※ 「xxx売上高.xlsx」ブックにすでに対象月が存在する場合にどうするのかも不明ですが、上書きしてよいものと仮定しました。
2)フルーツ名リストに従って、順にフルーツ毎に以下の処理を行う。
2-1)「フルーツ名売上高.xlsx」が存在するかDIR関数等で調べ、
存在すればブックをOPEN、なければ新規作成する。
2-2)フォルダ内の「フルーツ名*.xlsx」に該当するファイルを順に処理
2-3)ファイル名が「フルーツ名売上高.xlsx」の場合はそのファイルはスキップ
2-4)ファイル名から「フルーツ名」および「.xlsx」を削除したものを作成
(月名部分に、シート名として使えない文字があるのか不明ですが、存在する可能性があるのなら、削除したり「_」などに置き換えるなどが必要)
2-5)上記で得られる「月名」のシートが存在するか調べる。
存在しなければ、新規にシートを作成
2-6)処理中のシート全体を「月名」シートにコピペする
2-7)処理中のファイルを閉じて次のファイルへ
(該当ファイルがなくなるまで続ける)
2-8)「フルーツ名売上高.xlsx」を保存し、次のフルーツ名の処理へ
※ 2)の処理をフルーツ名毎に繰り返すことで、全体の処理ができるものと思います。
※ 一気に全部を作成しようとすると大変だと思いますが、部分部分に区切って順に動作を確認しながら作成してゆくことで、完成できるものと想像します。
ご回答ありがとうございます。
不明点が多く、申し訳ありません。
ファイル名ですが、月は半角でした。
まだまだ勉強不足なので、少しずつ区切って考えてみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAコード: マクロ有効ブック上のシート1にあるデータ範囲を、別のXLSのシートへ写す 2 2021/10/20 22:48
- Visual Basic(VBA) VBA CSV取り込みについて 3 2021/12/30 22:40
- Visual Basic(VBA) 各月の件数を取り出したい 9 2021/12/17 19:17
- Access(アクセス) accessでexcelデータを一部変換してインポートするVBAコードを教えてください。 2 2021/12/14 08:31
- 会計ソフト・業務用ソフト Excelで売上げデータの中の任意の商品の合計を出したい 3 2023/01/18 18:19
- Excel(エクセル) Excelについて 1 2023/03/06 10:26
- Excel(エクセル) 添付写真上のExcelシートのように時間と曜日ごとに担当者が振り分けられているシートがあります。 例 1 2023/03/08 13:02
- Visual Basic(VBA) EXCEL VBA シート比較し〇×判定 1 2021/11/19 11:49
- Excel(エクセル) EXCEL マクロで 同じフォルダ内の複数ファイルの複数行全体を選択して1つのファイルに集約 4 2022/09/27 18:41
- Excel(エクセル) EXCEL VBA 所定の日時に ファイル開封もしくはマクロを動けなくしたい 1 2021/11/27 19:11
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 別ブックからコピペしたい...
-
エクセルVBAが途中で止まります
-
VBA シートをコピーする際に Co...
-
VBA コードを実行すると画面が...
-
【Excel VBA】書き込み先ブック...
-
[Excel]ADODBでNull変換されて...
-
別ブックをダイアログボックス...
-
VBAで別ブックのシートを指定し...
-
【ExcelVBA】zip圧縮されたCSV...
-
VBAで複数のブックを開かずに処...
-
ワイルドカード「*」を使うとう...
-
Excelブックがアクティブになっ...
-
2つ目のコンボボックスが動作...
-
VBS Bookを閉じるコード
-
VBAで別のブックにシートをコピ...
-
エクセルのマクロについて教え...
-
VBSでExcelのオープン確認
-
【マクロ】違うフォルダにある...
-
マクロを使って不特定のファイ...
-
Dir関数で複数ブックへ行いたい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別ブックをダイアログボックス...
-
VBA シートをコピーする際に Co...
-
VBA 別ブックからコピペしたい...
-
エクセルVBAが途中で止まります
-
VBAで別ブックのシートを指定し...
-
ワイルドカード「*」を使うとう...
-
Excelマクロ 該当する値の行番...
-
VBAで別のブックにシートをコピ...
-
【Excel VBA】書き込み先ブック...
-
[Excel]ADODBでNull変換されて...
-
【ExcelVBA】zip圧縮されたCSV...
-
VBA コードを実行すると画面が...
-
【ExcelVBA】インデックスが有...
-
VBS Bookを閉じるコード
-
ユーザーフォームの切り替えに...
-
vbaでvbaProjectのパスワード解...
-
【VBA】全シートの計算式を全て...
-
Excel にて、 リストボックスの...
-
フォルダ内の全てのファイルに...
-
【マクロ】違うフォルダにある...
おすすめ情報