プロが教える店舗&オフィスのセキュリティ対策術

シート1とシート2に同じ形式で別データのリストがあります。A列~B列が日付、C列~G列が製品名などの項目、H列が金額で、それぞれのシートに1000行くらいのデータが入っています。
ここでシート3に、シート1と2を統合したリストを作りたいと考えています。シート1と2には重複する項目はありません。マクロを使えない環境なので関数で表現できればと考えています。よろしくお願いします。

質問者からの補足コメント

  • うーん・・・

    説明が足りませんでした。
    シート1と2はそれぞれ新規データがどんどん追加されていきます。シート3はそれに伴って自動的にアップデートされるようにしたいと考えています。
    引き続きご回答よろしくお願いいたします。

      補足日時:2020/04/28 07:06
  • シート自体は単純なもので、シート1と2は1000行程度のリストです。今後データは増えていきます。シート3は実は作業用シートで、関数で表現する際に日付でソートしてもしなくてもその後の計算に特に問題ないのですが、もし日付でソートする場合としない場合の関数での表現を両方ご教示いただけますと今後の勉強になりますので非常に助かります。どうぞよろしくお願いいたします。

    A     B     C    D    E    F     G    H    
    日付1   日付2   製品名  形状  色    形式   生産地  値段
    31/12/20 30/11/20 KL-20   Oval  Red   Jpd   NZ    $50

      補足日時:2020/04/28 07:20
  • うれしい

    >すでにNo1に回答しておいたつもりですが、意味が伝わらないってことでしょうか?
    >それとも、コピペじゃないとダメってことなのかな…

    お忙しいなか、申し訳ないですね!回答が面倒ならお答えいただかなくてもいいんですよ(^_^)b

    藤井さんの案とは別のアプローチで自力で素案はできたので、なんか面白いアイデアはないか、いろいろと試行錯誤してみますね!お大事に!

    No.4の回答に寄せられた補足コメントです。 補足日時:2020/04/28 14:21

A 回答 (5件)

こんにちは!



横からお邪魔します。
VBAなら一発で出来そうですが、関数での方法をご希望だというコトなので・・・
一例です。
Sheet1・Sheet2とも1行目は項目行でデータは2行目以降にあるとします。
Sheet3の2行目以降に表示するとして、

Sheet3のA2セルに
=IF(COUNTA(Sheet1!$A:$A,Sheet2!$A:$A)-2<ROW(A1),"",IF(COUNTA(Sheet1!$A:$A)-1>=ROW(A1),Sheet1!A2,INDIRECT("Sheet2!"&ADDRESS(ROW()-(COUNTA(Sheet1!$A:$A)-1),COLUMN()))))

としてフィルハンドルで列・行方向にコピーしますが、

>それぞれのシートに1000行くらいのデータが入っています。
となると2000行以上フィル&コピーするのも大変でしょうから、仮に3000行フィル&コピーする方法として

最終列のとなりのI2セルに 1 と入力 → I2セルを選択しメニューの右側にある下向き矢印(フィルのアイコン)をクリック
→ 連続データの作成 → 「列」を選択 → 停止値の欄に「3000」と入力しOK!
これで3000までの連番がI列に表示されますので
A2~H2セルを選択 → H2セルのフィルハンドルでダブルクリック!
これで連番の最終行までフィル&コピーができましたので、最後にI列を削除!

こんな感じで簡単に数千行のフィル&コピーができます。m(_ _)m
    • good
    • 1
この回答へのお礼

ありがとう

確かにVBAなら簡単そうなんですが、Libraoffice CalcとExcelの両方の環境で使うのでVBAが双方でうまく動くか心配で、関数で作ってみようと思いました。パズルみたいで楽しいですし、他の人のアイデアが面白かったりしますしね。フィルアンドコピーのやり方も含めて、丁寧に説明してくださってありがとうございました。自分で作った関数はうまく出力されるのですが、無駄に長くてスマートじゃありませんでした(ここに貼ってしまうと手厳しい方々にぶちのめされてしまうかと思いますので自粛しました)。Tom04さんのご回答も参考にさせていただきながら、もう少し遊んでみたいと思います。

お礼日時:2020/04/28 18:14

No1です



>新規データがどんどん追加されていきます。
>引き続きご回答よろしくお願いいたします。
すでにNo1に回答しておいたつもりですが、意味が伝わらないってことでしょうか?
それとも、コピペじゃないとダメってことなのかな…

不明な情報は適当に埋めているので、コピペではどうなるかはわかりませんが、環境に合わせて修正すれば動作するはずです。
また、もしもデータに抜け(空白セル)が無いような形式なら、もっと簡単な式にできることでしょう。

シート3のA1セルに以下をコピペして、更に、必要範囲にフィルコピー。

=IF(ROW()>COUNTA(Sheet1!$A:$A),IF(OFFSET(Sheet2!A1,-COUNTA(Sheet1!$A:$A),0)="","",OFFSET(Sheet2!A1,-COUNTA(Sheet1!$A:$A),0)),IF(Sheet1!A1="","",Sheet1!A1)
この回答への補足あり
    • good
    • 0

自分もシート1とシート2のセルをコピーしてシート3に貼り付けたのちに並べ替えをすることを勧めます。



そのほうが絶対に確実。
しかも早い。
    • good
    • 0

コピペしてソート

    • good
    • 0

こんにちは



単に統合して並べれば良いだけなら、シート1を先にコピーすると仮定して、シート3のA1セルに
 =Sheet1!A1
の式を入れて、右方、下方にフィルコピー
続いて、そ
シート3のn(シート1の行数+1)行目のA列のセルに
 =Sheet2!A1
の式を入れて、右、下方にフィルコピーすればよいです。

シート1の行数が可変の場合は、どこかに空白の無いことが保証されている列があれば、その列の使用行数をCOUNT関数等で求め、その数以下ならシート1、それを超えたらシート2を参照するようにすれば宜しいでしょう。
具体的な数式は、情報が不足しているので示すことはできません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!