• ベストアンサー

Excel 別シートに自動で抽出するには・・・?

Excelの質問です。 基本のシートに都度入力されていくデータを、自動で別シートに抽出する方法がどうしてもわからないので、どなたか教えて下さい・・・m(_゛_;)m 【Seet1】基本シート ※ 都度入力します    A    B     C     D 1 08.9.1  渡辺  ジャケット  80,000- 2 08.9.1  小沢  スカート   30,000- 3 08.9.2  二宮  パンツ    40,000- 4 08.9.3  渡辺  ブラウス   20,000- 【seet2】渡辺シート 基本シートに入力されたと同時に自動に反映    A    B     C     D 1 08.9.1  渡辺  ジャケット  80,000- 2 08.9.3  渡辺  ブラウス   20,000- 3 このようなファイルを完成させたいのですが、どの関数を使用したらよいのか教えて下さい・・・m(_゛_;)m

質問者が選んだベストアンサー

  • ベストアンサー
  • kigoshi
  • ベストアンサー率46% (120/260)
回答No.4

大変失礼しました。 #3のコードにバグがあります。 訂正いたします。 Private Sub Worksheet_Change(ByVal Target As Range) Const kingakuCol As Integer = 4 Const rowNote As Integer = 5 Dim MySheet As String Dim rIdx, cIdx As Long If Target.Column <> kingakuCol Then Exit Sub Application.EnableEvents = False On Error GoTo errTrap MySheet = Cells(Target.Row, 2).Value If Cells(Target.Row, rowNote).Value = "" Then rIdx = Sheets(MySheet).Range("A65536").End(xlUp).Row + 1 Cells(Target.Row, rowNote).Value = rIdx Else rIdx = Cells(Target.Row, rowNote).Value End If For cIdx = 1 To 4 Sheets(MySheet).Cells(rIdx, cIdx).Value = Cells(Target.Row, cIdx).Value Next Application.EnableEvents = True End errTrap: If Err.Number = 9 Then MsgBox "この担当者用シートがありません。" Else MsgBox "エラーが発生しました。" End If Application.EnableEvents = True End Sub

suneo_wk
質問者

お礼

ご丁寧にどうもありがとうございました(*^0^*)! とても勉強になりました!!

その他の回答 (3)

  • kigoshi
  • ベストアンサー率46% (120/260)
回答No.3

基本シートのシートタブを右クリックし「コードの表示」をクリックします。 右側のエディタエリアに下記コードを貼り付けます。 ++++++++++++++++++++++++++++++++++++++++ Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Const kingakuCol As Integer = 4 Const rowNote As Integer = 5 Dim MySheet As String Dim rIdx, cIdx As Long If Target.Column <> kingakuCol Then Exit Sub On Error GoTo errTrap MySheet = Cells(Target.Row, 2).Value If Cells(Target.Row, rowNote).Value = "" Then rIdx = Sheets(MySheet).Range("A65536").End(xlUp).Row + 1 Cells(Target.Row, rowNote).Value = rIdx Else rIdx = Cells(Target.Row, rowNote).Value End If For cIdx = 1 To 4 Sheets(MySheet).Cells(rIdx, cIdx).Value = Cells(Target.Row, cIdx).Value Next Application.EnableEvents = True End errTrap: If Err.Number = 9 Then MsgBox "この担当者用シートがありません。" Else MsgBox "エラーが発生しました。" End If Application.EnableEvents = True End Sub ++++++++++++++++++++++++++++++++++++++++ 金額を入力した時点で、各担当者シートへ転記します。 ご質問では金額の列がD列(4列目)になっていますが、変更したいときは Const kingakuCol As Integer = 4 の数字を変更して下さい。 あとで基本シートのデータを修正したとき各担当者シートで変更する行位置が 必要になるため、各担当者シートの何行目に転記したかを基本シートに記録し ています。ここではE列(5列目)にしていますが、使っていない列であれば、 どこでも良いので、必要に応じて Const rowNote As Integer = 5 の数字を変更して下さい。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

