• 締切済み

【エクセル】複数シートの値を参照して連続で表示する(一覧シートを作る)には

いつもお世話になってます。 エクセルで教えて下さい。 Sheet佐藤    品名   単価  数量  価格 1  いちご  100    5   500 2  ばなな  200    3   600 Sheet鈴木    品名   単価  数量  価格 1  めろん  500    1   500 2  ばなな  200    5  1000 と入力されていて、これを元に、 Sheet一覧    氏名  品名   単価  数量  価格 1  佐藤  いちご  100    5   500 2  佐藤  ばなな  200    3   600 3  鈴木  めろん  500    1   500 4  鈴木  ばなな  200    5  1000 と表示させたい。 Sheet佐藤・鈴木はそれぞれ行の追加・挿入・削除されることがあり、 その都度Sheet一覧に反映させられるようにしたいのですが、どのようにしたら可能でしょうか? (例えばSheet佐藤の2行目を削除した場合、 Sheet一覧    氏名  品名   単価  数量  価格 1  佐藤  いちご  100    5   500 2  鈴木  めろん  500    1   500 3  鈴木  ばなな  200    5  1000 となるように) また、タイトルとは質問が反れますが、 「価格」の列に「=B2(単価)*C2(数量)」という式が入っている場合、 1:式を変更されたくないので保護をかけたい。 2:保護をかけると行削除が出来ない。 3:行を挿入したら自動的に同じ式が入るようにしたい。 という希望を満たすにはマクロしかないでしょうか? (マクロは初心者でほとんどわからないので・・・) どうぞよろしくお願いします。

  • Kaboo
  • お礼率31% (19/61)

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

質問は、VBAでやる部類の問題だと思います。結局下へ継ぎ足した続けたデータを作るということでしょう。 関数式でなんて考えてないでしょうね。下記に紹介するが、式だらけで、馬鹿げているように思う。 データ例 シート名:東京 A2:A7に a b c v f g シート名:Sheet2 A2:A10 1 w e r t y s d f シート名:Sheet3 A2:A5 23 11 23 w 統合したデータを置くシート名:Sheet4 H1:H3に 東京 sheet2 sheet3 F2に=COUNTA(INDIRECT(H1&"!$A$2:$A$10"))と入れて F4まで式を複写する。 6 9 4 となる。 G1に0 G2に=SUM($F$2:F2)+1と入れて G3以下に式を複写する。 0 7 16 20 となる。 Sheet4のI2に =IF(A1=A2,I1+1,1)と入れて下方向に式を複写する。 Sheet4のA2に =INDIRECT(VLOOKUP(ROW()-1,$G$1:$H$4,2,TRUE)&"!A"&IF(A1=A2,I1+1,1)+1) といれ A20まで式を複写する。 a b c v f g 1 w e r t y s d f 23 11 23 w となる。 B列は =INDIRECT(VLOOKUP(ROW()-1,$G$1:$H$4,2,TRUE)&"!B"&IF(A1=A2,I1+1,1)+1) とし、式を下方向に複写する。

Kaboo
質問者

お礼

ご回答ありがとうございます。 マクロは初心者な為、関数式で出来ないかと思ったのですが、 どうやら考え方が甘かったようです・・・。 データ量が多いですし、あんまり式だらけにしても重くなるだけですよね。

  • 134
  • ベストアンサー率27% (162/600)
回答No.2

たくさんの要素を含んでいますね。 「一覧」を作るためには、「マクロ」にて 1.「一覧シート」をクリアする 2.「一覧シート」以外の必要なシートを数える 3.for~nextにより、とりまとめるべき回数繰り返しつつ 4.「必要なシート」を選択 5.「データ範囲」をコピー 6.「一覧シート」のデータのない行に貼り付け というプログラムが必要そうです。 シートの並びや名前等がわかりませんので、具体的なものは控えます。 保護について 「編集」→「ジャンプ」→「セル選択」→「数式」で選択可能かもしれません。事前にセル範囲を全指定し、右クリックから「セルの書式設定」→「保護」により保護の解除をし、数詞キセル選択後に、同じ操作で保護を設定する必要がありますけど  excl2003以降だと行削除を許可するかどうかは、設定可能のようです。  関数で設定するなら、indirect文を使うか、削除せずにクリア→並び替えでクリアするようかもしれません。  行挿入についても、indirect文を使用するか、コピー→コピーした行を挿入 が有効そうです。  あとは、SuperMildさんの例示の通り、イベントプロシージャを活用したマクロを作るようかもしれません。

Kaboo
質問者

お礼

ご回答ありがとうございます。 indirect文というのを使ったことがなく あまり良く理解出来ませんでしたので 勉強したいと思います。

noname#123709
noname#123709
回答No.1

