- ベストアンサー
エクセルでデータを1行づつ別の表に3行毎に表示
下のようにもとデータがあり1行ごとのデータを別の表に3行おきに表示したい。 コピーすると3行おきのデータになってしまう。 元 希望 実際 A → A → A B C D → B → D E F G → C → G いちいちコピーしないとだめでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
【No1補足に対する回答】 >INDIRECT("A"&MID(ROW()/3+1,1,1)の意味がよく理解できないためうまく応用できておりません。 >(1)ROW()/3+1これはどういう意味になるのでしょうか。 ROW()で現在の行数を取得し、計算を行います。 1行目:ROW()/3 ・・・ 0.333 _⇒+1して1.333 2行目:ROW()/3 ・・・ 0.666 _⇒+1して1.666 3行目:ROW()/3 ・・・ 1 _⇒+1して2 4行目:ROW()/3 ・・・ 1.333 _⇒+1して2.333 5行目:ROW()/3 ・・・ 1.666 _⇒+1して2.333 6行目:ROW()/3 ・・・ 2 _⇒+1して3 この計算で3行ごとに整数部の値が+1されている状態を作り、MID()でその整数部を取得します >(2)”A”&~のところもよくわかりません。 Excelでは式として「="A" + 1」としてもセル上に文字列として「A1」が表示されるだけになります なのでINDIRECT()でセルを参照するようにしています。 上記の3行ごとに整数部が+1される計算と合わせて使用する事で 1行目:INDIRECT("A" & 1) 2行目:INDIRECT("A" & 1) 3行目:INDIRECT("A" & 2) 4行目:INDIRECT("A" & 2) 5行目:INDIRECT("A" & 2) 6行目:INDIRECT("A" & 3) を参照することができます。 A列にA~順番に値を入れているとすると 1行目:INDIRECT("A" & 1)・・・A1なので:A 2行目:INDIRECT("A" & 1)・・・A1なので:A 3行目:INDIRECT("A" & 2)・・・A2なので:B 4行目:INDIRECT("A" & 2)・・・A2なので:B 5行目:INDIRECT("A" & 2)・・・A2なので:B 6行目:INDIRECT("A" & 3)・・・A3なので:C となります > 後はMOD()で表示する位置を算出するだけです。(「MOD(ROW(),3)=1」の部分) 1行目:1/3・・・余り1 2行目:2/3・・・余り2 3行目:3/3・・・余り0 4行目:4/3・・・余り1 5行目:5/3・・・余り2 6行目:6/3・・・余り0 「余り1」の行のみ表示するようにIFで判定しています
その他の回答 (2)
- kagakusuki
- ベストアンサー率51% (2610/5101)
元データが1行目では無い処から始まっている場合にも使う事が出来る方法です。 例えばコピー元のデータがA列に存在していて、入力されている中で最も上にあるデータ(御質問文の例ですと「A」)が入力されているのがA2セルである場合には、以下の様にされると良いと思います。 まず、複写したデータを表示させるセル範囲の内で、最も上にあるセルに次の関数を入力して下さい。 =IF(MOD(ROWS($A$2:$A2),3)=1,INDEX($A:$A,(ROWS($A$2:$A2)-1)/3+ROW($A$2)),"") 次に、「先程関数を入力したセル」をクリックして下さい。 次に、Shiftキーを押しながら、「『先程関数を入力したセル』の2つ下の所にあるセル」をクリックして下さい。 次に、選択範囲を示す黒い太枠の右下の隅にある黒点にカーソルを合わせて下さい。 すると、カーソルの形が黒い十文字型に変化しますから、その状態の時にマウスの左ボタンを押して下さい。 マウスの左ボタンを押しっ放しにしたまま、カーソルを真下に向かって移動して下さい。 これで、2行おきに関数が複写され、A列の各行のデータが、別の列上に2行ずつの間隔をあけて表示されます。(この関数を全行に亘って複写してもちゃんと2行ごとに表示されます)
お礼
礼が遅くなり申し訳ありません。 大変参考になりました。 先の方にも申し上げましたが、まったく使用したことのない関数のため理解に時間がかかってしまいました。
- itu1989
- ベストアンサー率44% (37/83)
Excelの数式でもいいですか? 質問の内容をA列⇒B列へ行う場合、 (1)A列にA~Gの文字を入力 (2)B1に以下の式をコピーする =IF(MOD(ROW(),3)=1,INDIRECT("A"&MID(ROW()/3+1,1,1)),"") (3)B1の式をドラッグしてコピー(セルの右下の■を引っ張る) (4)式のままがダメならB列を選択⇒コピー⇒右クリック⇒形式を選択して貼り付け⇒値⇒OK 【解説】 MOD()・・・引数1を引数2で割った余り ROW()・・・現在の行数を取得 INDIRECT・・・文字列で指定したセルを参照 MID・・・引数1の文字を引数2の位置から引数3の桁数取得する (1)MODで「行数/3の余り」を求める(1行目・・・1、2行目・・・2、3行目・・・0、4行目・・・1) 今回は余りが1の箇所が値を表示させたい位置なのでMOD(ROW(),3)が1の時INDIRECT()を実行します (2)「ROW()/3+1」で元データの参照位置を計算(1行目・・・0.333、2行目・・・0.666、3行目・・・1、4行目・・・1.333) (3)(2)で取得した値の1桁目(整数部)に+1して位置を調整 (4)A列の指定行の値を取得するためにINDIRECTで"A"と(3)の値を結合して参照 【注意】 ・1行目から開始される事を想定した式になっている事(開始行が変わる場合「ROW()/3+1」の+1を変えて下さい) ・1シート内での処理を想定した式になっている事(シートを跨ぐ際はシート参照を付けて下さい)
補足
理解力がないものですみません。INDIRECT("A"&MID(ROW()/3+1,1,1)の意味がよく理解できないためうまく応用できておりません。 (1)ROW()/3+1これはどういう意味になるのでしょうか。(2)”A”&~のところもよくわかりません。よろしければ補足をお願いいたします。 「この程度が理解できなければ」という内容なら今回の件はあきらめます。 ご検討ください。
お礼
お礼が遅くなりました。 いろいろ詳しくご説明頂きありがとうございました。 ちょっと使い慣れていない関数のため理解が足りませんでした。今後ともよろしくお願いいたします。