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

INDIRECT("'"&$A$2&"'!I2")
=INDIRECT("'"&$A$2&"'!I"&ROW(A2))
=INDIRECT(ADDRESS(ROW(I2),COLUMN(I2),,,$A$2)) だと縦、横どちらにも対応するか。
以上のように、お教え頂いたものをオートフィルできました。しかし、これを横にしてしたいと
思いやってみますが、どうしてもうまくできません。データは下記に示します。
  I J K L M
4 13 6 7 12 9 10
4 14 14 15 20 17 18
4 15 22 23 28 25 26
4 16 30 31 36 33 34
4 17 38 39 44 41 42
このように、=INDIRECT(ADDRESS(ROW(I2),COLUMN(I2),,,$A$2)) で抽出しました。

縦の I6~38を横にしたい。その他のところも J7~39・K12~44・L9~41・
M10~42も同じように縦を横に長く表示したい。また、抽出する別シートの元データは
上記のような配列になっている。この他に70ページほどのデータがあるので、関数か
マクロでどうにかなりませんか。よろしくお願いします。

質問者からの補足コメント

  • つらい・・・

    =INDIRECT(ADDRESS(COLUMN(B9),ROW(B9),,,$A$2))でできました。ありがとうございます。
    =INDIRECT(ADDRESS(COLUMN($B$9),ROW($B$9),,,$A2))検索値を$A3~$A50にしたオート
    フィルでできます。縦のデータj~M列も横にする場合は、その都度(COLUMN(B9),ROW(B9)の値を
    変更しなければ、行へのオートフィルが使えません。これでできているので、5つ程度の変更なのでそれでもいいのですが、そのことまでは難しいですか。すいません、我が儘なことを言っているようで、
    心苦しいのですが、よかったら教えて頂けますか。
    4 別シートにある縦行のデータを横列に変更する。
    5 別シートにある縦行のデータを横列に変更する。
    6 別シートにある縦行のデータを横列に変更する。


    50
    こんな感じです。

      補足日時:2021/11/12 22:35
  • I J K L M N
    6 7 12 9 10 11
    14 15 20 17 18 19
    22 23 28 25 26 27
    30 31 36 33 34 35
    38 39 44 41 42 43
    46 47 52 49 50 51
    4 シート
    I J K L M N
    3 4 5 6 7 8
    81 82 83 84 85 86
    22 23 35 25 26 27
    30 31 32 33 34 35
    38 39 40 41 42 43
    46 47 48 49 50 51
    5 シート
    I J K L M N
    11 7 8 9 10 1
    19 15 16 17 18 2
    27 23 24 25 26 3
    6 シートの一部
    上記のExcelの「4というシート」から「6というシート」までを示しました。このシートから縦のデータを横のデータにする関数です。集計シートの一部を画像で示しました。

    「INDIRECT 横に再度抽出したい」の補足画像2
      補足日時:2021/11/13 18:55
  • C2=INDIRECT(ADDRESS(COLUMN(B9),ROW(B9),,,$A2))にこの関数が入っていてD2~H2にオートフィルで(COLUMN(B9),ROW(B9)この部分を下記のように変更して入っています。D2~H2のB~Gの値は変えずに9の値を10~30まで変更、横にいっきにオートフィルで変更するようにはできないでしょうか。現在C2~H2まで(ひとかたまり)COLUMN・ROW関数のところに変更した関数が入っています。当然、2行目が全て完成すれば、下の行にオートフィルすることにしたいのです。

      補足日時:2021/11/13 19:04
  • 例えば(変更例)
    列行
    C2・・・(COLUMN(B9),ROW(B9)・・・
    D2・・・(COLUMN(C9),ROW(C9)・・・
    E2・・・(COLUMN(D9),ROW(D9)・・・
    F2・・・(COLUMN(E9),ROW(E9)・・・
    G2・・・(COLUMN(F9),ROW(F9)・・・
    H2・・・(COLUMN(G9),ROW(G9)・・・
    I2・・・(COLUMN(B10),ROW(B10)・・・
    J2・・・(COLUMN(C10),ROW(C10)・・・
    K2・・・(COLUMN(D10),ROW(D10)・・・
    L2・・・(COLUMN(E10),ROW(E10)・・・M2・・・(COLUMN(F10),ROW(F10)・
    N2・・・(COLUMN(G10),ROW(G10)・ NZ2・(COLUMN(G30),ROW(G30)

      補足日時:2021/11/13 19:09
  • つらい・・・

    いくつか、また補足さましたがどうでしょうか。わかりにくくてすみません、初心者で大変
    申し訳ありません。最初から、もっと全てのデータを示すべきでした。迷惑かけてすみません。
    よろしくお願いします。最初の質問と異なったものとなり申し訳ありません。

      補足日時:2021/11/13 19:14

A 回答 (3件)

ご質問の内容が概ね明確になったので、数式を考えてみました。


表示用シートのC2セルに

=INDIRECT(ADDRESS(MOD(COLUMN(A1)-1,6)+2,INT((COLUMN(A1)-1)/6)+9,,,$A2))

という数式を記述し、下方向、右方向へオートフィルすれば、ご質問者のご希望に沿った結果になるのではないかと思います。

表示用シートC2は元シートのI2に対応するので元シートの「2行目かつ9列目」に対応することになります。
表示セルがC2から右方向へ1つ進むと、元シートのセルは下方向へ1つ進み、行数は「2、3、4、5、6、7」を繰返すことになります。
つまり、2~7を繰返す数式を作ればよいので、

MOD(COLUMN(A1)-1,6)+2

という数式を作成し、元シートの行数を算出したうえで、ADDRESS関数の行数としています。

さらに、元シートのデータは6個ワンブロックで、表示用シートにC2から右にデータが6個表示されると、元シートの次の列に進みます。
I2の列数は「9」で、初期値は「9」ですから、6データ毎に9から1つづつ増える数式を作ればよいので、

INT((COLUMN(A1)-1)/6)+9

という数式を作成し、元シートの列数を算出したうえで、ADDRESS関数の列数としています。
この数式は「表示用シートの表示位置のセルの列数が元シートの行数と列数に対応する」という点に着目したものです。
    • good
    • 0
この回答へのお礼

できあがりました。こんなに、ご親切且つご丁寧にご教授頂いたのは初めてです。お人柄に感じ入っている次第です。誠にありがとうございました。色々と試行錯誤してもうまく行かず、自分の不勉強さを痛感しています。お気に障りましたら申し訳ありません、どんな勉強をしたらよいのか、お教え下さいませんか、よろしくお願いします。また、今後ともよろしくお願いします。幾重にもお礼申し上げます。

お礼日時:2021/11/13 23:36

No.1です。


ご質問者の補足コメントの意味が理解できません。
その理由は元の表の内容を承知していないからです。
今回のご質問では元の表の内容については一切説明がなく、全くわかりません。
No.1の回答は「私の推測」に基づくものです。
普通なら複数の回答がつくであろう、このサイトの質問に私の回答しかついていないのはご質問の内容が把握できないからだと思います。

>=INDIRECT(ADDRESS(COLUMN($B$9),ROW($B$9),,,$A2))
>検索値を$A3~$A50にしたオートフィルでできます。

COLUMN($B$9),ROW($B$9)という表記は「絶対参照」であり、参照セルを固定したい場面で使用するものです。
ご質問者の場合、縦、横にオートフィルを使って元シートのデータを反映させる狙いだと推測していますので、参照セルを固定したら「元シートの一つのセルがオートフィル全体に表示されるだけ」ということになります。
それなのに、「$A3~$A50にしたオートフィルでできます」とおっしゃており、何ができているのかわかりません。
また、検索値とは何のことですか?上記の数式に検索値はありませんが・・・
数式末尾の,,,$A2のことをおっしゃっているなら「検索値」ではなく「シート名」の参照セルです。

>縦のデータj~M列も横にする場合は、その都度(COLUMN(B9),ROW(B9)
>の値を変更しなければ、行へのオートフィルが使えません。

そもそものご質問は

>縦のI6~38を横にしたい。その他のところも
>J7~39・K12~44・L9~41・M10~42も同じように縦を横に長く表示したい。

つまり、補足説明にある

>縦のデータj~M列も横にする場合は、

を想定して回答したものです。

それなのに、

>その都度(COLUMN(B9),ROW(B9)の値を
>変更しなければ、行へのオートフィルが使えません。

とおっしゃっており、回答者さんが何をやっているのかが不明です。

まず、お尋ねしたいのは以下の4点です。
(1)「=INDIRECT(ADDRESS(ROW(I2),COLUMN(I2),,,$A$2)) だと縦、横どちらにも対応するか。」という別シートから転記する数式の回答を得たようですが、上記数式は元シートの「どのセル」を表示用シートの「どのセル」に転記するという回答なのでしょうか?
また、この回答を得たご質問自体はどのサイトにあるのですか?URLを教えてください。
(2)ご質問で説明されているI列~M列の内容の左にある、縦に並んだ5個の「4」、「13~17」の数字はなにを意味しているのですか?
また、これはセルに表示されているものなのですか?
(3)ご質問で説明されている表の内容は「元の表の内容」なのか、「関数を使って表示させた結果」なのかどちらでしょうか?
(4)補足コメントにある
>4 別シートにある縦行のデータを横列に変更する。
>5 別シートにある縦行のデータを横列に変更する。
>6 別シートにある縦行のデータを横列に変更する。
>・
>・
>50
>こんな感じです。
とのご要望ですが、上記の説明で理解できる人はいないと思います。
頭にある数字は何を意味しているのですか?縦行のデータは「別シート」の「どこに」あり、横列に表示するのは表示用シートの「どこに」表示するのですか?
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2021/11/13 23:37

行番号と列番号を入れ換えるだけです。

元の数式、

=INDIRECT(ADDRESS(ROW(I2),COLUMN(I2),,,$A$2)) は、

=INDIRECT(ADDRESS(ROW(2:2),COLUMN(I:I),,,$A$2))

と記述することもできます。
つまり、「2行目かつ9列目のセル」を意味しています。
これを「COLUMN関数」で「2【行】目」、「ROW関数」で「9【列】目」を指定すればよい訳ですから、

=INDIRECT(ADDRESS(COLUMN(B:B),ROW(9:9),,,$A$2))

となります。これを元の数式と同じ表記にすると

=INDIRECT(ADDRESS(COLUMN(B9),ROW(B9),,,$A$2))

となります。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2021/11/13 23:36

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

このQ&Aを見た人はこんなQ&Aも見ています