汚いけど、これでいけるかな? Sheet一覧のシートモジュールとしてSheet一覧がアクティブになると動きます。 もっとスマートなやりかたを誰かが書いてくれるはず! Private Sub Worksheet_Activate() Dim i As Long, j As Long, k As Long Dim Sh As Worksheet With Sheets("sheet一覧") Rows("2:1000").ClearContents For Each Sh In Worksheets For i = 2 To Sh.Range("A65536").End(xlUp).Row For j = 1 To 3 .Range(Cells(65536, j), Cells(65536, j)).End(xlUp).Offset(1).Value _ = Sh.Cells(i, j).Value Next j k = .Range("D65536").End(xlUp).Offset(1).Row .Range("D65536").End(xlUp).Offset(1).Value = "=B" & k & "*C" & k Next i Next End With End Sub 保護を掛けるのは簡単ですが、懸念されている通り、行削除はできません。 自動で数式をいれるのはできるが、そのタイミングとして「行挿入したら」 は無理だと思う。

Kaboo
質問者

補足

ご回答ありがとうございます。 早速試してみたのですが、どうやら2回繰り返されている様なのです。 (各シートを2回ずつ参照している?) それからもう1点、例ではD列に=B*Cという計算式を・・・としていますが、 実は列はもっとたくさんありまして、D列以降Z位まで(もっとかも)あります。 マクロはほとんどわからない為、どこをどう修正するといいのかわからなくて・・・。 補足いただけると大変助かります。よろしくお願いします。

