Excelのマクロについて質問です。

マクロは全くの初心者ですが、仕事で必要に迫られて、マクロを使わなくてはいけない切羽詰った状況です。
以下のような表をマクロを使って並び替えをしたいです。
A1 B1 C1・・・
A2 B2 C2
A3 B3 C3



という表を
A1
B1
C1
A2
B2
C2
A3
B3
C3



と並び替え、同様な複数のシートを1枚のシートに編集したいのですが、どのようなマクロを組んだらよいのか分かりません。
行は365行、列は24列です。
初歩的な質問で申し訳ありませんが、どなたか教えて下さい。よろしくお願い致します。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2007/07/06 10:07:49
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:kill_me No.1

回答回数8ベストアンサー獲得回数1

ポイント30pt

Sub 並べ替え()

 Dim sheet1 As Variant

 Dim sheet2 As Variant

 Dim x As Integer

 Dim y As Integer

 Dim xx As Integer

 sheet1 = ActiveSheet.Name

 Worksheets.Add

 sheet2 = ActiveSheet.Name

 Do Until y = 24

  Do Until x = 365

   Worksheets(sheet2).Range("a1").Offset(xx, 0).Value = Worksheets(sheet1).Range("a1").Offset(y, x).Value

   x = x + 1

   xx = xx + 1

  Loop

  x = 0

  y = y + 1

 Loop

End Sub

もとデータのシートがアクティブな状態で実行すれば、

これでできると思います。

ちなみに、ものすごくおせっかいだったら申し訳ないのですが、

行が365で列が24でいいんですよね??逆ではないですよね?

私のエクセルは古いため、行が256までしかないので、

心配になってしまいました…。


もし万が一逆のようでしたら、

 Do Until y = 24

  Do Until x = 365

 Do Until y = 365

  Do Until x = 24

に変更していただければ大丈夫です。

余計なお世話だったらすいません…。

お仕事が無事に終わることをお祈り申し上げます。

id:yuk1nko

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

参考にさせて頂きました。

ちなみに行が365で列が24ですが、細かなところまでお気遣い頂き、ありがとうございました。

2007/07/06 10:03:02
id:Mook No.2

回答回数1314ベストアンサー獲得回数393

ポイント60pt

列が256を越えることはないですね。

列と行を入れ替えました。


多分24時間365日だと思いますので、1列目に0~23の数値をふり、

24時間ごとに線を引いてみました。


もしこちらを先に開いたら、先の回答は開封不要です。

Const numOfRow = 365   ' --- データの列数
Const numOfCol = 24  ' --- データの行数

'------------------------------------------------------
'   1枚目に新しく集計用シートを作成し、
'   2枚目以降の numOfRow(行数) × numOfCol(列数)
'   のデータを先頭シートに1列にコピーします。
'------------------------------------------------------
Sub reOrder()
'------------------------------------------------------
    Dim dstWs As Worksheet
    Dim srcWs As Worksheet
'--- 先頭に集計用のシートを追加
    Set dstWs = Worksheets.Add(before:=Worksheets(1))
    
    Dim c As Long
    Dim r As Long
    dstWs.Range("A1").Resize(365 * 24, Worksheets.Count).Borders.Weight = xlHairline
    For r = 1 To 24 * 365
        Cells(r, "A").Value = (r - 1) Mod 24
        If r Mod 24 = 1 Then
            With Range("A" & r).Resize(24, Worksheets.Count)
            .Borders(xlEdgeTop).Weight = xlThin
            .Borders(xlEdgeBottom).Weight = xlThin
            End With
        End If
    Next
    
    For Each srcWs In Worksheets
        Application.ScreenUpdating = False
        If srcWs.Index >= 2 Then
            For r = 1 To numOfRow
                For c = 1 To numOfCol
                    dstWs.Cells((r - 1) * numOfCol + c, srcWs.Index).Value _
                        = srcWs.Cells(r, c).Value
                Next
            Next
        End If
        Application.ScreenUpdating = True
        DoEvents
    Next
End Sub
id:yuk1nko

ありがとうございます。

ご推察のとおり、24時間365日のデータです。

おかげさまで、業務をなんとか乗り切ることが出来そうです。

今回の機会に、少しはマクロを勉強してみようと思います。

今回は、本当にありがとうございました。

2007/07/06 10:05:28

質問者が未読の回答一覧

 回答者回答受取ベストアンサー回答時間
1 Mook 1314 1219 393 2007-07-05 23:58:16
2 kill_me 8 6 1 2007-07-06 00:25:13

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません