• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:「1列に500行並んだデータを5列毎に改行」の逆)

1列に500行並んだデータを5列毎に改行する逆の関数

このQ&Aのポイント
  • データを1列に500行並べた状態から、5列毎に改行する逆の機能を持つ関数を探しています。
  • 具体的な状況や使用しているソフトウェアについては明示されていませんが、データを自動的にコピーして反映させるような機能を持つG列の数式を知りたいです。
  • お知恵をお貸しいただける方がいらっしゃいましたら、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • msMike
  • ベストアンサー率20% (364/1804)
回答No.1

列A~Fのデータが全て文字列なら G1: =OFFSET(A$1,(ROW(A1)-1)/6,MOD(ROW(A1)-1,6))&"" で、カンタン? 【お願ひ】 「F100」のデータは、セル G600 で終わっちゃうけど、貴方が「G10000」としたのは出鱈目でしたか? 真面目な回答者を惑わせないでください!

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

計算問題だよ。 変換後をイメージして、今考えているセルに、 元の6列データの何行目でかつ何列目のデータを持ってくるのか計算すれば仕舞だ。 (下記は、考え方を判ってもらう説明のため、長々になっているが、読んでみてください) 小学生の高学年の子供でも、クイズ的に聞くと、答え得る子は多いと思うよ。 1列化したあとのセルの行番号はROW()でとらえられる(判る)のは判るね。 仮に20行目だとすると20÷6に+1した4行目にあるデータだとわかるよね。 A1:F4のデータ わかりやすいように数字のものを作ってみるのがコツ。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ーーー 何行目は、(6で割った商+1)だよね。 そして20は2列目にあることから、これは6で割った余りの2だよね。 これで持ってくるセルの位置は決まる。 そこでエクセルの関数に入る。 http://kokodane.com/2013_kan_046.htm 行番号と列番号からセルのセルの値を持ってくるのはOFFSET関数でできそう。 こればかりはエクセル関数の日ごろ蓄えた知識が要る。 行のA1からの、「ずれ」の数字は I1に=INT((ROW()-1)/6)+1-1(「ずれ」で指定するので、-1しているが、説明のため) 下方向に式を複写。 列は J1に=MOD((ROW()-1),6)+1-1 下方向に式を複写。 I,J列の「ずれ」の値を使って H1に、=OFFSET($A$1,I1,J1) 下方向に式を複写。 結果 1 0 0 2 0 1 3 0 2 4 0 3 5 0 4 6 0 5 7 1 0 8 1 1 9 1 2 10 1 3 一部行省略 21 3 2 22 3 3 23 3 4 24 3 5 0 4 0 0 4 1 ーー 理解したのちは、実際はH列の式の引数に、I,J列の式を(=を省いて)組み込んでください) 最終セルを超える分の不適当値0を抑止する式は長くなるので省略。

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.2

>「1列に500行並んだデータを5列毎に改行」の逆 5列毎に改行と言う意味が分かりません。 >というような感じで、自動的にデータがコピーされていくような感じです。 質問の文言と例示の配列が矛盾しています。 下記の元データであれば6列です。 A1 B1 C1 D1 E1 F1 A2 B2 C2 D2 E2 F2 >入力していくと、データがコピーされて反映されていくような感じです。 関数での処理を希望されていますが、関数とは数式を設定したセルへ結果を代入することなのでA1セルの値をG1セルへコピーするのではなくG1セルへA1セルの値を代入するという考え方です。 従って基本的には次のようになるでしょう。 G1セルに次の数式を設定します。 =IF(A1="","",A1) 但し、G1セルをG2セル以下へコピーするとあなたが希望する順番に配置換えできませんので代入する対象を目的の順番に取り出す方法を考える必要があります。 方法としてはINDEX関数を使う方法とOFFSET関数を使う方法があります。 INDEX関数の場合は次の数式をG1セルへ設定して下へコピーします。 =IF(ISBLANK(INDEX($A$1:$F$10,INT((ROW()-1)/6)+1,MOD(ROW()-1,6)+1)),"",INDEX($A$1:$F$10,INT((ROW()-1)/6)+1,MOD(ROW()-1,6)+1)) OFFSET関数の場合は次の数式になります。 =IF(ISBLANK(OFFSET($A$1,INT((ROW()-1)/6),MOD(ROW()-1,6))),"",OFFSET($A$1,INT((ROW()-1)/6),MOD(ROW()-1,6))) この数式は6列×10行を対象にしていますので列数と行数が変わったときは修正が必要です。

関連するQ&A