VBAを使わずに複数シートの列データを縦に並べたい

このQ&Aのポイント
  • Excel 2016/Windows10で、複数のシートに分かれた列データを1つのシートに縦に並べる方法を知りたいです。
  • 現在、4つのシートには異なるフォーマットの表があります。各表にはWebサイトのURLリストが含まれており、集計用の1つのシートにまとめたいと考えています。
  • OFFSET、ROW、MATCH関数などを使用して挑戦していますが、関数の整理がうまくいかず、セル位置の指定と入れ子の式が複雑でうまくいきません。VBAを使用せずに、関数だけで解決したいと考えています。
回答を見る
  • ベストアンサー

VBAを使わずに複数シートの列データを縦に並べたい

フォーマットの異なる表が4種類あり、集計用シートと合わせて5シートを1つのブックにまとめています。各表はカテゴリーが異なるWebサイトのURLリストの列を持っていて、そのURLを集計用シートにまとめたい(縦に並べたい)のですが、Web検索で調べながらOFFSET、ROW、MATCH関数などで挑戦するも、関数の整理がつかず、セル位置の指定と入れ子の式が複雑でうまくいきません。 シート1のURL列の2行目(タイトル行があるので)から最終行までを参照した後、シート2の頭から順番に最終行まで参照し、それをシート4まで繰り返し行うというものです。 VBAは使わずに関数だけで完結させたいです。 どうかご教示ください。 よろしくお願いいたします。 ◆環境:Excel 2016/Windows10 ◆ブックの構成(添付画像ご参照)  ・シート1:参照元シート(1)  ・シート2:参照元シート(2)  ・シート3:参照元シート(3)  ・シート4:参照元シート(4)  ・シート5:参照先集計シート  ※シート1~4はフォーマット及び行数がバラバラの表。  ※各表にはWebサイトのURL一覧の列がそれぞれ含まれている。  ※各表のURL列の1行目のタイトルは「URL」で共通。(列番号はバラバラ) ◆やりたいこと  ・シート1~4のURLの列をまるごとシート5に縦に並べてまとめて参照したい。  ・マクロではなく関数で完結させたい。  ・シート1~4をそれぞれ更新(新データをペースト)すれば、シート5も最新に更新される運用としたい。

  • mt64
  • お礼率80% (4/5)

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

  • ベストアンサー
  • SI299792
  • ベストアンサー率48% (712/1469)
回答No.3

関数が若干短くなりました。シートをまたぐ計算を利用しました。カウントはどこでやっても同じなので、全てA列にしました。 必要なら、A2に=HYPERLINKを付けて下さい。 A2 =○1!H2&IF(ROW()>COUNTA(○1!A:A),OFFSET(○2!A2,1-COUNTA(○1!A:A),0),"")&IF(ROW()>COUNTA(○1:○2!A:A)-1,OFFSET(○3!A2,2-COUNTA(○1:○2!A:A),0),"")&IF(ROW()>COUNTA(○1:○3!A:A)-2,OFFSET(○4!I2,3-COUNTA(○1:○3!A:A),0),"") B2 =○1!G2&IF(ROW()>COUNTA(○1!A:A),OFFSET(○2!B2,1-COUNTA(○1!A:A),0),"")&IF(ROW()>COUNTA(○1:○2!A:A)-1,OFFSET(○3!B2,2-COUNTA(○1:○2!A:A),0),"")&IF(ROW()>COUNTA(○1:○3!A:A)-2,OFFSET(○4!H2,3-COUNTA(○1:○3!A:A),0),"") 位置が変わるだけだから、 ○1!H2→○1!G2 ○2!A2→○2!B2 ○3!A2→○3!C2 ○4!I2→○4!H2 に置き換えるだけです。 この内、COUNTAはどこでも一緒です。これを別セルに置けばさらに簡単になります。 D1 =COUNTA(○1!A:A) E1 =COUNTA(○1:○2!A:A) F1 =COUNTA(○1:○3!A:A) A2 =○1!H2&IF(ROW()>$D$1,OFFSET(○2!A2,1-$D$1,0),"")&IF(ROW()>$E$1-1,OFFSET(○3!A2,2-$E$1,0),"")&IF(ROW()>$F$1-2,OFFSET(○4!I2,3-$F$1,0),"") B2 =○1!G2&IF(ROW()>$D$1,OFFSET(○2!B2,1-$D$1,0),"")&IF(ROW()>$E$1-1,OFFSET(○3!B2,2-$E$1,0),"")&IF(ROW()>$F$1-2,OFFSET(○4!H2,3-$F$1,0),"") >関数ごとに分解して勉強してみようと思います。 と書いてあったので、関数を分解しました。入力すれば動きか判ると思います。 D1~F1も入れて下さい。 C2 =ROW() D2 =OFFSET(○2!A2,1-$D$1,0) E2 =OFFSET(○3!A2,2-$E$1,0) F2 =OFFSET(○4!I2,3-$F$1,0) G2 =○1!H2&IF(C2>$D$1,D2,"")&IF(C2>$E$1-1,E2,"")&IF(C2>$F$1-2,F2,"") H2 =OFFSET(○2!B2,1-$D$1,0) I2 =OFFSET(○3!B2,2-$E$1,0) J2 =OFFSET(○4!H2,3-$F$1,0) K2 =○1!G2&IF(C2>$D$1,H2,"")&IF(C2>$E$1-1,I2,"")&IF(C2>$F$1-2,J2,"") 私はこのようにバラバラに作り、最後に結合しています。手間ですが、私はこうしないと作れません。(多分こういう作り方は、私でだけだと思います) 結合するのは人に出す為で、自分用ならバラバラのままにします。その方がメンテナンスがしやすいので。 前の式は、シート名の()と数式の()がごちゃごちゃになり、入力が大変だったと思います。そのままコピペすればエラーになるし。 (1) だと判りにくいので、○1 にしました。

