Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


8348 / 13644 ツリー ←次へ | 前へ→

【33412】階層チェック&SUM計算 こば。 06/1/11(水) 15:07 質問[未読]
【33422】Re:階層チェック&SUM計算 inoue 06/1/11(水) 17:15 発言[未読]
【33812】Re:階層チェック&SUM計算 こば。 06/1/21(土) 14:41 お礼[未読]
【33848】Re:階層チェック&SUM計算 こば。 06/1/22(日) 17:52 質問[未読]

【33412】階層チェック&SUM計算
質問  こば。  - 06/1/11(水) 15:07 -

引用なし
パスワード
   A  B
---------
X1 
1
2
3 100
4  10
4  20
4  30
4  40
3  30
4  15
4  15
2
3  60
4  10
4  20
4  30
X1
1
2
3 700
4 100
4 100
4 100
4 200
4 200
3  30
4  10
4  20
2
3  20
4  10
4  10

上記のようにA列にレベル、B列に金額が入力されています。
レベルX1にくると新しい合計計算処理を行なう。

マクロ実行時に、
A列の「2」の部分に「3」の合計式
C3=SUM(B3,B9),C12=SUM(B13),C19=SUM(B20,B26),C29=SUM(A30)を
A列の「1」の部分に「2」の合計式
C2=SUM(B3,B12),C18=SUM(B19,B29)を
それぞれ自動で入れたい。

どのような方法で実現すれば良いか教えていただけますでしょうか。
SUMIF関数でセルの最終箇所までを範囲指定し、それぞれのレベルのときに
金額合計を行なう処理を考えておりましたが、行き詰まってしまいました。
Do Until文で次のレベル2になったら新しく計算式を代入するという処理で
悩んでます。
他に効率が良い方法がございましたら教えていただけますでしょうか。

//////////////////////////////////////////////// 一部抜粋

Selection.End(xlDown).Select
encel1 = ActiveCell.Address
cend = Mid(encel1, 4)

'レベル2のときの合計式
If Cells(cell, 1).value = 2 Then
  Cells(cell, 3) = "=SUMIF(E1:E" & cend & ",3,H1:H" & cend & ")"
end sub

/////////////////////////////////////////////////          

【33422】Re:階層チェック&SUM計算
発言  inoue E-MAILWEB  - 06/1/11(水) 17:15 -

引用なし
パスワード
   各階層のブレークを判断させれば良いようです。
[例]
Sub TEST()
Const cnsX1 = "X1"
Dim GYO As Long
Dim GYOMAX As Long
Dim GYO1 As Long
Dim GYO2 As Long
Dim GYO3 As Long
Dim GYO4 As Long
Dim strFormula As String
GYOMAX = Range("A65536").End(xlUp).Row
GYO = 1
Do While GYO <= GYOMAX
  If Cells(GYO, 1).Value = cnsX1 Then GYO = GYO + 1
  GYO = GYO + 1
  GYO1 = GYO
  Do While ((Cells(GYO, 1).Value > Cells(GYO1 - 1, 1).Value) And _
       (Cells(GYO, 1).Value <> cnsX1) And _
       (GYO <= GYOMAX))
    GYO = GYO + 1
    GYO2 = GYO
    Do While ((Cells(GYO, 1).Value > Cells(GYO2 - 1, 1).Value) And _
         (Cells(GYO, 1).Value <> cnsX1) And _
         (GYO <= GYOMAX))
      GYO = GYO + 1
      GYO3 = GYO
      Do While ((Cells(GYO, 1).Value > Cells(GYO3 - 1, 1).Value) And _
           (Cells(GYO, 1).Value <> cnsX1) And _
           (GYO <= GYOMAX))
        GYO4 = GYO
        GYO = GYO + 1
      Loop
      strFormula = "=SUMIF(R" & GYO3 & "C1:R" & GYO4 & "C1,4,R" & GYO3 & "C:R" & GYO4 & "C)"
      Cells(GYO3 - 1, 2).FormulaR1C1 = strFormula
    Loop
    strFormula = "=SUMIF(R" & GYO2 & "C1:R" & GYO4 & "C1,3,R" & GYO2 & "C:R" & GYO4 & "C)"
    Cells(GYO2 - 1, 2).FormulaR1C1 = strFormula
  Loop
  strFormula = "=SUMIF(R" & GYO1 & "C1:R" & GYO4 & "C1,2,R" & GYO1 & "C:R" & GYO4 & "C)"
  Cells(GYO1 - 1, 2).FormulaR1C1 = strFormula
Loop
End Sub

【33812】Re:階層チェック&SUM計算
お礼  こば。  - 06/1/21(土) 14:41 -

引用なし
パスワード
   ありがとうございました!
こんなに早く回答が頂けるとは思いませんでびっくりしました。
無事、解決しました。

【33848】Re:階層チェック&SUM計算
質問  こば。  - 06/1/22(日) 17:52 -

引用なし
パスワード
   X1    
1
2
3 100
4  10
4  20
4  30
4  40
3  30
4  15
4  15
2
3  60
4  10
4  20
4  30
1
2 
3  30
4  20
4  10
4  20
     a
     b
     c
     d
     e
     f
     g
     h
X1
1
2
3 700
4 100
4 100
4 100
4 200
4 200
3  30
4  10
4  20
2
3  20
4  10
4  10
     a
     b
     c
     d
     e
     f
     g
     h

     i

**************************************************

ご質問させていただきます。

Sub TEST()の中で判定は可能でしょうか?

C列の文字を検索し、a〜iのアルファベット小文字
に対する計算式をB列に入れたい。
ただし、アルファベットが入っているセルの
A列にはレベル表記はない。

a=レベルX1ごとのレベル1の合計
b=b
c=b
d=a+c
e=e
f=d+e
g=g
h=f+h
i=レベルX1それぞれのaの合計

8348 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free