はじめまして。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を探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「黒歴史」教えて下さい
- ・2024年においていきたいもの
- ・我が家のお雑煮スタイル、教えて下さい
- ・店員も客も斜め上を行くデパートの福袋
- ・食べられるかと思ったけど…ダメでした
- ・【大喜利】【投稿~12/28】こんなおせち料理は嫌だ
- ・前回の年越しの瞬間、何してた?
- ・【お題】マッチョ習字
- ・モテ期を経験した方いらっしゃいますか?
- ・一番最初にネットにつないだのはいつ?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別ブックをダイアログボックス...
-
VBA シートをコピーする際に Co...
-
エクセルVBAが途中で止まります
-
VBA 別ブックからコピペしたい...
-
vbaでvbaProjectのパスワード解...
-
VBAで複数のブックを開かずに処...
-
【ExcelVBA】インデックスが有...
-
VBA コードを実行すると画面が...
-
ワイルドカード「*」を使うとう...
-
Excelマクロ 該当する値の行番...
-
【Excel VBA】書き込み先ブック...
-
エクセルVBAで書式と値の貼付け...
-
VBA 二つのブックをうまく扱え...
-
VBA 実行時エラー 2147024893
-
マクロのBeforeCloseイベントに...
-
教えて下さい!VBAで複数Excel...
-
VBAで別ブックのシートを指定し...
-
[Excel]ADODBでNull変換されて...
-
Excelブックがアクティブになっ...
-
エクセルVBAでテキストボックス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
別ブックをダイアログボックス...
-
エクセルVBAが途中で止まります
-
VBA 別ブックからコピペしたい...
-
ワイルドカード「*」を使うとう...
-
VBA コードを実行すると画面が...
-
【ExcelVBA】zip圧縮されたCSV...
-
【ExcelVBA】インデックスが有...
-
VBAで別ブックのシートを指定し...
-
VBAで別のブックにシートをコピ...
-
【Excel VBA】書き込み先ブック...
-
Excelマクロ 該当する値の行番...
-
VBAで複数のブックを開かずに処...
-
[Excel]ADODBでNull変換されて...
-
VBA シート名が一致した場合の...
-
VBA 実行時エラー 2147024893
-
VBSでExcelのオープン確認
-
ACCESSVBA からExcelの他ブック...
-
Excel2007VBAファイルの表示に...
-
フォルダ内の全てのファイルに...
おすすめ情報