基本データの入っているシート名を「基本シート」として、個人別シートのA1セルに検索用の文字列(「渡辺」など)が入っていると仮定します。 また、基本データは1行目からデータがあり、個人別シートへの集計は3行目から行うものとします。 <シートの参照で行う方法> (1)個人別シートのA列(3行目以降)を選択状態で、A3セルに    =IF(基本シート!$B1:$B100=Sheet4!$A$1,基本シート!A1:A100,"") を入れ、配列数式を設定。(Ctrl+Shft+EnterでFix→式の両側に{ }が付くはずです) (2)このA列をそのままD列までオートフィル 以上で、A1セルと同じ名前の行だけ抜き出せます。 空白行を詰めるには、オートフィルタで「空白行以外」を選択すれば上詰めにすることができ、ご希望の体裁になると思います。 基本シートのデータが変われば自動的計算で値は反映されますが、オートフィルタの状態だと表示行までは修正されないようです。 新しいデータを表示させるには、「空白行以外」の選択を再度手動で行う必要があります。 (上の(1)の式はデータが100行までを想定してしますので、必要に応じて修正してください。) <マクロで行う方法> アクティブなシートの集計を行うマクロの例です。 これをループで回せば、個人シート全部の集計を一度に行うことも可能です。 Sub test()  Dim St0 As Worksheet, St1 As Worksheet  Dim i As Long, itmp As Long  Set St0 = Worksheets("基本シート")   Set St1 = ActiveSheet   itmp = 3 '**転記するスタート行番号   For i = 1 To St0.Cells(Rows.Count, 2).End(xlUp).Row    If St0.Cells(i, 2).Value = St1.Cells(1, 1).Value Then     St1.Cells(itmp, 1).Resize(1, 4).Value = St0.Cells(i, 1).Resize(1, 4).Value     itmp = itmp + 1    End If   Next i End Sub こちらの場合は、基本シートに新しい情報を加えてもマクロを実行しない限り、自動的に反映されることはありません。

suneo_wk
質問者

お礼

マクロ以外のご回答ありがとうございました!! 参考にさせて頂きます(*^0^*)!!

  • chiune
  • ベストアンサー率24% (30/124)
回答No.1

ワークシート関数だけでは無理だと思います。 以下、補足をお願いいたします。 1)VBAを使用しても良いですか。 2)各担当者別の名前はどのように指定されますか。   たとえば、シート名(シートタブの名前)が渡辺や二宮になっている、   あるいはシートのA1セルに担当者名が入っている、など。 3)入力済みのデータに変更があった場合、各担当者シートの内容も連動す   る必要がありますか。 4)入力済みのデータを行ごと削除することはあり得ますか。   逆に、途中に行挿入することがあり得ますか。

suneo_wk
質問者

補足

chiune 様 早速のご回答ありがとうございます! 補足を致します。 1)使用して構いません 2)seet名にもそれぞれ〔渡辺〕〔二宮〕と入力し、seet内のA1にも、見出しで〔渡辺〕と入力します   ※〔〕は入力しません 3)可能ならば連動したいですが、難しいのであれば、手入力で変更するので構いません 4)途中で行削除や、挿入はしません では、大変お手数ですが、宜しくお願い致します・・・m(_ _;)m

