(至急教えて下さい)

 エクセルでデータを集めた表を作ろうとしています。
 セルの位置も全く同じの売上報告書フォームが一シートに一枚あります。それぞれに売上先や金額などが入力されています。
 これを一つのシートで「売上先」とか「金額」について2次元の表に作り直したいと考えています。
 シートが400枚ぐらいあって、手作業ではとてもできません。
 マクロとか使うなら、そのマクロプログラムもそのまま掲載頂きたく・・・。
 月曜日までにはなんとかしたいという勝手な事情ですが、どうぞお助けください!

回答の条件
  • 1人50回まで
  • 登録:
  • 終了:2007/05/26 22:43:11
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答8件)

id:Mook No.1

回答回数1314ベストアンサー獲得回数393

ポイント100pt

マクロでの実装例です。

先頭にシートを追加して、シートのタブで右クリック「コードの表示」で、下記を貼り付けて実行してみてください。


最初の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

コメントは有効にしてもらえると、多少は補足出来ます。

id:haohan

早速の回答有難うございます。

シートを良く見るとセルが結合されてます・・。

また、赤い数字の部分は、本当は関数による算出の結果です。

どうしたらよいのでしょうか。

4番目の方のお申し出に甘えて、見本のファイルをアップしてみました。

http://www.geocities.jp/pianziguang/mihon.xls

完成までに時間がなく、どうか助けてください。

(コメントを有効にする方法がわかりません・・・。)

2007/05/26 02:18:43
id:SALINGER No.2

回答回数3454ベストアンサー獲得回数969

ポイント100pt

マクロでの回答です。

集計というシートを挿入して以下のマクロを実行。

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
id:haohan

早速の回答有難うございました。

1番目の回答のような状態で、お手上げです。

もしよろしければ、見本ファイルをみていただけませんでしょうか。

2007/05/26 02:15:20
id:thrillseeker No.3

回答回数328ベストアンサー獲得回数37

ポイント100pt

マクロはシートの内容が分からないと作れませんので、

見本となるエクセルファイルを公開してはどうですか?

あるいは、「マクロの記録」をしながら1シート分の表作りを

手作業で行えば、目的のマクロが自動的に作成されます。

そのマクロにキーボードショートカットを割り付けておけば、

残り400枚のシートもかなり楽に処理出来るはずです。

http://www.juno-e.com/excel/macro/macro1.htm

id:haohan

アップしてみました。

2007/05/26 02:15:19
id:memo77 No.4

回答回数238ベストアンサー獲得回数20

ポイント30pt

内容はダミーに書き換えてもいいので、実際のファイルを貰わないとわからないですね。

というより想像で回答すると時間使うので。

ダウンロードできるようにしてくれれば見てみてもいいですよ。

id:haohan

アップしてみましたので、よろしくお願いします。

http://www.geocities.jp/pianziguang/mihon.xls

2007/05/26 02:15:16
id:SALINGER No.5

回答回数3454ベストアンサー獲得回数969

ポイント400pt

アップされたファイルから具体的に修正しました。

空白のシートは削除してください。空白行が入ります。

マージされたセルの位置は選択したときの名前ボックスというところで分かります。

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
id:haohan

本当に感謝の言葉も見当たりません。

このマクロのおかげで400枚ほどの全ての報告書を一気にまとめることができました。本当に、マクロの威力はすごいです。。。これを機会に私もすこし勉強しようと思います。

一つのブックに400枚すべてのシートが入らなかったので、いくつかにまとめるのに手間取りましたが、おかげさまで仕事をいま完了することができました。これがなかったら、いまごろ徹夜で日曜日も犠牲になっているところでした。

本日は他の仕事の都合でお返事が遅くなりまして申し訳ありませんでした。

感謝の気持ちはポイントで表したいと思います。

ありがとうございました。

2007/05/26 22:31:45
id:thrillseeker No.6

回答回数328ベストアンサー獲得回数37

ポイント200pt

アップロードされた集計用のワークシートを表示した状態で

以下のマクロを実行すれば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
id:haohan

有難うございました。

上の回答のような気持ちです。

今回提示いただきましたマクロを用いると、例外的に位置がずれていた売上報告書を把握することが出来ませんでした(上のマクロであれば空白が生じたので、それによってどの報告書がずれていたのか知ることが出来ました)。

しかし、そのようなことは軽微なことで、実際にマクロを示していただき、大変ありがとうございました。

気持ちはポイントで表現させてください。

2007/05/26 22:34:48
id:Mook No.7

回答回数1314ベストアンサー獲得回数393

ポイント50pt

ファイルは見れませんでした(2枚目以降のシートが本当に同じ体裁なら2箇所を書き直すだけです)。


赤い字を集計したい実際のセルの位置に直して実行してください。

セルが結合されている場合は、左上の位置を指定します。



失敗してもダメでも、一度試してみてはどうでしょうか。

その上で、どうなったかを詳しく説明してください。

id:haohan

ありがとうございます。

なぜファイルがみれなかったかわからないのですが・・・。

いずれにせよ、最初にお返事を頂き、感謝しております。

2007/05/26 22:35:50
id:memo77 No.8

回答回数238ベストアンサー獲得回数20

ポイント30pt

ファイルを見ましたが、1番さんの回答でも2番さんの回答でもいいんじゃないですかね。

結合されているセルのどこを指定すればいいかは、実際にセルを選択してみるとわかります。

数式バーを表示していれば、マウスで選択したときに左上の名前ボックスに表示されているのが指定するべきセルです。

物件コードであればH5でしたよ。


マクロがうまく使えないというなら、集計用シートのA列にとにかくシート名を縦に入力して、物件コードであれば、B2に

=INDIRECT(ADDRESS(5,8,1,TRUE,A2),TRUE)

のような式を入れて縦にドラッグすれば拾えます。

式の意味は

=INDIRECT(ADDRESS(参照したい行番号,参照したい列番号,1,TRUE,参照したいシート名を入力したセル),TRUE)

なので、項目ごとに行番号列番号は変える必要があります。

これも上と同じように名前ボックスを参考に、番号を数えてください。


まあ、これ以上の丸投げだとやる気は起きないので、他の方の回答を空けてみるというのはどうでしょう。

id:haohan

有難うございます。

> =INDIRECT(ADDRESS(5,8,1,TRUE,A2),TRUE)

この関数では数字をひろってくれませんでした・・・。

丸投げをした意図はなかったのですが、結果的にそのように見えてしまったかもしれませんので、反省しております。

いずれにせよ、回答を頂いた皆さんに感謝です。

2007/05/26 22:38:10
  • id:Mook
    他の人はみんな見えてたんですね・・・。

    何で見えないんだろう。
  • id:haohan
    私の保存のやり方がわるかったかもしれません。
    どうしてだったのでしょうかね。。。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません