- ベストアンサー
エクセルでセルをシートにコピーする方法
- エクセルでシート1のセルをシート2にコピーする方法について教えてください。
- シート1のA列には氏名、学校、住所、電話番号が並んでいます。シート2のA列には氏名だけを入力したいです。具体的な方法を教えてください。
- シート1の『氏名』だけをシート2に抽出する方法について教えてください。4セルずつ下の氏名をコピーしたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
結論から言えば、今使っている方法を流用するならば、 =INDIRECT("Sheet1!A"&(ROW()-1)*7-6+3) で出来ます。 が、関数や式の理解ということで、簡単に説明します。 まずはじめに、最初の形 ROW()*7-6 についてですが、 「ROW()」は、それを書きこんだセルの行数を取ってくる関数です。 つまり、 A1に書きこんだ場合は=1 A2に書きこんだ場合は=2 になります。 「*7-6」は、7行で1セットの、1行目を参照したいからですね。 結果「ROW()*7-6」は、 A1に書きこんだ場合は=1 A2に書きこんだ場合は=8 になります。 ここまでは、捕捉に書かれていることから把握されていると思います。 では、次にSheet1のA1でなく、A4から引っ張ってくるにはどうすればいいでしょう。 ROW()*7-6 の答えが4、11、18...になれば良いわけです。 不格好ですが、わかりやすく、末尾で3を足してしまいましょう。 ROW()*7-6+3 最後に、書きこんだSheet2側のセルがA2からであることを解決します。 ROW()で引く行数が、1から2、2から3になったことが問題なので、これもわかりやすく-1してしまいましょう。 (ROW()-1)*7-6+3 ※掛け算の前に-1するので()で囲ってください これで、名前は引っ張れるようになったと思います。 さて、B列に学校名、C列に住所...と、全部の項目を引っ張りたいのですよね。 現状、「*7-6」の箇所を、 2行目の学校名であれば「*7-5」にしてみてください。 7行1セットの、2番目をひっぱりたい(「(ROW()-1)*7-6」の答えが2になるようにしたい)ので、-6から-5にしました。 3行目の住所であれば「*7-4」にしてください。 こうやって、項目7まで作ります。 あとは、セット数分、下にコピーするだけです。 --------------------------------- しかし、なんというか、しちめんどくさい方法ではあると思います。 今後もSheet1にデータが追加されていくのか、ただ一度並べ替えてしまいたいだけなのかどうかなどによって、他に手っ取り早い方法があるようにも思います。 この作業が一回で済む(一旦並べ替えたあとは、Sheet2の形でデータを追加していく)のであれば、もっと楽で簡単な方法はあるでしょう。 質問の際は、その辺りの情報も併記すると良いと思います。
その他の回答 (1)
- Cupper-2
- ベストアンサー率29% (1342/4565)
山田太郎 学校 住所 電話番号 と並んでいるなら 1行目 5行目 9行目 13行目 のセルをコピーするような関数式を書けばOK。 セルの行数を得る関数はROW関数です。 ROW関数に引数を入れなければ、その関数式が使われているセルの行番号が返ってきます。 それを使い算数的にコピーする行番号を作ればよい。 Sheet2のA1セルに次の関数式を入れて、下のセルへコピーしてみてください。 =ROW()*4-3 コピーしたい行番号が表示されると思います。 で、コピーの指定の仕方。 ここからはいろいろな方法があります。 OFFSET関数を使ったりINDIRECT関数を使ったりINDEX関数を使ったり 多種多様です。 一例としてINDIRECT関数を示してみます。 =INDIRECT(”Sheet1!A”&ROW()*4-3) これをSheet2のA1セルに書き込んで、下のセルへコピーすればOK。 関数式の意味を理解でいないのでしたら、他の人の回答をまねてみましょう。 (理解できないということは解決ではありませんからね)
お礼
Cupper-2さん 早速のご回答ありがとうございます! ご教示いただいた通りに、数式を入力してみたところ、出来ました!!!! 実際は、ご指摘いただいているように、 「関数式の意味を理解できていない」 のが実状ではあります。 ですので、実際のところ、解決には至っていないのかもしれません。 実際のエクセルの表は、 1行目 8行目 15行目 22行目 29行目 ・ ・ ・ のように、7行目ずつをコピーしたいと思っておりました。 そこで、ご教示いただいたように、 シート2のA1のセルに =INDIRECT("Sheet1!A"&ROW()*7-6) と書き込み、下のセルへコピーしました。 と、見事に、希望通りにシート2に表示されました!!! とても助かりました。色々と試行錯誤してみても出来ず、 そして、これまでの類似質問を検索しても、 該当するものがなく、悩んでおりましたので、 おかげ様で、とってもスッキリしました! 本当にありがとうございますm(__)m 心からの感謝の気持ちを込めて、 お礼の返信とさせていただきます。 ありがとうございました! 今後、関数式を理解できるよう勉強していきたいと思います! 取り急ぎの御礼まで。
補足
Cupper-2さん 恐れ入りますが、 再度、お聞きしてもよろしいでしょうか。 実際のリストは、 シート1は、A4セルに該当値が入っており、 シート2は、A2セルにコピーし、 以降は、7セルごとにコピーしたいと考えています。 昨夜は、A1セル同士で行った場合、希望通りに表示されたのですが、 今回は、 =INDIRECT(”Sheet1!A”&ROW()*8-7) と、入力しましたが、 #REF と、出てしまいます。 ちなみに、 シート1 → シート2 A4. → A2 A5. → B2 A6. → D2 とし、以降は、 A12 → A4 A13 → B4 A14. → D4 としていきたいのです。 計算式を理解できておらず、 たいへん恐縮ですが、 再度、お手すきの際に、ご教示いただけますとたいへんありがたい思いです。 どうかよろしくお願いいたします。
お礼
mp20palpunteさん 早々にご回答くださいまして、心から感謝いたしております! >結論から言えば、今使っている方法を流用するならば、 >=INDIRECT("Sheet1!A"&(ROW()-1)*7-6+3) >で出来ます。 なるほどなるほど! >関数や式の理解ということで、簡単に説明します。 とてもわかりやすく解説してくださいまして、 本当に助かります!!! 本件は、仕事先でのデータのため、 今、手元にございません。 恐れ入りますが、明日、仕事先にて、 早速ぜひとも試行させていただきたいと考えております! その結果は、また別途ご報告させていただきますが、 今から、ワクワクしております~(^^)♪ >しかし、なんというか、しちめんどくさい方法ではあると思います。 >今後もSheet1にデータが追加されていくのか、ただ一度並べ替えてしまいたいだけなのかどうかなどに>よって、他に手っ取り早い方法があるようにも思います。 >この作業が一回で済む(一旦並べ替えたあとは、Sheet2の形でデータを追加していく)のであれば、も >っと楽で簡単な方法はあるでしょう。 >質問の際は、その辺りの情報も併記すると良いと思います。 承知いたしました。情報不足で恐れ入ります。 以下、補足いたします。 今回は、シート1には、600名ほどの情報があり、 (実際は、学校氏名住所などのデータではないのですが、、、) その情報の一部をシート2へ反映させたい、というのが第一でした。 その際、シート1とは別のセルへ反映させるため、悩んでおりました。 併せて、この600名ほどの情報は、今後も3ヶ月ごとくらいの周期で更新していくため、 シート1だけの更新で、今後済むような形が、一番ベストと考えておりました。 まずは、教えていただいた数式を入れてやってみます! ありがとうございます! 心からの感謝の気持ちを込めて、 お礼の返信とさせていただきます。 取り急ぎの御礼まで。