関連するQ&A

  • エクセルの複数条件 並び替え・表示

    在庫管理をしています。 在庫表のようなものを作りたいのですが、うまく行かなくて困っています。よろしくお願いします。 うまく表現できないのですが、たとえば、シート1に、 品名   数量 いちご  10 もも   20 いちご  30 りんご  20 もも   15       と、あるものを、 品名 いちご  10 いちご  30 もも   20 もも   15 りんご  20 と、計算式で並び替えて別のシート(シート2)に一覧表にしたいと思っています。 今、品名の個数をカウントしていちごの1個目、いちごの2個目・・と、 やろうとしているのですが、うまく行かず行きません。 在庫は常に変化するので、何かよい方法がないものかと思っています。 品名に番号をつけて品名の数をカウントとしてみましたが、そこでとまっています。 「シート1」の「品名」の「★カウント」を表示できるような関数というのはあるのでしょうか? よろしくお願いします。

  • 【エクセル】一覧の値を複数シートの決まったセルに表示させたい。

    いつもお世話になっております。 [Sheet1]の一覧の値を、複数シートの決まったセルに表示させたいと思っております。 [Sheet2]から[Sheet1]のデータを引っ張ってくるような 数式などありましたら教えて下さい。 ex)[Sheet2]の(B1)に鈴木、(B2)総務部と表示させたい。 ex)[Sheet3]の(B1)に佐藤、(B2)人事部と表示させたい。 ()内の文字はセルの名前です。 宜しくお願いします。 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ [Sheet1] (A1)シート名 (B1)名前 (C1)部署名 (A2)Sheet2  (B2)鈴木 (C2)総務部 (A3)Sheet3  (B3)佐藤 (C3)人事部 [Sheet2] (A1)名前  (B1)鈴木 (A2)部署名 (B2)総務部 [Sheet3] (A1)名前  (B1)佐藤 (A2)部署名 (B2)人事部

  • Excel別シートに同じ値を反映させたい

    初めて質問いたします。 EXCELで見積書と別シートに商品一覧を作成しております。 商品一覧には単価、数量、合計金額で計算式を組んでおります。 商品一覧中数量を入力したものを商品名、単価、数量、合計金額として見積書に反映させたいと思っております。 同座標へは反映できるのですが、商品が数十種ある為、例えば行1と行5で数量入力した場合、見積書には行2~行4までは空白になってしまいます。この間隔を空けずに見積書に反映させることは出来るのでしょうか? ご教授いただきたくお願い申し上げます。

  • ExcelのVBAにて

    ExcelのVBAにて お世話になります。 今、請求書を作っています。 sheet1に請求書があり、sheet2に一覧があります。 sheet1の宛先欄に客先名を書いたら、該当する行を抜き出して請求書の欄に書き出すプログラムをお教えください。 <sheet1> 佐藤 様 ご請求額:3900円 商品名   数量  単価   金額 りんご   3   500  1500 バナナ   4   600  2400 <sheet2> 請求先  商品名  数量  単価  金額 佐藤   りんご   3  500 1500 田中   りんご   2  500 1000 田中   ばなな   1  600  600 佐藤   ばなな   4  600 2400 と、いう感じのExcelファイルです。

  • EXCEL 2つシートを参照して

    2つのビジネス・エクセルシートがあります。一つは型名と数量です。もう一つは型名と価格です。2つのシート内の型名が一致した場合、「型名と数量」のシートの同一シートの行に価格を入れることが出来るようなソフトはありませんか? 但し、2つのシートの型名の数は一致しませんので、全部ソートして貼り付けポンでは出来ません。宜しくお願いします。

  • エクセルで別シートを参照していて、参照元のデータを変更した場合

    エクセルで別シートを参照したいのですがうまくいきません。 (1)Sheet1には顧客データが入っています。 【Sheet1】   A   B   C 1 氏名 住所 性別  2 小川 東京 男 3 佐藤 大阪 女 4 鈴木 福岡 女 (2)Sheet2ではSheet1の顧客データの一部+獲得ポイントのデータが入っています。Sheet2のA列とB列に「=Sheet1!A2」とういう風に関数を入れてSheet1を参照しています。C列~は手入力でデータを入力しています。 【Sheet2】   A   B    C    D 1 氏名 住所  12/1 12/15  2 小川 東京  1    5 3 佐藤 大阪  1    5 4 鈴木 福岡  1    5 (3)Sheet1に新たに顧客情報を入れますが、氏名は五十音順にしたいので行を挿入して入力します。(行3に加藤さんを入れました) 【Sheet1】   A   B   C 1 氏名 住所 性別  2 小川 東京 男 3 加藤 沖縄 男 4 佐藤 大阪 女 5 鈴木 福岡 女 (4)私の希望としては、(3)をしたらSheet2は↓のようになってほしいのですが、実際には(2)の状態のままです。 【Sheet2】   A   B    C    D 1 氏名 住所  12/1 12/15   2 小川 東京  1    5 3 加藤 沖縄   4 佐藤 大阪  1    5 5 鈴木 福岡  1    5 (5)Sheet1の変更結果をSheet2に反映することは無理なのでしょうか?

  • エクセル:複数シートのデータを一覧シートに自動的に表示させるには?

    エクセル:複数シートのデータを一覧シートに自動的に表示させるには? こんにちは。 以前同じ質問をさせて頂いたのですが、締め切った後で試したところ どうにもうまくいかず(試さずに締め切ってしまった私が悪いのですが・・)、 もう一度質問させていただきます。 複数シート(6シート程度)に同一形式のリストがあり、あるシートに入力していくと 同一ファイル内の「一覧シート」に自動的にID番号順に表記される(※下記参照) というようにしたいと考えております。 何かよい方法はありますでしょうか? お知恵を拝借できれば幸いです。宜しくお願い致します。 (例) Sheet1 ID 日付     名前  達成度・・・(項目=15項目ぐらい) 1 2010/10/17  山田  A 4 2010/10/30  鈴木  A ・ ・ ・ (それぞれのシートに100個ぐらいのリスト) Sheet2 ID 日付     名前  達成度・・・ 2 2010/10/17  佐藤  C 3 2010/10/20  中村  B ・ ・ ・ 一覧シート ID 日付     名前  達成度・・・ 1 2010/10/17  山田  A 2 2010/10/18  佐藤  C 3 2010/10/20  中村  B 4 2010/10/30  鈴木  A ・ ・

  • エクセル:複数シートのデータを一覧シートに自動的に入力させるには?

    エクセル:複数シートのデータを一覧シートに自動的に入力させるには? こんにちは。 お恥ずかしながら一日に2回もエクセルの質問をさせて頂きます。 複数シートに同一形式のリストがあり、あるシートに入力していくと 同一ファイル内の「一覧シート」に自動的にID番号順に表記される(※下記参照) というようにしたいと考えております。 何かよい方法はありますでしょうか? お知恵を拝借できれば幸いです。宜しくお願い致します。 Sheet1 ID 日付     名前  達成度・・・ 1 2010/10/17  山田  A 4 2010/10/30 鈴木  A ・ ・ ・ Sheet2 ID 日付    名前  達成度・・・ 2 2010/10/17  佐藤  B 3 2010/10/20 中村  B ・ ・ ・ 一覧シート ID 日付    名前  達成度・・・ 1 2010/10/17  山田  A 2 2010/10/18  佐藤  B 3 2010/10/20 中村  B 4 2010/10/30 鈴木  A ・ ・

  • excelでシートから別シートに抽出する方法

    データシートに A   B    C 佐藤 りんご  25個 木村 オレンジ 3個 伊藤 メロン  12個 伊藤 スイカ  2個 佐藤 イチゴ  40個 佐藤 マンゴー 8個 というデータがあったとします。 それを別のシートに A   B    C 佐藤 りんご  25個    イチゴ  40個    マンゴー 8個 また別のシートに A   B    C 伊藤 メロン  12個    スイカ  2個 といったようにAに佐藤とか伊藤とか入力するだけでB、Cが自動で抽出できるようにできますか? 出来れば関数の入力でやりたいのですがわかる人がいましたらご教授ください。

  • 複数あるシートのある範囲だけを一覧表にまとめる

    複数枚(同じレイアウト)あるエクセルのシートで日報を作成しています。1日一枚作成しますので、シートの数は30枚です。そのレイアウト中に使用商品欄を設けてあります。実際にはD12が商品名E12が数量、F12が単価G12が金額で20行の使用商品記入欄があるシートです。使用商品が発生したときだけ記入するので、記入される行はまちまちです。 その範囲のみ30枚のシートを最終シートを作り、明細一覧のようにコピーペーストしています。 VBAを使い、自動に作成することはできるのでしょうか。 当方、超初心者なんです。 よろしくご伝授ください。

専門家に質問してみよう