出産前後の痔にはご注意!

A        B   C
200N1060056  8  2%
200N1080056  2  1%
200N1180056  39  10%
200N1380056  25  6%
200N1381056  318 81%
         392 100%
20261040056  20
20261060056  0
20261180056  216
20261181056  506
20261381056  2695
         3437
20271020056  25
20271040056  56
20271160056  102
20271180056  876
20271181056  235
20271200056  693
        1987


いつもお世話になります。
上表のように、A列に項目があり、B列に数値があります。
A列が空白の行のB列には、B列の数値の合計が入力されています。
A列の空白行と空白行に挟まれたまとまりに対し、C列にB列の数値の合計を100%とした比率を入力していくマクロを組みたいのですが、よい記述方法が浮かびません。A列の行は可変で最終行はその時によって変わります。何か良い記述方法がありましたら、アドバイスお願いします。
※A列はコードのような数字とアルファベットの羅列で意味はありませんが、ひとまとまりの最初の4文字は全て同じです。

質問者からの補足コメント

  • 補足: EXCELのバージョンは2010です。

      補足日時:2018/03/20 23:38

A 回答 (2件)

こんにちは!



元データの配置はすでにお示し通りになっているという前提で・・・

1行目は項目行でデータは2行目以降にあるとします。
一例です。

Sub Sample1()
Dim i As Long, k As Long
Dim lastRow As Long, myRng As Range
lastRow = Cells(Rows.Count, "B").End(xlUp).Row
Range("C:C").Style = "Percent" '//←C列が%表示になっていれば不要★//
For i = 2 To lastRow
Set myRng = Cells(i, "A").End(xlDown).Offset(1, 1)
For k = i To myRng.Row
Cells(k, "C") = Cells(k, "B") / myRng
Next k
i = myRng.Row
Next i
End Sub

こんな感じではどうでしょうか?m(_ _)m
    • good
    • 1
この回答へのお礼

ありがとうございます!思い通りの結果になりました!空白から空白までの行数をどう認識させるかで手こずっていたのですが、いとも簡単に解決していただき感謝です。

お礼日時:2018/03/21 14:35

まずはシンプルに、こんなかんじでしょうか。


ちなみに、最終行が合計(A列が空白)でない場合は、エラーになります。

Sub sample()
Dim i As Long
Dim ttl As Variant
For i = Cells(Rows.Count, "B").End(xlUp).Row To 1 Step -1
If Cells(i, "A").Value = "" Then ttl = Cells(i, "B").Value
Cells(i, "C").Value = Cells(i, "B").Value / ttl
Next i
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。構文は問題ないように見えるのに、実際に動かしてみると、「オーバーフローしました(エラー6)」と出ました。最終行も合計(A列が空白)になっているのですが。いずれにしても考えてくださりありがとうございます。勉強になりました。自分ももっと勉強します!

お礼日時:2018/03/21 14:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング