アプリ版:「スタンプのみでお礼する」機能のリリースについて

1行の複数のセルを、途中から分割し2行にして表を作りたいのです。
表は別シートでなくても構いません。
例えば、
横セル内容
 P  Q  R  S
1 あ ア  10 100
2 い イ 20 200
:     と続く表を
別シートへ
 P Q
1 あ ア
2 10 100
3 い イ
4 20 200
5 う ウ
6 30 300
 :
と移動したいのです。
領域を選んでコピーすると、

1 P1
2 Q1
3 P3 ← がP2 にならないのです
4 Q3←  Q2 にならないのです。

VBじゃないとできませんか。
教えてください。

A 回答 (6件)

既に、複数の回答者さんが解説しておられますが、この課題を解決する方法としては


(1)INDEX関数を用いる
(2)INDIRECT関数を用いる
(3)OFFSET関数を用いる
という3種類が代表的な関数になると思います。
ここでは、INDEX関数を用いた方法をお示しします。添付画像をご覧ください。画像①のようなデータがsheet1のP列からS列にあったとして、これを画像②のようにsheet2のP列、Q列に並び替えるとすると、sheet2のP1セルに

=INDEX(Sheet1!$P:$S,ROW(A2)/2,ISEVEN(ROW(A1))*2+COLUMN(A1))

という数式を記述して右方向Q1にコピーし、P1:Q1を下方向へsheet1の最終行が表示されるまで、コピーすればよいことになります。

但し、この数式はsheet2の表示範囲外にコビーしたときのエラーチェック等は一切行っていませんので、ご承知おきください。
「excel 1行の横セル内容を表を 2行」の回答画像6
    • good
    • 0

添付図参照(Excel 2019)


Sheet2!P1:↓
=OFFSET(Sheet1!$P$1,(ROW(A1)-1)/2,MOD(COLUMN(A1)-1,4)+MOD((ROW(A1)-1)*2,4))
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄↓↓↓↓↓↓↓↓↓↓↓↓↓
「excel 1行の横セル内容を表を 2行」の回答画像5
    • good
    • 1
この回答へのお礼

ありがとうございました。図までご親切につけていただき、とてもよくわかりました。皆さんから教えて頂いた関数を自分でも使ってみて、どれも結果が同じになり、EXCELの奥の深いことを知りました。とても参考になり、今回の急いで求めた質問もおかげ様で無事に解決できました。ありがとうございました。■

お礼日時:2023/06/25 23:37

>確かにできましたが、少し不具合があるようにみえます。



 どのような不具合なのでしょうか?それを述べて頂かないまま

>ご教示いただけると助かります。

と仰られても、何が不都合なのか不明ですので教示のしようが御座いません。

>再度質問いたしましたので

との事ですが、その新たな質問の方にも、どのような不具合だったのか記されておりません。
 ひょっとして元データーの表の中で、コピーすべきデーターが入力されているセル範囲の中の左上の隅のセルがSheet1!P1セルではないのにもかかわらず、関数内で指定している参照先をSheet1!$P$1のままにしていたり、並べ替え先の別シートの表の中でデーターを表示する最初のセルがP1セルではないのにもかかわらず、関数内で指定している参照先を$P$1のままにしていたりしてはおられないでしょうか?
 関数内で参照先として指定するセルは、実際の参照先のセルに合わせて修正するようにして下さい。

 あと、INDEX関数以外にもOFFSET関数やINDIRECT関数を使う方法でも同様の事が出来ます。
 但し、大抵のExcel関数は元データーの表の位置をずらすなどをして、参照先のセルの位置が変わってしまった場合でも、その位置が変化した参照先のセルに合わせて、関数内に記されている参照先も自動的に変更されるようになっているのですが、INDIRECT関数だけはそのような参照先の自動修正が行われないため、参照先のセルの位置が変わるたびに、関数の記述内容を手作業で修正しなくてはならなくなります。
 ですから、INDIRECT関数を使った関数は可能な限り使わないようにした方が良いという事を覚えておいて下さい。
    • good
    • 1