mt64
質問者

お礼

SI299792さん おはようございます。 改善バージョンの計算式を作ってくださりありがとうございます! A列、B列ともにバッチリ反映ができました。 また、計算式の分解についても大変参考になります。 解りやすい説明をありがとうございます。 この度は早々にご回答をいただき本当に助かりました。 重ねて御礼申し上げます。

その他の回答 (4)

  • Chiquilin
  • ベストアンサー率30% (94/305)
回答No.5

数式でやるのは処理が複雑になるだけで 何のメリットもあり ません。 Excel2016なら PowerQueryを使えるのですから 指定列のデー タを繋いで吐き出すくらい クエリを作ればあっという間です。 今後 シート1~4が変化しても更新するだけでよくなります。 数式もマクロもいりません。

mt64
質問者

お礼

アドバイスいただきありがとうございます。

  • SI299792
  • ベストアンサー率48% (712/1469)
回答No.4

※行ズレなどを防ぐため、必ずA列のURLを検索値としてタイトル情報を参照したいです。 見落としていました。でも、どのような状況を想定していますか。 INDEX とMATCH を使った所で、行ずれすれば、違う値が返ってきます。同じではないですか。 何の為にそうするのか解りません。

mt64
質問者

お礼

そうですね。 式が複雑なので、URLを参照しておけば不具合が起きても原因を特定しやすいかなと思ったのですが、そもそも式がズレてしまえば同じですよね。

  • SI299792
  • ベストアンサー率48% (712/1469)
回答No.2

すみません。ここは○付の文字が()に変換されるのですね。 ○1は表現できません・ (1) は○1だと思ってください。 画像で出します。コピペできませんが。

mt64
質問者

お礼

SI299792さん すごいです。あっという間に解決しました。ありがとうございます!  #こちらでのマナーがよく分かっておらず、とりいそぎお礼申し上げます。  #もう一つアドバイスいただきたい件を追記しております。よろしくお願いいたします。

mt64
質問者

補足

SI299792さん すごいです。あっという間に解決しました。ありがとうございます! レベルが低くお恥ずかしいですが、いただいた計算式を理解できるよう関数ごとに分解して勉強してみようと思います。 実はこの続きをチャレンジ中で、誠に恐縮ですが、 もうひとつアドバイスをいただいてもよろしいでしょうか? シート5のB列にページタイトルも参照表示させたいのですが、(SI299792さんのご教示により表示できた)A列のURLを検索値として、シート1~4からタイトル情報を引っ張ってきたいのです。 ページタイトル情報の取得にあたり、URLを検索値とする場合、URLよりも左側に タイトルがあるフォーマットも混在するため、VLOOKUPではなくINDEXとMATCH関数 の組み合わせ、もしくはMATCHとOFFSETの組み合わせがベターらしい。。ということは 調べたのですが、計算式がトンチンカンなことになってしまい立ち往生中です。 何卒よろしくお願いいたします。 (懸案事項) ※シート1~4は普段はそれぞれ個別のリストとして運用されており、本集計シートでは、  メンテナンス性向上のため、できれば各々のフォーマットのままコピー&ペーストして  利用できる形にしておきたいという理由があります。 ※行ズレなどを防ぐため、必ずA列のURLを検索値としてタイトル情報を参照したいです。  (B列に対して、教えていただいたURL取得の計算式を応用したくない)

  • SI299792
  • ベストアンサー率48% (712/1469)
