• ベストアンサー

Excelでデータを分割

例えば、ある列に1~100行目のセルまでデータがあるとして、それを4列に 分割することはできますか? ただし、普通に4分割ではなくて、  最初の列は、元の列の1、5、9、・・・行目のセル  2列目は、元の列の2、6、10、・・・行目のセル   ・・・ としたいのです。つまり、4列x25行のデータにしたいのです。 何かいい方法はありますでしょうか?

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 仮に、A1~A100にデータがあるとして、B~E列に分割するとします。 まず、B1に、 「=OFFSET($A$1,(COLUMN(B1)-2)+4*(ROW(B1)-1),0,1,1)」 と入力し、フィルハンドルでC1、D1、E1にコピーします。 そして、B1~E1を選択して、やはりフィルハンドルで、25行目までコピーします。 なお、分割する始めの列がBでない場合、例えば、H列であった場合は、上記の式の中の、 「COLUMN(B1)-2」 の部分を、 「COLUMN(H1)-8」 に替えます。つまり、A列を1列目とした時の列数に替えます。 また、行が1行目から出ない場合、仮にB6からE30に分割する場合は、上記の式の中の、 「ROW(B1)-1」 の部分を、 「ROW(B6)-6」 に替えます。つまり行番号に替えます。 あと、OFFSET関数の第1引数には、分割前のデータの先頭行のセル名を絶対参照でいれます。

moby2002
質問者

お礼

マクロとかになってしまうのかと思っていましたが、簡単に できるのですね! さっそく使わせていただきました。 ありがとうございました。

その他の回答 (2)

  • kokiriko
  • ベストアンサー率22% (121/535)
回答No.3

一度データをCSVで保存して、読み込むマクロを作成したらいかがでしょう。 保存してから読み込んだ方が簡単だとおもいます。 CSVで保存する方法は判りますよね。 読み込む専用のブックを最初に作って、その中のシートに展開すれば可能です。 だいたい次のマクロで良いはずなんですが、列数などを変更してやってみて下さい。 '---------------------------------------- 'CSVファイルを読み込むマクロ '---------------------------------------- Sub ReadCsv() Dim myTxtFile As String '読み込んだデータが入る場所 Dim myBuf(12) As String  '()の中は読み込む列の行数 Dim i As Integer  'iはカウント Application.ScreenUpdating = False '既存のシートに書き込む(新しいシートは作らない) myTxtFile = ActiveWorkbook.path & "\読み込むファイル名.CSV" Worksheets("読込シート名").Activate  '先にシートを作成しておく Open myTxtFile For Input As #1 Do Until EOF(1) ' Input #1, myBuf(1), myBuf(2), myBuf(3), myBuf(4), _ myBuf(5), myBuf(6), myBuf(7),myBuf(8),_ myBuf(9), myBuf(10),myBuf(11), myBuf(12) 'データをセルに展開する i = i + 1 '行数のカウントアップ     '1行目 ' Cells(行, 列)   列の1はA、2はB Cells(i, 1) = myBuf(1) Cells(i, 2) = myBuf(5) Cells(i, 3) = myBuf(9) i = i + 1 '行数のカウントアップ    '2行目 Cells(i, 1) = myBuf(2) Cells(i, 2) = myBuf(6) Cells(i, 3) = myBuf(10) i = i + 1 '行数のカウントアップ     '3行目 Cells(i, 1) = myBuf(3) Cells(i, 2) = myBuf(7) Cells(i, 3) = myBuf(11) i = i + 1 '行数のカウントアップ     '4行目 Cells(i, 1) = myBuf(4) Cells(i, 2) = myBuf(8) Cells(i, 3) = myBuf(12) Loop Close #1 End Sub

moby2002
質問者

お礼

ありがとうございました。

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

下記実験(1)で考えて、その後(2)以下を行ってください。 A1からA100まで1-100までデータをオートフィルで入れます。 (1)まずA列をSheet1の中でDEFG4列に分ける実験 D1には=INDEX($A$1:$A$100,4*(ROW(C1)-1)+1,1) と入れます。 そしてD25まで複写します。 E1には=INDEX($A$1:$A$100,4*(ROW(D1)-1)+2,1) と入れます。そしてE25まで複写します。 F1には=INDEX($A$1:$A$100,4*(ROW(D1)-1)+3,1) と入れます。そしてF25まで複写します。 G1には=INDEX($A$1:$A$100,4*(ROW(D1)-1)+4,1) と入れます。そしてG25まで複写します。 これでA列がDEFG列に折り畳まれました。 (2)(1)では同一シート内に分けたのですが、Sheet2、Sheet3、Sheet4、Sheet5に分けるには、各シートのA1に(Sheet1のデータがA-C列あるとして) =INDEX(Sheet1!$A$1:$C$100,4*(ROW(D1)-1)+1,1) と入れて、下へ複写してください。(+1のところを+1から+4まで各シートによって、変えてください。) のようにSheet1!を添えてください。 (3)(1)(2)はA列だけでしたが、B,C列もSheet2-Sheet5に移すために、各シートの のB1に,Sheet2の場合 =INDEX($A$1:$C$100,4*(ROW(D1)-1)+1,2) のように入れます。最後の,2はB列ですから、ここをC、・・に(3、・・に)変化させてください。 以上でSheet1のA-C列が行によってSheet2-sheet5に分かれます。

moby2002
質問者

お礼

ありがとうございました。

関連するQ&A