【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード

エクセルのシート別のコピーについて教えていただけますでしょうか。

シート1のA列には、下記の通り、氏名、学校、住所、電話番号の順番に、並んでいるとします。

<シート1>
A1 山田太郎
A2 学校
A3 住所
A4 電話番号
A5 山田花子
A6 学校
A7 住所
A8 電話番号
A9 山田みどり
A10 学校
A11 住所
A12 電話番号


その情報をシート2の
A列に、氏名だけを下記の通り、入力していきたいのです。

<シート2>
A1 山田太郎
A2 山田花子
A3 山田みどり

シート別のコピーは、

例えば、シート2のA1に「=Sheet1!A1」

と入力すれば、「山田太郎」と出てくることは知っています。
ですが、シート1の『氏名』だけをシート2に抽出していきたい場合、
どのようにすればよろしいのでしょうか?

『4セルずつ下』の『氏名』をシート1からシート2へコピーしたいです。

どなたか方法を教えていただけますと、とてもありがたく助かる思いです。
どうぞよろしくお願いいたします!

A 回答 (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の形でデータを追加していく)のであれば、もっと楽で簡単な方法はあるでしょう。
質問の際は、その辺りの情報も併記すると良いと思います。
    • good
    • 0
この回答へのお礼

mp20palpunteさん

早々にご回答くださいまして、心から感謝いたしております!


>結論から言えば、今使っている方法を流用するならば、
>=INDIRECT("Sheet1!A"&(ROW()-1)*7-6+3)
>で出来ます。

なるほどなるほど!


>関数や式の理解ということで、簡単に説明します。

とてもわかりやすく解説してくださいまして、
本当に助かります!!!

本件は、仕事先でのデータのため、
今、手元にございません。

恐れ入りますが、明日、仕事先にて、
早速ぜひとも試行させていただきたいと考えております!

その結果は、また別途ご報告させていただきますが、
今から、ワクワクしております~(^^)♪


>しかし、なんというか、しちめんどくさい方法ではあると思います。
>今後もSheet1にデータが追加されていくのか、ただ一度並べ替えてしまいたいだけなのかどうかなどに>よって、他に手っ取り早い方法があるようにも思います。

>この作業が一回で済む(一旦並べ替えたあとは、Sheet2の形でデータを追加していく)のであれば、も
>っと楽で簡単な方法はあるでしょう。
>質問の際は、その辺りの情報も併記すると良いと思います。

承知いたしました。情報不足で恐れ入ります。
以下、補足いたします。

今回は、シート1には、600名ほどの情報があり、
(実際は、学校氏名住所などのデータではないのですが、、、)

その情報の一部をシート2へ反映させたい、というのが第一でした。
その際、シート1とは別のセルへ反映させるため、悩んでおりました。

併せて、この600名ほどの情報は、今後も3ヶ月ごとくらいの周期で更新していくため、
シート1だけの更新で、今後済むような形が、一番ベストと考えておりました。

まずは、教えていただいた数式を入れてやってみます!
ありがとうございます!

心からの感謝の気持ちを込めて、
お礼の返信とさせていただきます。

取り急ぎの御礼まで。

お礼日時:2014/05/15 00:24

 山田太郎


 学校
 住所
 電話番号
と並んでいるなら
 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は、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

としていきたいのです。

計算式を理解できておらず、
たいへん恐縮ですが、
再度、お手すきの際に、ご教示いただけますとたいへんありがたい思いです。

どうかよろしくお願いいたします。

補足日時:2014/05/12 12:11
    • good
    • 0
この回答へのお礼

Cupper-2さん

早速のご回答ありがとうございます!
ご教示いただいた通りに、数式を入力してみたところ、出来ました!!!!

実際は、ご指摘いただいているように、

「関数式の意味を理解できていない」

のが実状ではあります。
ですので、実際のところ、解決には至っていないのかもしれません。

実際のエクセルの表は、

1行目
8行目
15行目
22行目
29行目
 ・
 ・
 ・

のように、7行目ずつをコピーしたいと思っておりました。

そこで、ご教示いただいたように、
シート2のA1のセルに

=INDIRECT("Sheet1!A"&ROW()*7-6)

と書き込み、下のセルへコピーしました。

と、見事に、希望通りにシート2に表示されました!!!


とても助かりました。色々と試行錯誤してみても出来ず、
そして、これまでの類似質問を検索しても、
該当するものがなく、悩んでおりましたので、
おかげ様で、とってもスッキリしました!
本当にありがとうございますm(__)m

心からの感謝の気持ちを込めて、
お礼の返信とさせていただきます。

ありがとうございました!
今後、関数式を理解できるよう勉強していきたいと思います!

取り急ぎの御礼まで。

お礼日時:2014/05/11 23:05

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