• ベストアンサー

エクセルについて

エクセルについて、 縦に並んだデータをn個ずつ横に並べる関数、もしくは方法はありませんか? 大量なデータを扱うので、コピー&ペースト以外のやり方でお願いします。 例)n=3のとき 1 2 3 4 5 6 7 8 9 10 ↓ 1 4 7 10 2 5 8 3 6 9

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

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.1

 今仮に、データーがSheet1のA2~A11の範囲に存在していて、n=3で、Sheet2のA2~D4の範囲に並べ替えた結果を表示させるものとします。  まず、Sheet2のA2セルに次の関数を入力して下さい。 =IF(or(ROWS($2:2)>3,(COLUMNS($A:A)-1)*3+ROWS($2:2)>COUNT(Sheet1!$A:$A)),"",INDEX(Sheet1!$A$2:$A$11,(COLUMNS($A:A)-1)*3+ROWS(A$2:A2)))  次に、Sheet2のA2セルをコピーして、Sheet2のA3~A4の範囲に貼り付けて下さい。  次に、Sheet2のA2~A4の範囲をコピーして、同じ行のB列から右方に貼り付けて下さい。  以上です。  尚、Sheet1!$A$2:$A$11の部分に関してですが、データーが存在している最終行の指定は、実際の最終行よりも下の行を指定しても構いません。  例えば、Sheet1!のA2~A11の範囲にデーターが存在している場合でも、Sheet1!$A$2:$A$999等と指定しても構いません。($A$2の方は必ず最初のデーターが存在しているセルに合わせて下さい)

qqqaaazzz1031
質問者

お礼

ありがとうございました。 大変参考になりました。

その他の回答 (4)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.5

こんにちは! すでに回答は出ていますので、参考程度で・・・ VBAでやってみました。Sheet1のデータをSheet2に表示するようにしています。 画面左下にある操作したいSheet見出し上で右クリック → コードの表示 → VBE画面が出ますので ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) 尚、Sheet2は使用していないという前提です。 Sheet1のデータは1行目からあるとしています。 Sub test() 'この行から Dim i, j As Long Dim ws1, ws2 As Worksheet Set ws1 = Worksheets("sheet1") '←Sheet名は実際のSheet名に! Set ws2 = Worksheets("sheet2") j = InputBox("行数を入力してください。") ws2.Cells.Clear For i = 1 To ws1.Cells(Rows.Count, 1).End(xlUp).Row If ws2.Cells(i, 1).Row Mod j = 0 Then ws2.Cells(i, 1) = j Else ws2.Cells(i, 1) = ws2.Cells(i, 1).Row Mod j End If ws2.Cells(i, 2) = WorksheetFunction.RoundDown(ws2.Cells(i + j - 1, 2).Row / j, 0) Next i For i = 1 To ws2.Cells(Rows.Count, 1).End(xlUp).Row ws2.Cells(ws2.Cells(i, 1), ws2.Cells(i, 2) + 2) = ws1.Cells(i, 1) Next i ws2.Columns("A:B").Delete (xlToLeft) End Sub 'この行まで こんな感じではどうでしょうか?m(__)m

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

昨日は逆の質問が出ていた。 これは計算問題なのだ エクセルの式はセルの値を求めたいセルに計算式を入れるのだ。 (VBAであれば自由なので、こんなのは苦労しないが。) そして式を入れるセルの行と列はROW(),COLUMN()関数で得られることを知っておく必要がアル。 其れで1,2例で計算式を考えて、式を一般化すればいいのだ。 たとえば2行2列であれば1列目で3個は使い果たし2列1行目が4番目、2行目はその次(+1)の5だ。 一般にn行、m列では、(m-1)*3は左列で使ってしまっているから、そのn個あとがこのセルに来るべきだ。 それをINDEX関数で元の1列データから持ってくる 例データ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 今回は同一シートでやって見る。またD1セルから右列に出してみる。 また縦行数は、4行でやってみる。 D1に =INDEX($A$1:$A$100,(COLUMN()-3-1)*4+ROW()) これを第4行目目まで(D1:D4)にしきを複写。 そしてD1:D4を右方向に式複写。 式の-3はD列から始めているから入れる必要があるもの。 結果 1 5 9 13 17 2 6 10 14 0 3 7 11 15 0 4 8 12 16 0 0を出さないようにするには (COLUMN()-3)*4+ROW()が、データ数(データが数値の場合は)COUNT(A1:A100)より大なら空白というIF関数をかぶせる。

noname#204879
noname#204879
回答No.3

添付図参照 C1: =OFFSET($A$1,ROW(A1)-1+(COLUMN(A1)-1)*3,)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

お示しのデータがシート1のA1セルから下方に入力されているとします。 並べ替えた表をシート2に表示させるとしてA1セルにはnの値を例えば3などと入力します。 A2セルには次の式を入力して下方にオートフィルドラッグしたのちに右横方向にもオートフィルドラッグします。 =IF(OR(ROW(A1)>$A$1,INDEX(Sheet1!$A:$A,MOD(ROW(A1)-1,$A$1)+1+(COLUMN(A1)-1)*$A$1)=0),"",INDEX(Sheet1!$A:$A,MOD(ROW(A1)-1,$A$1)+1+(COLUMN(A1)-1)*$A$1))