先の質問で説明不足ですみません。
以下の表で書き直します。
(表1)
列 A B C D
---+---+---+----
行1:あ ア 10 100
2:い イ 20 200
3:う ウ 30 300
:
の表(sheet1)から他(sheet2)にコピーして表の並びを以下のように変更した表を作りたいのです。
(表2)
列 A B C D
---+---+---+---
行1:あ ア
2:10 100
3:い イ
4:20 200
5:う ウ
6:330 300
そこで目的とする表(表2)は、次の関数で作りました。
(表3)
列 A B C D
--------------+------------+---+---
列1: =sheet1!A1 =sheet1!B1
2: =sheet1!C1 =sheet1!D1
3: =sheet1!A2 =sheet1!B2
4: =sheet1!C2 =Sheet1!D2
:
そして、1列2列がひとまとまりなので、
A1 B1 A2 B2 をひとまとまりで広げてコピーすると、以下になってしまいます。
(表4)
列 A B C D
--------------+------------+---+---
列1: =sheet1!A1 =sheet1!B1
2: =sheet1!C1 =sheet1!D1
3: =sheet1!A3 =sheet1!B3
4: =sheet1!C3 =Sheet1!D3
5: =sheet1!A5 =sheet1!B5
6: =sheet1!C5 =Sheet1!D5
:
表2を作りための表3に示した関数をどのように作るのか
教えてください。よろしくお願いいします。
No.1
- 回答日時:
Sheet2の各セルに、以下の式を入れてください。
A1
=INDIRECT("Sheet1!r" & (ROW()+1)/2 & "c1",FALSE)
B1
=INDIRECT("Sheet1!r" & (ROW()+1)/2 & "c2",FALSE)
A2
=INDIRECT("Sheet1!r" & (ROW())/2 & "c3",FALSE)
B2
=INDIRECT("Sheet1!r" & (ROW())/2 & "c4",FALSE)
ありがとうございます。皆さんから教えて頂き、違う関数を使っても結果は同じになることが分かりました。taglet様の方法も参考にさせていただきます。とても助かりました。ありがとうございました。■
No.2ベストアンサー
- 回答日時:
こんにちは
順序を入れ替えてフィルコピーをしたいのなら、その様な位置関係になるように計算で求めてあげる必要があります。
例えば、参照元の行・列何号を(行、列)で表すなら、ご質問の場合であれば、
(1,1) (1,2)
(1,3) (1,4)
(2,1) (2,2)
(2,3) (2,4)
・・・・
のような順序になるように計算すれば良いことになります。
行番号は、参照先で2行増加すると、参照元が1行増加するようになれば良いので
=INT(ROW(A2)/2)
のような計算で求められます。
同様に、列番号は
=COLUMN(A1)+MOD(ROW(A2),2)*2
のような計算で求められます。
あとはINDEX関数やOFFSET関数を利用して、該当するセルを参照すれば良いだけです。
=INDEX(Sheet1!$A:$D,INT(ROW(A2)/2),COLUMN(A1)+MOD(ROW(A2),2)*2)
などを入力して、必要範囲にフィルコピーすれば宜しいでしょう。
ご質問文のように、4セルずつをコピペする方式ならA1:B2セルに
=INDEX(Sheet1!$A:$D,INT(ROW(A2)/2),1)
=INDEX(Sheet1!$A:$D,INT(ROW(A2)/2),2)
=INDEX(Sheet1!$A:$D,INT(ROW(A2)/2),3)
=INDEX(Sheet1!$A:$D,INT(ROW(A2)/2),4)
をそれぞれ入力して、4セルをまとめてコピペして行っても同様の結果を得られます。
※ 参照式を直接文字列で直接作成してしまう方法や、INDIRECT関数で参照する方法などいろいろと考えられると思いますので、上記はあくまでも一例です。
丁寧な解説ありがとうございます。教えて頂いたように作ったところ、うまくできました。コピーの範囲も拡大して使うことができるようになりました。
EXCEL の奥の深さを教えられました。
他の方法もあるとのこと、さらに調べていきたいと思います。
ありがとうございました。■
No.3
- 回答日時:
仮に、Sheet1の表の範囲が「$A$1~$D$100」として、
① Sheet2の4つのセル(A1,B1,A2,B2)に、
図のように数式を入力します。
A1 =INDEX(Sheet1!$A$1:$D$100,ROUND(ROW()/2,0),1)
B1 =INDEX(Sheet1!$A$1:$D$100,ROUND(ROW()/2,0),2)
A2 =INDEX(Sheet1!$A$1:$D$100,ROUND(ROW()/2,0),3)
B2 =INDEX(Sheet1!$A$1:$D$100,ROUND(ROW()/2,0),4)
②Sheet2の4つのセルを選択して、
B2セルの右下の「■」にポインターを合わせ、
「╋」に変わったら下方へドラグして、数式をコピーします。
*Sheet1の表の範囲に任意の名前(「表」とか)を定義しておくと、
Sheet2の数式の「Sheet1!$A$1:$D$100」の部分をその名前で置き換えることができます。
ありがとうございます。いろいろなテクがあるのですね。今回の質問は皆さんに教えて頂き、無事に解決することができました。図までつけていただきどうもありがとうございました。■
No.4
- 回答日時:
》 先の質問で説明不足ですみません
先の質問(https://oshiete.goo.ne.jp/qa/13511130.html)のどの部分を仰っているのでしょうか?とても興味があるので、具体的に教えてください。
それにも拘わらず、[No.5]を投稿した私は身勝手な忖度をし、笑止千万、滑稽極まりなし、とお笑いになりますか?
コメントをお待ちしています。m(_._)m
ありがとうございます。教えて頂いた関数を使って自分のデータで試しましたところ、セル番号を間違えたのか、違う表示が出たものですから、うまくいかない部分もあると表現しました。これは私のミスでした。
皆さんからも異なる関数を教えて頂きましたが同じ結果になることを確認させていただきました。奥の深いことを知りました。仕事で複数の人が作った表からデータを抜き出すのに関数を探していましたがうまくいかなかったところ、本当に助かりました。mike_g様からはさらに説明をいただき、とても助かりました。ご親切に感謝いたします。
私の知っているEXCELなんてまだ氷山の一角なんだとわかり、さらに学んでいこうと思いました。機会がございましたら、またよろしくお願いいたします。
この度はどうもありがとうございました。■
No.5
- 回答日時:
先のご質問↓のNo.6の回答者です。
https://oshiete.goo.ne.jp/qa/13511130.html
その回答で、
>この数式はsheet2の表示範囲外にコビーしたときのエラーチェック等
>は一切行っていませんので、ご承知おきください。
と書きました。
他の回答者さんの回答を見ても、sheet1の元データの範囲外参照やsheet2の表示範囲外への数式コピーに対して、エラーチェックを行った数式は無いように思います。
恐らく、数式が冗長になるのを嫌っているのだと思われます。
※試しに、他の回答者さんの回答数式を表示対象範囲外のsheet2のC1セルにコピーして見てください。
そこで、sheet1の元データの範囲外の参照やsheet2の表示範囲外への数式コピーに対しては「空白」を表示するようなエラーチェックを付けてできるだけ短い数式を考えてみました。
sheet1のA列~D列に100行目まで、元データがあるとして、1行分をsheet2のA列、B列に2段に分けて表示するものとします。
sheet2のA1セルに、
=IFERROR(INDEX((Sheet1!$A$1:$B$100,Sheet1!$C$1:$D$100),ROW(A2)/2,COLUMN(A1),ISEVEN(ROW(A1))+1),"")&""
という数式を記述して、右方向、下方向へコピーする方法になります。
なお、この数式の結果は文字列となりますので、表示結果が文字列では不都合がある場合は末尾の「&""」を削除してください。
但し、削除した場合sheet1の最終行以前に空白データがあると、「0」が表示されてしまいます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Sheet「状況」から、分類の年齢別カウント数をSheet「D表」へ転記する下記マクロを作っています 7 2022/12/14 17:57
- Visual Basic(VBA) このプログラムなんですがsheetにデータを置いて表示できるようにしてありますがsheetに101を 2 2023/02/23 20:13
- Excel(エクセル) SUMIFSと日付変換 10 2023/04/16 15:38
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- Visual Basic(VBA) VBAでvlookup関数から、別シート参照するやり方・・・ 2 2022/11/14 18:49
- その他(プログラミング・Web制作) python文字化けエラーが発生しているようです 3 2022/04/13 19:41
- Excel(エクセル) エクセルでのコピーペースト 6 2022/09/03 07:14
- Visual Basic(VBA) VBA 別sheetからの転記なのですが 2 2023/05/22 15:55
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Excel(エクセル) Excelにて、行の最後のセルの値をコピーして別sheetに張りつけるVBAコードをご教授願います 3 2022/11/20 14:35
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの表示形式を保ったま...
-
excelのマクロでrangeの選択が...
-
Gメールの内容をスプレッドシ...
-
エクセルで別シートにある各々...
-
エクセルのIF関数がうまくいき...
-
エクセル 1つのセル毎に入力...
-
エクセルの関数を連続コピー
-
EXCELで2つの数値のうち大きい...
-
エクセル初心者です 関数の入れ...
-
エクセルで二つの数字の小さい...
-
Excelで隣のセルと同じ内容に列...
-
エクセルでオートフィルタのボ...
-
エクセルで時刻(8:00~20:00)...
-
エクセルで、2種類のデータを...
-
LOOKUP関数を使えばいいのでし...
-
PowerPointで表の1つの列だけ...
-
エクセルで最初のスペースまで...
-
SUMIFとCOUNTIFを合わせたよう...
-
エクセル 文字数 多い順 並...
-
VBAで文字列を数値に変換したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの表示形式を保ったま...
-
excelのマクロでrangeの選択が...
-
エクセル 1つのセル毎に入力...
-
Excel VBA For Each Next構文...
-
Excel2000 VBA ダブルクリック...
-
Excel VBAのComboboxのRemoveItem
-
Gメールの内容をスプレッドシ...
-
エクセルのIF関数がうまくいき...
-
EXCEL(エクセル)で0.001以下...
-
エクセルで重複するセルを削除...
-
エクセルの関数を連続コピー
-
EXCELで2つの数値のうち大きい...
-
Excelで隣のセルと同じ内容に列...
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
エクセルで、2種類のデータを...
-
エクセルで最初のスペースまで...
-
エクセルでオートフィルタのボ...
-
エクセルのオートフィルタで最...
-
エクセルで時刻(8:00~20:00)...
おすすめ情報