回答No.1

シート名は(1)~(4)ですか。 集計シート!A2 に 表示だけでいいなら =(1)!H2&IF(ROW()>COUNTA((1)!H:H),OFFSET((2)!A2,1-COUNTA((1)!H:H),0),"")&IF(ROW()>COUNTA((1)!H:H,(2)!A:A)-1,OFFSET((3)!A2,2-COUNTA((1)!H:H,(2)!A:A),0),"")&IF(ROW()>COUNTA((1)!H:H,(2)!A:A,(3)!A:A)-2,OFFSET((4)!I2,3-COUNTA((1)!H:H,(2)!A:A,(3)!A:A),0),"" ハイパーリンクを付けたいなら =HYPERLINK((1)!H2&IF(ROW()>COUNTA((1)!H:H),OFFSET((2)!A2,1-COUNTA((1)!H:H),0),"")&IF(ROW()>COUNTA((1)!H:H,(2)!A:A)-1,OFFSET((3)!A2,2-COUNTA((1)!H:H,(2)!A:A),0),"")&IF(ROW()>COUNTA((1)!H:H,(2)!A:A,(3)!A:A)-2,OFFSET((4)!I2,3-COUNTA((1)!H:H,(2)!A:A,(3)!A:A),0),""))

関連するQ&A

  • 複数シートから一覧を作成VBAについて

    VBA超初心者です。 仕事でアンケート集計をしているのですが、効率よくするために質問させてください。 1つのブックに50程のシートがあり、1行目には1~30の設問Noがあり、2行目以降に回答(1~5の数字)が縦に並んでいます。 回答者数は最大で150名です。 アンケート集計として、152行目に回答が”1”の個数、153行目に”2”の個数といった感じで、156行目まで回答1~5の個数が並んでいます。 その次の157行目に平均値が入力されています。 集計用のシートを作成し、そのシートの2行目以降に、各シートの平均値(157行目)を縦に一覧として並べたいのですが、各シートをコピペしていくのは大変なので、VBAで何とかできないかと、いろいろなサイトを参考にやっているのですが、なかなかうまくできず、困っています。 どなたかご教授願えませんでしょうか。 よろしくお願いいたします。

  • excel 複数ブック・シートからのデータ抽出

    下記画像の日報を集計したいのですが、ご教授お願いします。 『1月~12月』というブックの中に、『1日~31日』というシートを作成し日報管理を行っています。 すでに『1月~12月』というブックは作成されているので、そちらはいじらずに、その内容を「作業内容集計」という一つのブックに集計したいと思っております。 単価の列に金額が入っていた場合に、行全体を抽出し、一年分を一つのシートにまとめたいのですが可能でしょうか? おそらくマクロでないと無理だと思うのですが、関数でも、こんな方法があると教えていただける方がおられればうれしく思います。 excelは2003~2010という混在の環境ですが、とりあえずexcel2010で集計できれば良いと考えています。 よろしくお願いいたします。

  • エクセル:文字列間の行を抽出

    エクセルファイルで1つのシートに複数の表がひたすら縦に並んでいます。それぞれの表が別々のシートに記載されるようにしたいと思っています。 どの表も基本的な書式は同じなので列数は同じなのですが、行数は表ごとに異なります。 また各表の右下(C列)にTotalという文字列が必ずあります。 文字列Totalがある行の直下の行から次のTotalのある行まで抽出して、シートを作成できれば良いのだと思うのですが、どうすれば可能になるのか分かりません。 どなたか教えていただけ無いでしょうか。

  • 【VBA】複数シートから抜き出したデータを集約

    【Excel2010】の  ●同一ブック内で、  ●sheet1~9の同一列から、  ●sheet10の任意列へ、  ●データを抜き出して、続けて表示させたい と思っています。 手動オートフィルタや、関数で試しましたが、 作業のたびにかなりの手間になります。 願わくばVBAマクロで対応できればと思っているのですが、 知識不足のため、うまくできませんでした。 具体的な画面も添付させていただきます。 ご教示いただきたく、よろしくお願いいたします。 <補足> sheet1~9のデータ行範囲は作業ごと・シートごとに変わります。 (データ列は固定です)

  • 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)ひとつのブックにシートが十枚ある (2)列a2~h2 行2~29までデータがある。 (3)列a番号(a2が1、a29が28)  列b空欄  列c日本語  列d外国語 この構造を倍にしているのでa~hにデータが並んでいる。 これを、 つまり、8×28のデータが各シートにあるわけですが 【ひとつ】 できればシート1のデータの下 29行目からシート2のデータ、58行目からシート3… というように並べたい。 【ふたつ】 更にできるならa~dの下にe~hを持ってきて 4×56の並びにして 57行目からシート2のデータ…というように並べたい。 データの並びは列a列eの番号順を保持できたらうれしいです。 どうぞよろしくお願い致します。

  • excel vba 複数シートをまとめる

    お世話になります。 A.xlsというブックがあります。 その中に[集計]というシートがあります。 このシートに[ボタン]を配置してクリックしたら以下の動作を実現させたいのです。 (1)[集計]シートのA2に位置セット (2)[東京]、[大阪],[名古屋]という名称のシートの列=A2~A62、行=A2~データ最下行にある全データを[集計]シートにどんどんコピー貼り付けして追加していきたいのです。 上記動作を実現するVBAのロジックをどなたかご教授いただけますでしょうか。 よろしくお願い致します。

  • 別のシートの文字列をセットしたいのですが..

    エクセルで複数の人のスケジュールを1ヶ月分(1日を1行目、以降2行目3...)と入力して、別のシート又はブックに個人単位に1行づつ(Aさんは1行目、Bさんは、2行目...と)自動的にセットしようとしています。 集計の表は1つにしたいのですが、そうすると個人の表を参照するとき1日は1行目、2日は2行目と参照する行が日にちによって変動してしまいます。 参照するセルの位置を変数管理する方法ってあるのですか

  • Excel 複数あるシートのデータを1枚にまとめる

    何度かこちらで質問をさせていただいてます。 同じような質問を繰り返してしまい、申し訳ございませんがどうかお助け願いたいです。 複数あるシートを、1シートにまとめ、且つ見やすくしろと上司に言われました。 同一ブック内に70シートあります。 いずれも列Aは空白のままで、列Bからデータが入力されています。 列Bにシステム名・そのシステムのバージョン・名前・その人の個人IDが、 列Cには人数が書かれています。 (画像参照) ▲▲▲ 2.0.1 山田 ABCDE 佐藤 ACEDF 2.1.1 永田 DEFCD ・ ・ ・ ●●● 1.0.1 渋谷 UUIOP 1.0.2 ・ ・ ・ という感じです。 こんなデータが約70のシートにそれぞれあります。 どのように1枚にまとめたいかといいますと、 1行目に名前・ID・機材名とバージョンずらずらずら 2行目から個人名・その人のID・1行目に書いている機材を使用しているか(使用していたら○をつけたい) という感じです。 Excel初心者で、キャパ越えで困っています。 縦列につらつらつら~っと書かれているせいで、どうこれを行に移して名前とIDと機材名を関連つけるか悩んでいます。 どうか力を貸してください・・・ 宜しくお願いいたします。 (なお、画像に使ったデータは参照用ですので、元データではありませんが、元データはこのような形です。)

  • Excel 微妙に違う2つのシートのデータをリンクさせる

    ある程度 同じデータのブック1とブック2があり、 ブック1は祭日などデータが無い日も日付があり、行が確保されていますが、 ブック2は祭日などデータが無い日は行が抜いてあります。 A列:日付、B列:曜日 C列:データ1、D列:リンクを入れる 04.11.22 月 56  =[ブック2.xls]シート1!H2 04.11.23 火  04.11.24 水 50  =[ブック2.xls]シート1!H3 04.11.25 木 52  =[ブック2.xls]シート1!H4 04.11.26 金 49  =[ブック2.xls]シート1!H5 04.11.29 月      04.11.30 火 A~C列はブック1、2とも同じデータです。(現在ブック1は1400行、ブック2は1300行くらい) D列にブック2のH列のデータを表記したいのですが、ドラッグなどでは行がずれてしまいます。 関数かマクロなど、何か良い方法を教えて下さい。 下記のことにも対応できれば更に便利なのですが・・。 ブック2のH列は時々J列とか他の列(表範囲内)に移動します。 そしてたまにはブック2のシート1もブック1に移動したりブック2に戻したりもします。

専門家に質問してみよう