- 締切済み
エクセル 複数シートにまたがるデータの抽出
複数シートからのデータ抽出についていくつか拝見いたしましたが 知識が足らず、操作できませんでした。 下記のような抽出が可能であれば、ご教授いただけたらと思います。 なお、VBやマクロ等は使用したことは、ほぼありません。 シートが複数あり、またそのシートが増えていく可能性があります。 シート名→「start」「佐藤」「山本」「end」「集計1」「集計2」ととりあえず作成。 (「集計1」にて別のデータ合計をとるため、「start」「end」シートを作成しました。 なお、佐藤~山本のシートは同じ書式ですが、シート名が変わる可能性も高い。 今回したいのは「集計2」においてです) 「佐藤」シート A B C D 01 佐藤 02 \ 月曜 火曜 水曜 03 6:00 1 0.5 1 04 7:00 1 1 05 ~ 18 21:00 「山本」シート A B C D 01 山本 02 \ 月曜 火曜 水曜 03 6:00 04 7:00 1 1 1 05 ~ 18 21:00 1 1 1 「集計2(曜日毎で、月曜)」シート A B C D 01 月曜 02 03 6:00 佐藤 04 7:00 佐藤 山本 05 ~ 18 21:00 山本 「集計2(曜日毎で、火曜)」シート A B C D 01 火曜 02 03 6:00 佐藤 04 7:00 山本 05 ~ 18 21:00 山本 できれば、名前(シート)が非常にたくさんになる可能性があるので 集計2に出てくる名前は、詰めてが理想です。 また、できればあまり都度の細かい作業がなければありがたいです。 (利用者で、できない可能性が高い) よろしくお願い申し上げます。
- seed1109
- お礼率50% (1/2)
- オフィス系ソフト
- 回答数2
- ありがとう数2
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17068)
既に回答も出ているが、質問を一読したとき、判らなくて考えていたので 書いてみる。別の1人の意見・方法という事で上げる。 こういうエクセルでの表の組み換えは、関数では難しい。 式が長くなる。長くなるといっても、ただ長いだけでなく、その回答の式の意味を理解できる人も多くないだろう。 だからVBAででも処理をしないと難しい。だだしVBAの方も、質問しているレベルの人には 経験している人は少ないようで、同じことかもしれないが。 アイデアを知っている必要の在る鶴亀算と、知っておればどんな場合(問題)にでも使える 連立1次方程式で解くのとの違いを連想する。 私の持論として、エクセルを仕事の関係で使う場合は、VBAが出来ないと、 直ぐ行き詰ると思う。VBAも中級レベルぐらい出来ても、数日ぐらいは考える ・試行錯誤する必要がある場合が多いと思う。 ーー 前提 (1)個人シートと曜日シートは同一ブックにあるとする。 (2)個人シートはみな、同一フォーマットとする。 曜日シートもみな、同一フォーマットとする。 (3)セル番地的に 個人シートは A1に名前、B2:H2に曜日名 A3:A18に時間が有り、データはB3:H18にあるとする。 曜日シートは A1に曜日、3:A18に時間が有り、データはB3:○18にあるとする。○はデータに より列が決るということ。 (4)個人シートはシートタブ的に左に寄せ集めてあるものとする。 曜日シートは、シート名を月曜、火曜、・・日曜とする。 既に手作業で見出しなど作っておく (5)私のやり方の場合、作業表というシートを1枚使う。既に作っておくものとする。 ーーー 例データ 金曜日以右は略 佐藤 \ 月曜 火曜 水曜 木曜 6:00 1 0.5 1 7:00 1 1 1 8:00 1 1 1 9:00 1 1 10:00 1 1 11:00 1 1 12:00 1 13:00 1 14:00 1 15:00 1 16:00 1 17:00 18:00 19:00 20:00 21:00 ーーーーー 金曜日以右は略 山本 \ 月曜 火曜 水曜 木曜 6:00 7:00 8:00 1 1 9:00 1 1 1 10:00 1 1 1 11:00 1 0.5 1 1 12:00 1 1 1 1 13:00 1 1 1 14:00 1 15:00 16:00 17:00 18:00 19:00 20:00 21:00 ーーーー コード 標準モジュールに Sub test01() sn = Array("", "", "月曜", "火曜", "水曜", "木曜", "金曜", "土曜", "日曜") 'シート名=曜日名 Dim sh As Worksheet Dim cl As Range '-- For Each sh In Worksheets If sh.Index <= 2 Then '個人票について,2人の例なので、タブの左から2番目までが個人表とする MsgBox sh.Name sh.Range("A1:F30").Copy Worksheets("作業表").Range("A1") '個人表を作業表にコピー For Each cl In Worksheets("作業表").Range("B3:H18") If cl.Value <> "" Then 'セルに記入があれば cl = sh.Range("A1") '出勤時間帯を名前に置き換える End If Next '----個人別データをコピーした作業表を妖美元に別表に反映。実労者氏名を左詰でB列以右列に順に詰めて表示 For j = 2 To 5 '本テストでは月曜日から木曜日(実際は日曜日まで To 8 にする) MsgBox sn(j) For i = 3 To 18 '3行目から18行目まで If Worksheets("作業表").Cells(i, j) <> "" Then c = Worksheets(sn(j)).Cells(i, 20).End(xlToLeft).Column 'その時間で記入済みの最右列を探す Worksheets(sn(j)).Cells(i, c + 1) = Worksheets("作業表").Range("A1") '勤務者名をセット End If Next i Next j End If Next End Sub ーーーーーーーー 実行した結果 月曜 6:00 佐藤 7:00 佐藤 8:00 佐藤 山本 9:00 佐藤 山本 10:00 佐藤 山本 11:00 佐藤 山本 12:00 山本 13:00 山本 14:00 15:00 ーーーーー 火曜 6:00 佐藤 7:00 佐藤 8:00 佐藤 9:00 10:00 11:00 山本 12:00 山本 13:00 山本 14:00 15:00 ーーーーー 水曜 6:00 佐藤 7:00 佐藤 8:00 佐藤 山本 9:00 佐藤 山本 10:00 佐藤 山本 11:00 山本 12:00 山本 13:00 14:00 15:00 ーーーーーーーーー 木曜 6:00 7:00 8:00 9:00 10:00 山本 11:00 山本 12:00 佐藤 山本 13:00 佐藤 山本 14:00 佐藤 山本 15:00 佐藤 山本 16:00 佐藤 17:00 佐藤 18:00 19:00 ーーーーーーーーーーー こういう風な表で良いのかな。 名づけるなら「時間帯別勤務社名一覧」といったものになっている。 こんな様子で良いのかな。 質問では集計表とあるが、数(時間?)データを足したいのかな。 個人票のデータセルで、0.5(30分?)という例が見えるが、上記では1と同じになっている。 迷いはあった。 また1週間分になっているが、週次作業で良いのかな。月次作業だとプログラムを 相当変更しないとならない。 実際に使えるようにするにはコードの修正が必要なので 絶望的だが、参考に。
- tom04
- ベストアンサー率49% (2537/5117)
こんにちは! ご希望の関数ではなく、VBAでの方法になってしまいますが・・・ Sheet名に関係なく↓の画像のようなSheet順になっている場合での一例です。 ※ Sheet1~Sheet7までが各曜日のSheetでSheet8から個人用Sheetとしています。 (画像が小さくて見えにくかったらごめんなさい。) Alt+F11キー → 画面左下にある「This Workbook」をダブルクリック → VBE画面が出ますので ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です。) Sub test() 'この行から Dim i, j, k, L As Long Application.ScreenUpdating = False For k = 1 To 7 'Sheet1~Sheet7(月曜~日曜) Range(Worksheets(k).Columns(2), Worksheets(k).Columns(256)).ClearContents Next k For k = 1 To 7 For L = 8 To Worksheets.Count '各個人名Sheet数分 For i = 3 To 18 '3行目~18行目 For j = 2 To 8 '2列目~8列目(月曜~日曜の列) If Worksheets(L).Cells(2, j) = Worksheets(k).Cells(1, 1) Then If Worksheets(L).Cells(i, j) <> "" Then Worksheets(k).Cells(i, Columns.Count).End(xlToLeft).Offset(, 1) _ = Worksheets(L).Cells(1, 1) End If End If Next j Next i Next L Next k Application.ScreenUpdating = True End Sub 'この行まで こんな感じではどうでしょうか? 他に良い方法があればごめんなさいね。m(_ _)m
関連するQ&A
- データを別シートに抽出してリアルタイムで表示させたい
いろいろ調べてみたのですが、どのようにすればいいのかわからなかったので質問させていただきます。 Excel 2003において、下記のシート1のデータをシート2~4に曜日ごとに抽出したいと思っています。 その際、シート1に追加したら自動でシート2~4に反映されるようにもしたいと思っていますが、どのようにしたらよいでしょうか? Excelが詳しくない者が扱うことが多いので、できればマクロは使わず、関数でできたらいいと思っているのですが、最悪マクロを使った方法でも構いませんのでご教授いただければ幸いです。 【シート1】 a b c d e f 1 月 火 水 名前 生年月日 年齢 2 ○ 佐藤 1980/1/1 29 3 ○ 田中 1981/1/1 28 4 ○ ○ 山田 1982/1/1 27 【シート2】(月曜に○のついている人の名前と年齢を表示) a b 1 名前 年齢 2 佐藤 29 3 山田 27 【シート3】(火曜に○のついている人の名前と年齢を表示) a b 1 名前 年齢 2 田中 28 【シート4】(水曜に○のついている人の名前と年齢を表示) a b 1 名前 年齢 2 山田 27
- ベストアンサー
- オフィス系ソフト
- EXCEL VBA 複数シートを1シートまとめる
お世話になります。 面談.xlsというブックがあります。 このブックの中には一番左に[集計]というシートがあり、右隣から[個人別面談 田中],[個人別面談 山本],[個人別面談 高橋],という個人別のシートが複数あります。(可変です) やりたいこと (1)[集計]シートに[集計開始]というボタンを設置してクリック (2)右隣の[個人別面談 田中]シートを読み込む (3)[集計]シートのB1に[個人別面談 田中]のA1を挿入 [集計]シートのB2に[個人別面談 田中]のB1を挿入 [集計]シートのB3に[個人別面談 田中]のC1を挿入 (4)次の[個人別面談 山本]シートを読み込む (5)[集計]シートのC1に[個人別面談 山本]のA1を挿入 [集計]シートのC2に[個人別面談 山本]のB1を挿入 [集計]シートのC3に[個人別面談 山本]のC1を挿入 (6)次の[個人別面談 高橋]シートを読み込む (7)[集計]シートのD1に[個人別面談 高橋]のA1を挿入 [集計]シートのD2に[個人別面談 高橋]のB1を挿入 [集計]シートのD3に[個人別面談 高橋]のC1を挿入 (8)完了! ※[集計開始]ボタンをクリックすると[集計]シートB1~D3の値は毎回クリアする仕様にしたいです 環境 Excel2013 会社でこのような仕組みをVBAで作れと言われましたが当方初心者で困っています。 どなたかお知恵をお借りできませんでしょうか? よろしくお願い致します。
- ベストアンサー
- Excel(エクセル)
- VBAにて、複数シートからデータを抽出
エクセルVBAです。複数のシートからの集計、抽出の書き方について教えてください。 1つのファイルに50ほどのシートがあります。 各シートの列数やフォーマットは、同じですが行数は、異なります。 例 sheet1(シート名:集計):集計用 A B C D 1 ※検索キーワードを入れるセルや 2 マクロを登録するボタン用として2行開けてある。 3 番号 氏名 郵便番号 住所 sheet2(シート名:STU) A B C D 1 番号 氏名 郵便番号 住所 2 1 AB 345 YZ 3 1 CD 678 QS sheet3(シート名:XYZ) A B C D 1 番号 氏名 郵便番号 住所 2 2 AB 345 YZ 3 2 CD 678 QS 4 3 CD 678 QZ 抽出前は、上記の様なファイルとなっております。 上記では、4列としてますが実際は、23列あります。 また、sheet3までですが、実際は、40~100シート位あります。 sheet1(シート名:集計):集計用 A B C D 1 ※検索キーワード:氏名_CD としマクロを実行する 2 (↑例として氏名でフィルタリングしてますが他の指定項目でも実行したい、複数条件は、無) 3 番号 氏名 郵便番号 住所 4 1 CD 678 QS (←sheet2(シート名:STU)の3列目) 5 2 CD 678 QS (←sheet3(シート名:XYZ)の3列目) 6 3 CD 678 QZ (←sheet3(シート名:XYZ)の4列目) ・ ・ CD ・ ・ (←sheet4(シート名:・・・)の・列目) ・ ・ CD ・ ・ (←sheet10(シート名:・・・)の・列目) ・ ・ CD ・ ・ (←sheet27(シート名:・・・)の・列目) ・ ・ CD ・ ・ (←sheet27(シート名:・・・)の・列目) ・ ・ CD ・ ・ (←sheet30(シート名:・・・)の・列目) 上記の様にすべてのシートから氏名:CDでフィルタリングし集計シートに抽出したい。 よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- エクセルで複数のシートからデータを集計したい。
エクセルで複数のシートから、あるデータを取り出し、別のシートに集計したいのですが、関数を入力すると莫大な量になってしまいました。 関数とは別の方法で集計する方法をご教授お願いします。 1日~31日のシートがあります。 シート1日内容は A B C D E 1 NO 原因(1) 原因(2) 原因(3) 2 101 10 15 (b2+c2+d2) 3 105 20 40 (b3+c3+d2) 4 108 20 100 (b4+c4+d4) といった内容です。 1日から31日のセルA2などは固定した数値でありません。 なんで、例えばA3に101が入っている場合があります。 集計シートは A B C D E 1 NO 原因(1) 原因(2) 原因(3) 2 101 (b2+c2+d2) 3 102 (b3+c3+d2) 4 103 (b4+c4+d4) のようになってます。 B2に=SUMIF('1日'!A2:A4,A2,'1日'!b2:b4)+SUMIF('2日'!A2:A4,A2,'2日'!b4:b4)+・・・・・が31日のシート分まで作成するとファイルが重くなりすぎてしまい困っております。 よろしくお願いします。
- ベストアンサー
- Windows XP
- 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つ。2つともあえばそのA列のデータを表示するというものです。 データは シート1(前年) A B C D 1 田中 123 東京都・・ 5 佐藤 124 千葉県・・ 3 山本 128 埼玉県・・ シート2(今年) A B C D 山本 128 埼玉県・・ 佐藤 124 北海道・・ 田中 123 東京都・・ C列とD列を照合し2つともあえばシート2のA列にシート1のA列のデータを入力する。なければ「なし」と入力できるようにしたいのです。 上の場合は山本のA列に「3」佐藤には「なし」田中には「1」と入るのうになればと思います。 入力されている列は同じですが順番はばらばらです。データ数は1万件を超えています。 どなたかアドバイスいただければと思います。よろしくお願いします。
- ベストアンサー
- その他([技術者向] コンピューター)
- エクセル内での、データの複数の抽出は無理でしょうか?
Sheet1 A B C D 1 こ た い あ 2 き ち ろ か 3 け つ は さ 4 く て に た 5 か と ほ な Sheet2 A B C 1 か と ほな 2 き ち ろか 3 く て にた VLOOKUP関数で Sheet2のA1、A2、A3をSheet1から 同列のB、Cも同じように抽出しようとしましたが C列だけSheet1のC列とD列と合わせた表記にしたいのですが これは関数では無理なのでしょうか? 私自身、あまり関数が得意ではないので もしマクロでなければ・・・となると少し不安です。 宜しくお願いします。
- 締切済み
- オフィス系ソフト
- エクセルで別シートに抽出
エクセルで同じ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 のようになるだけ簡単に抽出したいのですが… どなたか、よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- エクセル複数のシートから抽出集計したいのですが・・
Excel2010を使っています。 複数のシートから、同じ名称のセルを抽出して集計する方法はないでしょうか?関数だけでは無理と思い、VBやらマクロやら・・私では無理でしょうか? _______ A B C D E F G1 1 NO 日付 開始時間 終了時間 時間数 備考 営業所 2 1 4/15 10:00 13:00 1.0 所沢営業所 3 2 4/20 12:30 15:00 2.5 多摩営業所 4 3 4/22 11:00 13:00 4.0 西東京営業所 5 4 4/25 13:00 15:00 2.0 所沢営業所 6 5 4/27 9:00 13:00 4.0 横浜営業所 _________________________ _このようなシートが20シート程(増減します)あります。G:営業所の部分がリストで出るようになっていて その営業所ごとの集計をしたいと思います。ほかのシートまたはデータに B~Eのセルが自動的に抽出できるようなやり方はありませんか? よろしくおねがいします。
- ベストアンサー
- オフィス系ソフト
- エクセル(2003・2007)でデータ抽出し、別シートを作成するための
エクセル(2003・2007)でデータ抽出し、別シートを作成するための関数を教えて下さい ●シート名:サンプルA ●シート名:サンプルB A B C D E・・ A B C 名前 日付1 日付2 備考 名前 日付1 備考 1 山田 2010/10/15 2010/10/10 ああ 1 鈴木 2010/10/18 うう 2 佐藤 いい 2 太田 2010/10/21 かか 3 鈴木 2010/10/18 うう → 4 井上 2010/11/20 ええ 5 石田 2010/8/7 2010/10/7 おお 6 太田 2010/10/21 かか 具体的に上記のデータから【B列が本日から10日間以内かつC列がスペース】のデータのA・B・D行を別シートに作成する関数を教えて下さい よろしくお願いします ※なぜか文字がずれてしまってて、すいません・・・
- ベストアンサー
- オフィス系ソフト
お礼
とてもわかりやすい説明、ありがとうございます! 教えていただいた内容で、うまくいきました♪ 画像もつけてくださったので、シートの並びも 自分の作成とは違ったのですが 初心者に近いので…理解しやすかったです。 お心遣いに感謝いたします。 何分〆切が差し迫っていたため、本当に本当に助かりましたm(__)m これを機会に、VBAも学んでいけたらと思っています。