この回答へのお礼

ありがとうございます。皆さんからも同様に回答を早速いただき、それぞれ教えて頂いた関数は異なりますが、いろいろな方法があることを知りました。急いでいた質問でしたのでとても助かりました。私のEXCELの知識なんてまだ初心者だということを知り、これからも学んでいこうと思います。INDIRECT関数は初めてですが、注意して使っていきます。ありがとうございました。■

お礼日時:2023/06/25 23:40

マルチポストになるので、質問の修正は「補足」に対して行うようにしましょう。



・・・

(´・ω・`) 利用規約とか読まないのかな?
読まないまでも、そのくらいは知識として持ってないといけないよ。
いい機会だから「教えて!goo」でそういった一般常識的な知識を身につけておくと良いと思います。
他でも使える知識ですからね。
(別のサイトやアプリの規約も似たようなもので、違うところだけ押さえておけば良いのです)
    • good
    • 1
この回答へのお礼

ありがとうございます。急いで解決したかったので質問させていただきましたところ早速に教えて頂き、無事に解決することができました。今回初めてこの質問を利用させていただきました。質問のルールも知らないままお願いしたものですからご指摘も受けましたが、今後は気を付けてお伺いさせていただくこともあるかと思います。今後ともよろしくお願いいたします。ありがとうございました。■

お礼日時:2023/06/25 23:44

>別シートへ


(中略)
>と移動したいのです。

のところに記述されている例と

>領域を選んでコピーすると、
(中略)
>にならないのです。

のところに記述されている例では、やっている並べ替え方がまるで異なっていますので、どちらの並べ替え方にすれば良いのかをはっきりさせて下さい。


 とりあえず、

>別シートへ
(中略)
>と移動したいのです。

のところに記述されている例にある並べ替え方をする方法の1つの例を回答致します。
 VBAの方がファイルのバイト数を節約出来ますが、特に節約しなくても良いなら別に関数でも出来ます。
 今仮に元データーが入力されているシートのシート名をSheet1であるものとします。
 その場合、まず別シートのP1セルに次のような関数を入力して下さい。

=IF(INDEX(Sheet1!$P:$S,ROW(Sheet1!$P$1)+INT((ROW()-ROW($P$1))/2),COLUMNS($P$1:$P1)+MOD(ROW()-ROW($P$1),2)*2)="","",INDEX(Sheet1!$P:$S,ROW(Sheet1!$P$1)+INT((ROW()-ROW($P$1))/2),COLUMNS($P$1:$P1)+MOD(ROW()-ROW($P$1),2)*2))

 次に、別シートのP1セルをコピーして別シートのQ1セルに貼り付けて下さい。
 次に、別シートのP1:Q1の範囲をコピーして、同じ列の2行目以下に貼り付けて下さい。
 以上です。
    • good
    • 2
この回答へのお礼

早速のご教示ありがとうございます。確かにできましたが、少し不具合があるようにみえます。よろしければ再度質問いたしましたので、ご教示いただけると助かります。でもやはりVBを使った方がよいでしょうか。関数ではかなり困難であることが分かりました。ありがとうございました。■

お礼日時:2023/06/25 14:05

ごめん。

何をしているのか訳が分からないよ。

これが

1 あ ア
2 10 100
3 い イ
4 20 200
5 う ウ
6 30 300
 :

どうしたら

1 P1
2 Q1
3 P3
4 Q3

になるの?
PとかQとかどこから現れたの?

そういったロジカルな点を明確に示すことができるよう努力を怠ってはいけません。
    • good
    • 1
この回答へのお礼

分かりにくくてすみません。質問を修正し再度質問いたしました。よろしければ教えてください。よろしくお願いいたします。■

お礼日時:2023/06/25 14:02

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