dポイントプレゼントキャンペーン実施中!

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のマクロは全くの初心者で大変困っています。

どうぞよろしくお願いたします。

A 回答 (4件)

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

ファイルメニューから終了してエクセルに戻る
元データのあるシートで実行する

#カスタマイズはご自分でお願いします。
    • good
    • 0
この回答へのお礼

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

早速やってみましたら出来ました。
大変助かりました!

これからカスタマイズしながら少しずつ勉強してみたいと思います。

お礼日時:2011/05/19 13:27

マクロを使わずに関数で行うとしたら次のようにします。


シート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))))

これでお望みの列数で繰り返す文字もお望みの数で表を作成することができます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました!

やってみましたら思っていましたとおりになりました!

マクロや関数やいろいろな方法で出来るのですね。

みなさん、いろいろな方法をご存じですごいですね!

普段はCADをしてまして、Excelでは基本的なことしかしたことがなかったので、これからはExcelの方も少しずつ勉強してみたいと思います。

お礼日時:2011/05/19 13:36

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
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました!

やってみましたら出来ました!

いろいろやり方があるのですね。
少しずつ勉強してみます。

お礼日時:2011/05/19 13:30

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

この回答への補足

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

補足日時:2011/05/19 12:23
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/05/19 15:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!