- 締切済み
EXCELの日付を基準に合わせて移動させる
A列 B列 C列 D列 E列 2009/3/2 2009/3/3 11630 2009/3/4 11700 2009/3/3 2009/3/5 11965 2009/3/5 12100 2009/3/4 2009/3/6 11760 2009/3/9 11740 2009/3/5 2009/3/9 11695 2009/3/10 11590 2009/3/6 2009/3/10 11565 2009/3/11 11600 2009/3/9 2009/3/11 11595 2009/3/12 11610 2009/3/10 2009/3/12 11595 2009/3/13 11700 2009/3/11 2009/3/13 11750 2009/3/12 2009/3/13 とデータがあったとして、A列の日付を基準にB日付C価格,D日付E価格を 2009/3/2 2009/3/3 2009/3/3 11630 2009/3/4 2009/3/4 11700 2009/3/5 2009/3/5 11965 2009/3/5 12100 2009/3/6 2009/3/6 11760 2009/3/9 2009/3/9 11695 2009/3/9 11740 2009/3/10 2009/3/10 11565 2009/3/10 11590 2009/3/11 2009/3/11 11595 2009/3/11 11600 2009/3/12 2009/3/12 11595 2009/3/12 11610 2009/3/13 2009/3/13 11750 2009/3/13 11700 このように表示させたいのですが、 手作業でなく何かカンタンにできる方法ありませんでしょうか? お忙しいところすみませんが、お時間あるかた お力添えよろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- hige_082
- ベストアンサー率50% (379/747)
#2コードを少し見直しました '標準モジュールへ Sub test1() Dim myData As Variant Dim i As Long, ii As Long Dim x As Integer, y As Integer, z As Integer myData = Range("a2", "o" & Cells(Rows.Count, 1).End(xlUp).Row) Range("a2", "o" & Cells(Rows.Count, 1).End(xlUp).Row).ClearContents Range("a2", "a" & UBound(myData, 1) + 1) = myData For y = 2 To 9 Step 7 For i = 1 To UBound(myData, 1) For ii = 1 To UBound(myData, 1) If myData(ii, y) = "" Then Exit For If myData(i, 1) = myData(ii, y) Then z = IIf(Cells(i + 1, 2) = "", 2, 9) For x = 0 To 6 Cells(i + 1, z).Offset(0, x).Value = myData(ii, y + x) Next x Exit For End If Next ii Next i Next y End Sub
- hige_082
- ベストアンサー率50% (379/747)
#1の補足読みました 取り敢えず、#1のコードを一部変更してみました '標準モジュールへ Sub test() Dim myData As Variant Dim i As Long, ii As Long Dim x As Long myData = Range("a1", "o" & Cells(Rows.Count, 1).End(xlUp).Row) Range("a2", "o" & Cells(Rows.Count, 1).End(xlUp).Row).ClearContents Range("a2", "a" & UBound(myData, 1)) = myData For i = 2 To UBound(myData, 1) For ii = 2 To UBound(myData, 1) If myData(ii, 2) = "" Then Exit For If myData(i, 1) = myData(ii, 2) Then For x = 0 To 6 Cells(i, 2).Offset(0, x).Value = myData(ii, 2 + x) Next x Exit For End If Next ii Next i For i = 1 To UBound(myData, 1) For ii = 1 To UBound(myData, 1) If myData(ii, 9) = "" Then Exit For If myData(i, 1) = myData(ii, 9) Then If Cells(i, 2) = "" Then For x = 0 To 6 Cells(i, 2).Offset(0, x).Value = myData(ii, 9 + x) Next x Else For x = 0 To 6 Cells(i, 9).Offset(0, x).Value = myData(ii, 9 + x) Next x End If Exit For End If Next ii Next i End Sub 一応、補足のデータでテストはうまく行きましたが、どうでしょう
- hige_082
- ベストアンサー率50% (379/747)
>手作業でなく何かカンタンにできる方法ありませんでしょうか? マクロでよいなら あまり効率の良いコードではありませんが、かんべん '標準モジュールへ Sub test() Dim myData As Variant Dim i As Long, ii As Long myData = Range("a1", "e" & Cells(Rows.Count, 1).End(xlUp).Row) Range("a1", "e" & Cells(Rows.Count, 1).End(xlUp).Row).ClearContents Range("a1", "a" & UBound(myData, 1)) = myData For i = 1 To UBound(myData, 1) For ii = 1 To UBound(myData, 1) If myData(ii, 2) = "" Then Exit For If myData(i, 1) = myData(ii, 2) Then Cells(i, 2).Value = myData(ii, 2) Cells(i, 3).Value = myData(ii, 3) Exit For End If Next ii Next i For i = 1 To UBound(myData, 1) For ii = 1 To UBound(myData, 1) If myData(ii, 4) = "" Then Exit For If myData(i, 1) = myData(ii, 4) Then If Cells(i, 2) = "" Then Cells(i, 2).Value = myData(ii, 4) Cells(i, 3).Value = myData(ii, 5) Else Cells(i, 4).Value = myData(ii, 4) Cells(i, 5).Value = myData(ii, 5) End If Exit For End If Next ii Next i End Sub 参考まで
お礼
マクロでこんなことできるんですね~ 早速のご返答ありがとうございます!! 先ほどの例ですが、実はだいぶ簡略化して書いており、 基準になる日付と2か月分の日付(B列、D列) 価格部分が2か月分の1列目のみしか書いていませんでしたが、 実際は A列(基準の日付)、B列(日付1)、C,D,E,F,G,H列(価格1)、I列(日付2)、J,K,L,M,N,O列(価格2) 2009/2/12 2009/2/18 13000 13110 12870 12870 142 164 2009/3/5 12620 12620 12245 12245 126 164 2009/2/13 2009/2/19 12310 12525 12245 12245 92 144 2009/3/6 12200 12250 12025 12050 204 156 2009/2/16 2009/2/20 12000 12165 11880 11900 200 200 2009/3/9 12050 12200 11950 11965 112 166 2009/2/17 2009/2/23 12080 12350 11715 12335 174 168 2009/3/10 11980 12295 11470 11950 954 232 2009/2/18 2009/2/24 12100 12100 11850 12100 72 144 2009/3/11 11950 12150 11950 11970 200 220 2009/2/19 2009/2/25 12500 12500 12350 12390 78 116 2009/3/12 11955 11955 11645 11750 426 262 2009/2/20 2009/2/26 12390 12635 12340 12440 56 118 2009/3/13 12050 12050 11810 11810 174 228 2009/2/23 2009/2/27 12505 12600 12400 12400 78 166 2009/2/24 2009/3/2 12285 12285 12100 12140 26 174 2009/2/25 2009/3/3 11950 12185 11950 12165 26 180 2009/2/26 2009/3/4 12300 12300 12130 12265 32 182 2009/2/27 2009/3/5 12330 12450 12260 12275 56 216 2009/3/2 2009/3/6 12310 12310 12000 12145 32 228 2009/3/3 2009/3/9 12150 12250 12100 12100 54 264 2009/3/4 2009/3/10 12050 12170 12020 12090 50 286 2009/3/5 2009/3/11 12200 12220 12050 12050 74 318 2009/3/6 2009/3/12 12000 12025 11850 11940 134 386 2009/3/9 2009/3/13 12075 12080 11950 12000 58 384 2009/3/10 2009/3/11 2009/3/12 2009/3/13 のようになっております。 このように長い場合でも先ほどのマクロで一発でできるのでしょうか? もしできるのであれば、大変お手数であると思いますが、 非常に助かります。 よろしくお願いいたしますm(_ _)m
お礼
助かりました!ありがとうございます。