[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBA「160まで達したら右のセルへ」』(QPちゃん)
はじめまして。
ExcelVBAについて質問です。
D列の6行目から数字が入っています。最終行は変わる事があります。
D列を参照し、F列6行目から順にコピーしていくマクロを教えてください。
※ただし、1列辺り160までで、F列が160までいったらG列へ余りの数を入力され160までいったらまた次の列へ入力されるようにしたいです。
それの繰り返し処理をD列の最終行まで行う。
ABC D E F G H I J
1
2
3
4
5
6 40 40
7 40 40
8 40 40
9 60 40 20
10 60 60
11 80 80
12 200 160 40
13 35 35
14 16 16
15 90 69 21
マクロでF6からJ15までをボタン一つで自動入力されるようにしたいです。
説明不足な点があるかもしれませんが
宜しくおねがいします。
< 使用 Excel:Excel2007、使用 OS:Windows7 >
自分が見ても、美しくないコードですが、とりあえず。 (もっと整理してからアップすべきでしょうけど。これから見直します)
Sub Test() Const limit As Long = 160 Dim pos As Range Dim tot As Long Dim c As Range Dim n As Long
Set pos = Range("F5")
For Each c In Range("D6", Range("D" & Rows.Count).End(xlUp)) n = c.Value
Do While n > 0
If tot + n > limit Then Set pos = pos.Offset(1) pos.Value = limit - tot n = n - pos.Value tot = 0 Set pos = pos.Offset(-1, 1) ElseIf tot + n = limit Then Set pos = pos.Offset(1) pos.Value = n n = n - pos.Value tot = tot + n tot = 0 Set pos = pos.Offset(-1, 1) Else Set pos = pos.Offset(1) pos.Value = n tot = tot + n n = n - pos.Value End If Loop Next
End Sub
(β) 2016/05/16(月) 19:47
(マナ) 2016/05/16(月) 19:51
Sub test() Dim i As Long Dim b As Long Dim n As Long Dim x As Long
For i = 6 To Cells(Rows.Count, "B").End(xlUp).Row b = Cells(i, "B").Value Do n = WorksheetFunction.Sum(Columns("F").Offset(, x)) If n + b < 160 Then Cells(i, "F").Offset(, x).Value = b Exit Do Else Cells(i, "F").Offset(, x).Value = 160 - n b = b - (160 - n) x = x + 1 End If Loop While b > 0 Next
End Sub
(マナ) 2016/05/16(月) 19:55
(マナ) 2016/05/16(月) 20:02
さすがマナさん。 頭の中が、ぐちゃぐちゃのβとは大違いですね!
(β) 2016/05/16(月) 20:21
ありがとうございます。
大変、助かりました。
(QPちゃん) 2016/05/17(火) 12:29
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.