[[20160424204409]] 『範囲ごと並び替えられますか』(pinkfloyd) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『範囲ごと並び替えられますか』(pinkfloyd)

1週間分のデータが A1:D10 に入っています。
2週目は E1:H10 3週間目 I1:L10 4週間目M1:P10。
以上で1か月のデータです。

翌月以降、A11、A21、A31・・・から同様にデータ入力されています。

1か月のデータ週ごとに列方向に並んでいるため、年単位など様々なデータ集計で効率が悪くなっています。

すべて縦方向に並べ替える方法はありますでしょうか。
A1:D10 1月1週
A11:D20 1月2週
A21:D30 1月3週
A31:D40 1月4週
A41:D50 2月1週
   ・
   ・
   ・
という感じです。
因みに、計算式は調べればほとんど可能ですが、マクロやVBAなどは知識がありません。
私のレベルではできることにかなり制約が出てしまうとは思いますが、多少時間がかかっても少しでも効率的に並べ替える方法がありましたらよろしくお願いします。

< 使用 Excel:Excel2013、使用 OS:windows10 >


 >1週間分のデータが A1:D10 に入っています。 
 >2週目は E1:H10 3週間目 I1:L10 4週間目M1:P10。 
 >以上で1か月のデータです。 

 ざっくりと説明されていますが、
 4週x12箇月=48週

 実際は52週ありますよね?

 もうちょっと厳密な説明を頂けませんか?
 (半端になった部分は、何処にどう存在しているんですか?)

 それとも、「週目」は言葉の綾で、要するに 

 「ひと月分が、10行4列で横に4つの塊で存在している」 

 と認識すればいいのですか? 

(半平太) 2016/04/24(日) 22:09


 「ひと月分が、10行4列で横に4つの塊で存在している」と認識すればいい場合

 Sheet1からSheet2へ転記するマクロ

 Sub ReArange()
     Dim Mon As Long, colNum As Long
     Dim MonOut As Long

     MonOut = 1

     Application.ScreenUpdating = False

         For Mon = 1 To 12 * 10 Step 10
             For colNum = 1 To 4 * 4 Step 4
                 Sheets("Sheet1").Cells(Mon, colNum).Resize(10, 4).Copy _
                 Sheets("Sheet2").Cells(MonOut, 1)
                 MonOut = MonOut + 10
             Next colNum
         Next

     Application.ScreenUpdating = True
 End Sub

(半平太) 2016/04/24(日) 22:44


説明下手で申し訳ありません。

現状は

       第1週  第2週  第3週  第4週
1月  A1:D10   E1:H10   I1:L10   M1:P10
2月  A11:D20  E11:H20  I11:L20  M11:P20
3月  A21:D30  E21:H30  I21:L30  M21:P30
4月  A31:D40  E31:H40  I31:L40  M31:P40
 ・      ・    ・    ・    ・
 ・   ・    ・    ・    ・
 ・    ・    ・    ・    ・
1週間分の種々のデータがA1:D10以下の範囲にA〜Dに項目別にデータが入力されています。

これをすべて縦方向に並べたいと考えています。
1月 第1週 A1:D10

     第2週  A11:D20
   第3週  A21:D30
    第4週  A31:D40
2月 第1週  A41:D50

何とか理解していただけるでしょうか。
数年分のデータがあり集計や分析するのに縦で並べてしまったほうが利用しやすいと考えています。
やはりマクロを使うしかないでしょうか。
もし可能であればもう少し手間がかかっても方法はありませんでしょうか。さすがに切り取り・貼り付けの繰り返し作業はきついですが。
よろしくお願いします。

(pinkfloyd) 2016/04/24(日) 23:29


 こんばんわ。

 半平太さんのコードをモジュールに貼付るだけで、すぐに実行出来て簡単なんですけどねぇ。

 どうしてもマクロが難しいと言うなら、データが全て値で計算式とか無いのであれば、
 Sheet2に以下の式を入れて、コピー値貼付けで値に変換して下さい。
 参照先のシート名は違ってたら変更して下さい。

 一応簡単には確認しましたが、必ず元ブックのバックアップを取ってから実行して下さい。

 A1=INDEX(Sheet1!$A$1:$P$10000,INT((ROW()-1)/40)*10+MOD(ROW()-1,10)+1,INT((ROW()-1)/10)*4+COLUMN(A1)-INT((ROW()-1)/40)*16)
 D列と下に必要数フィルコピー

(sy) 2016/04/25(月) 00:26


syさん、返事遅くなりました。急いで帰宅して早速やってみました。
結果は、うまくいきました!
半平太さんに指導していただいたマクロを使えば、比でないくらい早く処理できるのでしょうが、自分の今の能力であれば満足です。
とにかく本当に助かりました。感謝しています。

半平太さん、マクロ使えなくて申し訳ありませんでした。
今回計算式でやったものをマクロでもできるよう何とか時間を見つけて勉強します。
今回ご指導いただいた内容はしっかり残しておきます。
ありがとうございました。

(pinkfloyd) 2016/04/25(月) 22:00


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.