- ベストアンサー
マクロを使用して表の並びを変更する方法
- 縦に並んでいる表をマクロを使用して横に並び替える方法について説明します。
- 日付と項目が並んでいる表を横に並び替えるためには、マクロを組む必要があります。
- 日付ごとに項目数が異なる場合は、マクロ内で条件分岐を行い、処理を行う必要があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
すんごい不細工ですが突貫で書いてみました。いちおう動作確認済みです。 Sub aaa() Dim i As Long, Strow As Long, Edrow As Long Dim LstCol As Long, LstRow As Long Dim Rng As Range i = 1 Do While Cells(i, 1).Value <> "" If TypeName(Cells(i, 1).Value) = "Date" Then Cells(i, 3).Value = 1 End If i = i + 1 Loop LstRow = Cells(Rows.Count, 1).End(xlUp).Row Cells(LstRow + 1, 3).Value = 1 Do Strow = Cells(1, 3).End(xlDown).Row Edrow = Cells(Strow, 3).End(xlDown).Row - 1 Set Rng = Range(Cells(Strow, 1), Cells(Edrow, 3)) LstCol = Cells(1, Columns.Count).End(xlToLeft).Column + 1 Rng.Cut Cells(1, LstCol) If Cells(Rows.Count, 1).End(xlUp).Row <> LstRow Then Exit Do Loop LstCol = Cells(1, Columns.Count).End(xlToLeft).Column For i = LstCol To 3 Step -1 If Cells(1, i).Value = 1 Then Columns(i).Delete End If Next i Set Rng = Nothing End Sub 3列目に日付のフラグを立ててます。 それで上から順に切り取り、貼り付けを繰り返す、という手作業イメージを イメージした動きで。
その他の回答 (1)
- CC_T
- ベストアンサー率47% (1038/2202)
ベタに処理するなら、別のシートへのコピーで処理していけば良いでしょう。 A列に日付が入ったセルのB列は空白でしょうから、各日付ごとに分けるのにそれが利用できるでしょうね。 別シートへの書き込みを、 sheet2!cells(YY,XX)=sheet1cells(Y,X) としてやるような形。 データのシートでB列を上から見ていって、空白ならA列が日付かを判定させる。 ※例えば日付欄が日付形式のデータならその値が2012/4/1の41000以上かどうか、などで判定出来る。 A列が日付ならXX=XX+2、YY=1。日付でないならYY=YY+1。 元データ行のA列をセル(YY,XX)に入れ、B列のセル内容をセル(XX+1,YY)に書き込む。 以上、A列が空白でない限りYを1つづつ増やしながら繰り返す。 要は、A列が日付だったら次にA列に日付がくるまでを下に入れていき、A列が日付だったら記入列を右に2列ずらして1行目に戻って続ける、ということです。
お礼
すぐのご回答本当にありがとうございます!! CC_Tさんのおっしゃる通りSheet2に横の表として完成させることがベストです!! なんとなくおっしゃっている事は分かるのですが、 本当に初心者なもので実際にどのような式や VBAを入力すればいいのか。。 申し訳ございません。 可能であればもう少し具体的にご説明いただけないでしょうか><?
お礼
すぐのご回答本当にありがとうございます! うまくできそうです(連桁付き8分音符)