• ベストアンサー

Excelで1列のデータを5列に振り分けする

Excel2003でA列に1行にあるデータ(半角英数字)を 次のシートに、1行ずつコピーして、それを5列に振り分けするというマクロを作りたいです。 (ただし、コピーは2つずつの時もあります。) 元データ ●A列 B列 C列  1  2  3  4  5  ・  ・ 加工後 ●A列 B列 C列 D列 E列   1   1   2   2   3   3   4   4   5   5   上記のような感じです。ただデータは数字のみでなくて、英数字です。 Excelのマクロは全くの初心者で大変困っています。 どうぞよろしくお願いたします。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

ALT+F11を押す 挿入メニューから標準モジュールを挿入する 下記をコピー貼り付ける sub macro1()  dim i as long, j as long, k as long  dim n, m  on error resume next  k = application.inputbox("duplication", type:=1)  if k = 0 then exit sub  activesheet.next.range("A:E").clearcontents  for n = 1 to range("A65536").end(xlup).row   for m = 1 to k    activesheet.next.cells(j + 1, i + 1).value = cells(n, "A").value    i = (i + 1) mod 5    j = iif(i = 0, j + 1, j)   next m  next n  activesheet.next.select end sub ファイルメニューから終了してエクセルに戻る 元データのあるシートで実行する #カスタマイズはご自分でお願いします。

CHIA2800
質問者

お礼

ご回答ありがとうございました。 早速やってみましたら出来ました。 大変助かりました! これからカスタマイズしながら少しずつ勉強してみたいと思います。

その他の回答 (3)

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

マクロを使わずに関数で行うとしたら次のようにします。 シート1のA1セルから下方にデータがあるとします。 シート2でお求めの表を表示させることにしてシート2のA1セルにはコピーを2文字ずつの時は2と1文字の時は1と入力します。また、1行を5列にするときはB1セルに5と3列にするときは3と入力します。 A2セルには次の式を入力して横方向にオートフィルドラッグしたのちに下方向にもオートフィルドラッグします。 =IF(COLUMN(A1)>$B$1,"",IF(INDEX(Sheet1!$A:$A,ROUNDUP(ROW(A1)*$B$1/$A$1-$B$1/$A$1+COLUMN(A1)/$A$1,0))=0,"",INDEX(Sheet1!$A:$A,ROUNDUP(ROW(A1)*$B$1/$A$1-$B$1/$A$1+COLUMN(A1)/$A$1,0)))) これでお望みの列数で繰り返す文字もお望みの数で表を作成することができます。

CHIA2800
質問者

お礼

ご回答ありがとうございました! やってみましたら思っていましたとおりになりました! マクロや関数やいろいろな方法で出来るのですね。 みなさん、いろいろな方法をご存じですごいですね! 普段はCADをしてまして、Excelでは基本的なことしかしたことがなかったので、これからはExcelの方も少しずつ勉強してみたいと思います。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.3

Sheet1の A列に対応するとして 別シートから以下を実行します。 Sub ボタン1_Click() c = 1 r = 1 For i = 1 To Sheets("Sheet1").UsedRange.Rows.Count Cells(r, c).Value = Sheets("Sheet1").Range("A" & i).Value If c + 1 > 5 Then c = 1 r = r + 1 Else c = c + 1 End If Cells(r, c).Value = Sheets("Sheet1").Range("A" & i).Value If c + 1 > 5 Then c = 1 r = r + 1 Else c = c + 1 End If Next End Sub

CHIA2800
質問者

お礼

ご回答ありがとうございました! やってみましたら出来ました! いろいろやり方があるのですね。 少しずつ勉強してみます。

  • aokii
  • ベストアンサー率23% (5210/22062)
回答No.1

マクロではなく普通の数式(INDEX関数)をお勧めします。

CHIA2800
質問者

お礼

1番にご回答頂いていましたのに、お礼が遅くなって大変申し訳ありません。 補足に入れたのをお礼のつもりで終わらせてしまっていました。 教えて頂いたINDEX関数の方でもやってみましたが、セルに関数が入ってしまうので、今回はマクロの方が都合が良かったです。説明が足りなくてすみません。

CHIA2800
質問者

補足

早速のご回答ありがとうございます。 ただ、INDEX関数もあまりよくわからないのですが、その場合、この一連の作業をすぐにできるのでしょうか? この作業がデータ内容は変わりますが、常にありますので、手間をかけずにやりたいのですが…。

関連するQ&A