エクセルでデータを集めた表を作ろうとしています。
セルの位置も全く同じの売上報告書フォームが一シートに一枚あります。それぞれに売上先や金額などが入力されています。
これを一つのシートで「売上先」とか「金額」について2次元の表に作り直したいと考えています。
シートが400枚ぐらいあって、手作業ではとてもできません。
マクロとか使うなら、そのマクロプログラムもそのまま掲載頂きたく・・・。
月曜日までにはなんとかしたいという勝手な事情ですが、どうぞお助けください!
マクロでの実装例です。
先頭にシートを追加して、シートのタブで右クリック「コードの表示」で、下記を貼り付けて実行してみてください。
最初の2行の情報を適宜修正してから実行してください。
Const URISAKI_CELL = "C3" '2シート目以降の売り上げ先価格のセル位置 Const KINGAKU_CELL = "D3" '2シート目以降の金額のセル位置 Sub 集計() Range("B1").Value = "売上先" Range("C1").Value = "金額" Dim i For i = 2 To Worksheets.Count Cells(i, "B").Value = Worksheets(i).Range(URISAKI_CELL).Value Cells(i, "C").Value = Worksheets(i).Range(KINGAKU_CELL).Value Next End Sub
コメントは有効にしてもらえると、多少は補足出来ます。
マクロでの回答です。
集計というシートを挿入して以下のマクロを実行。
Sub Macro1() Dim rowCount As Long Dim myWorksheet As Worksheet With Worksheets("集計") .Range("A1").Value = "売上先" .Range("B1").Value = "金額" rowCount = 2 For Each myWorksheet In ThisWorkbook.Worksheets If myWorksheet.Name <> "集計" Then '以下のA1を売上先のセルに、B1を金額の入力されているセルに変更してください .Cells(rowCount, 1).Value = myWorksheet.Range("A1").Value .Cells(rowCount, 2).Value = myWorksheet.Range("B1").Value rowCount = rowCount + 1 End If Next End With End Sub
早速の回答有難うございました。
1番目の回答のような状態で、お手上げです。
もしよろしければ、見本ファイルをみていただけませんでしょうか。
マクロはシートの内容が分からないと作れませんので、
見本となるエクセルファイルを公開してはどうですか?
あるいは、「マクロの記録」をしながら1シート分の表作りを
手作業で行えば、目的のマクロが自動的に作成されます。
そのマクロにキーボードショートカットを割り付けておけば、
残り400枚のシートもかなり楽に処理出来るはずです。
アップしてみました。
内容はダミーに書き換えてもいいので、実際のファイルを貰わないとわからないですね。
というより想像で回答すると時間使うので。
ダウンロードできるようにしてくれれば見てみてもいいですよ。
アップしてみましたので、よろしくお願いします。
アップされたファイルから具体的に修正しました。
空白のシートは削除してください。空白行が入ります。
マージされたセルの位置は選択したときの名前ボックスというところで分かります。
Sub Macro1() Dim rowCount As Long Dim myWorksheet As Worksheet With Worksheets("集計") .Columns("D:D").NumberFormatLocal = "[$-411]ggge""年""m""月""d""日"";@" rowCount = 3 For Each myWorksheet In ThisWorkbook.Worksheets If myWorksheet.Name <> "集計" Then .Cells(rowCount, 2).Value = myWorksheet.Range("H5").Value .Cells(rowCount, 3).Value = myWorksheet.Range("W5").Value .Cells(rowCount, 4).Value = myWorksheet.Range("BQ3").Value .Cells(rowCount, 5).Value = myWorksheet.Range("F9").Value .Cells(rowCount, 6).Value = myWorksheet.Range("AA20").Value .Cells(rowCount, 7).Value = myWorksheet.Range("AO16").Value .Cells(rowCount, 8).Value = myWorksheet.Range("AQ34").Value .Cells(rowCount, 9).Value = myWorksheet.Range("AQ44").Value .Cells(rowCount, 10).Value = myWorksheet.Range("AQ56").Value .Cells(rowCount, 11).Value = myWorksheet.Range("AQ62").Value .Cells(rowCount, 12).Value = myWorksheet.Range("AR69").Value .Cells(rowCount, 13).Value = myWorksheet.Range("AQ78").Value .Cells(rowCount, 14).Value = myWorksheet.Range("AQ82").Value .Cells(rowCount, 15).Value = myWorksheet.Range("AQ86").Value .Cells(rowCount, 16).Value = myWorksheet.Range("AQ90").Value rowCount = rowCount + 1 End If Next End With End Sub
本当に感謝の言葉も見当たりません。
このマクロのおかげで400枚ほどの全ての報告書を一気にまとめることができました。本当に、マクロの威力はすごいです。。。これを機会に私もすこし勉強しようと思います。
一つのブックに400枚すべてのシートが入らなかったので、いくつかにまとめるのに手間取りましたが、おかげさまで仕事をいま完了することができました。これがなかったら、いまごろ徹夜で日曜日も犠牲になっているところでした。
本日は他の仕事の都合でお返事が遅くなりまして申し訳ありませんでした。
感謝の気持ちはポイントで表したいと思います。
ありがとうございました。
アップロードされた集計用のワークシートを表示した状態で
以下のマクロを実行すればOKです。
Sub Summary() Dim sheet As Worksheet rowNumber = 3 For Each sheet In Worksheets If sheet.Range("B5").Value = "物件コード" Then Cells(rowNumber, 2).Value = sheet.Range("H5").Value Cells(rowNumber, 3).Value = sheet.Range("W5").Value Cells(rowNumber, 4).Value = sheet.Range("BQ3").Value Cells(rowNumber, 5).Value = sheet.Range("F9").Value Cells(rowNumber, 6).Value = sheet.Range("AA20").Value Cells(rowNumber, 7).Value = sheet.Range("AO16").Value Cells(rowNumber, 8).Value = sheet.Range("AQ34").Value Cells(rowNumber, 9).Value = sheet.Range("AQ44").Value Cells(rowNumber, 10).Value = sheet.Range("AQ56").Value Cells(rowNumber, 11).Value = sheet.Range("AQ62").Value Cells(rowNumber, 12).Value = sheet.Range("AR69").Value Cells(rowNumber, 13).Value = sheet.Range("AQ78").Value Cells(rowNumber, 14).Value = sheet.Range("AQ82").Value Cells(rowNumber, 15).Value = sheet.Range("AQ86").Value Cells(rowNumber, 16).Value = sheet.Range("AQ90").Value rowNumber = rowNumber + 1 End If Next sheet End Sub
有難うございました。
上の回答のような気持ちです。
今回提示いただきましたマクロを用いると、例外的に位置がずれていた売上報告書を把握することが出来ませんでした(上のマクロであれば空白が生じたので、それによってどの報告書がずれていたのか知ることが出来ました)。
しかし、そのようなことは軽微なことで、実際にマクロを示していただき、大変ありがとうございました。
気持ちはポイントで表現させてください。
ファイルは見れませんでした(2枚目以降のシートが本当に同じ体裁なら2箇所を書き直すだけです)。
赤い字を集計したい実際のセルの位置に直して実行してください。
セルが結合されている場合は、左上の位置を指定します。
失敗してもダメでも、一度試してみてはどうでしょうか。
その上で、どうなったかを詳しく説明してください。
ありがとうございます。
なぜファイルがみれなかったかわからないのですが・・・。
いずれにせよ、最初にお返事を頂き、感謝しております。
ファイルを見ましたが、1番さんの回答でも2番さんの回答でもいいんじゃないですかね。
結合されているセルのどこを指定すればいいかは、実際にセルを選択してみるとわかります。
数式バーを表示していれば、マウスで選択したときに左上の名前ボックスに表示されているのが指定するべきセルです。
物件コードであればH5でしたよ。
マクロがうまく使えないというなら、集計用シートのA列にとにかくシート名を縦に入力して、物件コードであれば、B2に
=INDIRECT(ADDRESS(5,8,1,TRUE,A2),TRUE)
のような式を入れて縦にドラッグすれば拾えます。
式の意味は
=INDIRECT(ADDRESS(参照したい行番号,参照したい列番号,1,TRUE,参照したいシート名を入力したセル),TRUE)
なので、項目ごとに行番号列番号は変える必要があります。
これも上と同じように名前ボックスを参考に、番号を数えてください。
まあ、これ以上の丸投げだとやる気は起きないので、他の方の回答を空けてみるというのはどうでしょう。
有難うございます。
> =INDIRECT(ADDRESS(5,8,1,TRUE,A2),TRUE)
この関数では数字をひろってくれませんでした・・・。
丸投げをした意図はなかったのですが、結果的にそのように見えてしまったかもしれませんので、反省しております。
いずれにせよ、回答を頂いた皆さんに感謝です。
早速の回答有難うございます。
シートを良く見るとセルが結合されてます・・。
また、赤い数字の部分は、本当は関数による算出の結果です。
どうしたらよいのでしょうか。
4番目の方のお申し出に甘えて、見本のファイルをアップしてみました。
http://www.geocities.jp/pianziguang/mihon.xls
完成までに時間がなく、どうか助けてください。
(コメントを有効にする方法がわかりません・・・。)