- ベストアンサー
セルの移動量で参照したい。
A B C D 1 あ い う え 2 お か き く 3 け こ さ し 上のような位置関係のデータを A B C D E F G H I J K L 1 あ い う え お か き く け こ さ し このように変換したいのですが、 E1やI1は左となりのセルが参照しているデータの1行下で3列左のセルを参照するようにしたいのです。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは! データはA~D列に必ず入っているとしての一例です。 関数でやる場合はE1セルを =INDEX($A:$D,INT(COLUMN(D1)/4)+1,IF(MOD(COLUMN(A1),4)=0,4,MOD(COLUMN(A1),4))) (エラー処理はしていません) としてオートフィルで右へコピーではどうでしょうか? もしVBAでやる場合は 画面左下にある操作したいSheet見出し上で右クリック → コードの表示 → VBE画面が出ますので ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub test() 'この行から Dim i As Long For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row Range(Cells(i, 1), Cells(i, 4)).Cut Cells(1, Columns.Count).End(xlToLeft).Offset(, 1).Select ActiveSheet.Paste Next i End Sub 'この行まで 尚、一旦マクロを実行すると元に戻せませんので別Sheetにコピー&ペーストしてマクロを試してみてください。 余計なお世話かもしれませんが、当方使用のExcel2003では列方向には256列までしかありませんので、64行までのデータしか表示できません。m(__)m
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
計算問題であり、小学生に、パズル的問題でやらしても、わかる子が多いと思う。 エクセル関数は、持ってくるところの元のデータのあるセルを指定しないとならない。 普通はそのセルは同行の他列などが多いが、本件は自分セル(関数を入れるセル)の位置で、持って来る(見るべき)セルの位置が変わるのが特徴。 しかしルールがあるからできるので、そのルールは何か? 4列で1行下のデータを見るべきだから、自分の列数を4で割った商の行が見るべき行になる。 そして見るべき列は(その上述の行の)4で割った余りの列である。やや大雑把に言ったので正確には下記で説明する。 (1を引いて、結果に+1している,INT((COLUMN()-5-1)/4)+1など常套手段なので注意) 全体的には用いる関数は、INDEX関数である。 例データ A1:D3 「あいう・・」などより、この方が直感的に判りやすいだろう。 1 2 3 4 5 6 7 8 9 10 11 12 ーーー F列から右に回答が出るようにしているが、(其れで下記の式に、ー5が入っている) 理解のために下記Xの式の第2引数と第3引数を単独で採り上げて分解してやってみる。 列と行の決定 下記式の行部分と列部分の式を分けて実験すると 行 1 1 1 1 2 2 2 2 列 1 2 3 4 1 2 3 4 上の行の式 =INT((COLUMN()-5-1)/4)+1 下の行の式 =MOD(COLUMN()-5-1,4)+1 最終的に式はF1に =INDEX($A$1:$D$100,INT((COLUMN()-5-1)/4)+1,MOD(COLUMN()-5-1,4)+1) <---X 右方向に式を複写する。 元データの最終以後は空白を返すようにIF関数を被せるべきだが、省略する。
Sheet2!A1: =OFFSET(Sheet1!$A1,(COLUMN()-1)/4,MOD(COLUMN()-1,4))
お礼
皆様迅速な回答ありがとうございました。 おかげさまで解決いたしました。