関連するQ&A

  • Excelで別シートから自動入力したい。

    「seet1」と名付けたシートがあります。 B-2のセルに品物のIDナンバーを入力する欄があります。 IDナンバーは1~100のどれかです。 またB-4のセルには、品物の発送先を入力する欄があります。 別の、「seet2」と名付けたシートがあります。 Aの列に品物のIDナンバーが上から番号順に入力する欄があります。 Bの列には、品物のIDナンバーに対応して、上から順にその品物の発送先を入力する欄があります。 私がやりたい事は、 (1)発送先が未入力の一番若いIDナンバーを、自動でseet1のB-2のセルに入力する事。 (2)B-4のセルに入力した発送先を、IDナンバーと対応させて、seet2の項目へ自動で入力する事。 (3)seet1は、エクセルのファイルを開くと、毎回何も入力されていない状態で立ち上がる。 (4)seet1が消去されても、seet2はそのまま残る様にする事。 どのようにすれば可能でしょうか。 (1)~(4)のうち、どれか一つだけでも教えて頂けたら幸いです。 よろしくお願いします。

  • エクセル2003で1つのシートのデータを別の2つのシートに振分けるには

    エクセル2003で1つのシートのデータを、2つのシートへ振り分けるための関数はあるのでしょうか?例えば seet1に次のようなデータガあるとして   A    B    C    D 1 氏名  年齢  性別   住所 2 佐藤  30   男性    東京都 3 伊東  40   女性    大阪府 4 中村  50   男性  北海道 5 後藤  60   女性  京都府 C列「性別」に「男性」を入力すればseet2に、「女性」だったらseet3に。 氏名や年齢等を上から順番に表示(入力)させたいんですが… (seet2・3ともに、データの列の順番はseet1とは異なりなす。) 次にseet1の「6列目」に男性を入力するとseet2の「4列目」に行くように (表を作ると) seet2には   A     B    C  1 住所   氏名  年齢 2 東京都  佐藤  30 3 北海道  中村  50 4 (seet1「6列目」の人) seet3には   A      B     C  1 住所    氏名   年齢 2 大阪府   伊東   40 3 京都府   後藤   60 seet1に入力したデータを、性別で振り分けseet2に男性、seet3に女性を… 関数を使いできるでしょうか? 実際には同じようなデータを何度も「コピぺ」で入力していて非常に面倒くさいので、宜しくお願いします。ちょっと、分かりにくいですか?

  • 別シートへ自動記入

    sheet1   A   B    C 1 3/4  大阪  岡田 2 3/5  東京  鈴木 3 3/5  大阪  石川 4 3/6  広島  稲葉 5 3/6  東京  渡辺 ・ ・   ・   ・ ・ ・   ・   ・ sheet2(大阪)  A 1岡田 2石川 sheet2(東京)  A 1鈴木 2渡辺 sheet1のB列に大阪と入力すると、それに対応するsheetにこの場合はsheet2のA列にsheet1のC列を、東京入力でsheet3のA列に名前を自動で入力するにはどのようにすればよいでしょうか? 数千円する本を買ってきてやってみて、ネットでも調べましたが全然ダメです。知識が足りませんがどうかよろしくお願いします。

  • エクセルで別シートに抽出

    エクセルで同じBOOKに以下のようなシートがあります。 【sheet1】 A B C D E… 5 7 8 9 3… 3 3 6 5 6… 【sheet2】 A B C D E… 2 7 8 5 3… 6 3 9 5 7… 【sheet3】 A B C D E… 1 8 5 7 6… 1 3 8 5 7… こんなシートがsheet1~sheet50まであり、これを 【sheet51】に A A A  5 2 1 3 6 1 【sheet52】に B B B 7 7 8 3 3 3 のようになるだけ簡単に抽出したいのですが… どなたか、よろしくお願いします。

  • 一部のデータを別シートに自動的に抽出したい

    仕事で顧客データの入力をしています。そのデータの中で、ある条件に満たすデータの一部を別シートに自動的に抽出できるようにしたいです。必死に調べたのですが、できません。どうか教えてください。 ※基本データ(これからも毎日ここに入力します)   A     B    C     D     E    F     G   1  NO 担当者 お客様  日付   年齢  住所  土地有無 2 1  林   鈴木  3/1  55  ☆    有 3 2  国分  田中  3/1  37  ☆    無 4 3  国分  近藤  3/2  41  ☆    無 土地有無欄(G列)の「無」に該当する担当者列(B列)、お客様列(C列)のみを別シートに自動的に抽出する様にしたいです。 ※抽出先のシート    A      B       C      D     E 1 担当者 お客様名  予算  希望建築地 家族構成 2 国分   田中  3 国分   近藤    C列とD列とE列は新たに追加入力していく項目です。

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

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

  • エクセル 別シートから一覧を抽出したい

    部品一覧表を作成しているのですが、2シートあり 1入力シート・2部品コードシートとあります。 部品コードシートにはB列に部品番号・C列部品名・D列部品番号・E列部品名と2行ずつ使い番号・品名がB~Wまで47行分入力されています。 B1:C47、D1:E47…と2列47行にはそれぞれ【A】、【B】、…とセルの名前の定義をつけました。現在【H】までありますが、今後増える可能性があります。 入力シートに、セルの名前を指定したときに部品コードのシートから 一覧を抽出したいのですが、どの関数を使えばよいのかわかりません。 入力シート                 |部品コードシート G   H                  | A Bコード C部品名  Dコード E部品名 4式入力用にあけています。     |1 1800  ユニットA   1501 電源A 5コード 部品名             |2 1801  ユニットB   1502 電源B 6                       |3 G4に関数を入れてG6~G52まで部品コードのシートA1~A47を一気に表示 させたいのです。部品コードシートの行数が変わることはありません。 マクロを使わないと、関数では難しいでしょうか?

  • Excel 異なるシートに自動入力 請求書作成

    例ですが、以下のようにsheet1のセルに入力されています    【sheet1】     A      B      C      D 1  品物   お届け先  配送料   名前 2  リンゴ   品川     100    佐藤 3  みかん  足立      150 田中 4  リンゴ   太田     100    加藤 5  いちご   品川     100    佐藤               ・               ・               ・               ・ *ABCD、12345はセルの位置を示しています。 sheet2に 以下のように自動で入力させ、佐藤さんへの配送料の請求書を作成を考えております。 ・名前がsheet1に「佐藤」と入力されたものだけseet2に 「品物」「配送料」を自動で入力 ・空白は無くA2セルから順に入力される ・「品物」「お届け先」「合計」が入力されている、行には入力しない  (入力されている行は飛ばしてその次の行から入力) 【sheet2】     A      B      C      D 1  品物   お届け先                ←「品物」、「お届け先」は固定  2  リンゴ    100                  ←入力欄 3  いちご 100                  ←入力欄       4                              ←入力欄     5 合計    200                  ←「合計」 は固定  6                              ←入力欄 VLOOKUP関数を用いて自動で入力させようと考えたのですが、TRUEではないセルは「#N/A」(もしくはIF文で空白)と入力させてしまうため,他の方法がございましたら、と思い皆様の知恵をお借りしたく投稿いたしました。 宜しくお願いいたします。

  • EXCEL(2枚のSheetの比較・抽出)

    iwao32と申します。 EXCELについてまた教えてください。(まだまだど素人で、基本的な質問で申し訳ありません。) 以下の例で示します。 Sheet1                        Sheet2 A列     B列     C列           A列 1       10      a            2 2       20      b            4 3       30      c            5 4       40      d 5       50      e という2枚のSheetがあるとき、Sheet1のA列とSheet2のA列を比較して、Sheet1の中で、Sheet2のA列にあるものだけ、Sheet3に、 Sheet3 A列     B列     C列 2       20      b 4       40      d 5       50      e というものを作りたいのですが、やり方をお教えください。 よろしくお願いいたします。

  • Excel 複数のシートを使って自動入力させていです。

    Excel 複数のシートを使って自動入力させていです。 Sheet1に「一覧表」とし、A1に日にち・B1に入荷先・C1「品物名」・D1「金額」を入力していく一覧表を作成しました。 入荷先の名前をSheet2.3に作り、入荷先ごとにリストを作成したいです。 一覧表に入力しただけで、自動的に入荷先ごとのシートに自動的に入力されてるってことって出来ますでしょうか? 例   A   B   C   D 1 日にち 入荷先   品物   金額 2 4/1 Aスーパー たまねぎ  100 3 4/5 B商店    きゅり   50 これをSheet1「一覧表」をした場合、 Sheet2を「Aスーパー」とし、Sheet2を「B商店」として。同じ表を作成しておく。 一覧表のシートにAスーパーでの購入を入力すると、「Aスーパー」のシートに自動的に表が作られていく 説明下手で申し訳ありませんが、よろしくお願いします!

専門家に質問してみよう