Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7全般 : Excel 2013)
Do Loopを使用した加算について
投稿日時: 18/10/12 16:35:07
投稿者: itk

はじめまして.
    
Excel VBAの初歩的な内容になると思うのですが,ご教示お願いいたします.
    
解析の結果の処理でマクロを作成したいのですが,うまくいかないです....
    
具体的な内容としては,
    
NODE FOOT-  RF1
NOTE
        
100021 1.11E-09
100042 1.40E-09
100063 1.45E-09
100084 1.50E-09
100105 1.51E-09
100126 1.52E-09
  ・
  ・
  ・
NODE FOOT-  RF1
NOTE
        
100021 1.72E-13
100042 2.29E-13
100063 2.51E-13
100084 2.73E-13
100105 2.83E-13
100126 2.89E-13
    
THE ANALYSIS HAS BEEN COMPLETED
    
という解析結果が得られます.
    
行いたい処理としては,
    
「NODE FOOT-が出てきたらFOOT-の下の値を全て足して,違うシートに出力する」
という行程を 「THE ANALYSIS HAS BEEN COMPLETED」
が出てくるまで続ける
    
というマクロを組みたいのですが,
うまくいきません.
    
現状のコードは
  
 Private Sub CommandButton1_Click()
Dim
f=1
g=1
h=1
    
Do
    
 If Sheet1.Cells(f, 2) = "NODE" And Sheet1.Cells(f, 3) = "FOOT-" And Sheet1.Cells(f, 4) = "RF1" Then
    
   Do While Cells(f + 3, 3) <> ""
     sum = sum + Cells(f + 3, 3)
      Sheet2.Cells(g, 2) = sum
      f = f + 1
      g = g + 1
    
      If Sheet1.Cells(f, 2) ="THE" And Sheet1.Cells(f, 3) = "ANALYSIS"
     And Sheet1.Cells(f, 4) = "HAS" Then
     
           Exit Do
      End If
   Loop
    
 End If
    
Loop
    
End Sub
  
となっているのですが,最初のIf分のNODE FOOT- RF1というのがDo Whileの部分のせいで検出できていない模様です.
    
ご教示よろしくお願いいたします.
 

回答
投稿日時: 18/10/12 16:54:04
投稿者: WinArrow
投稿者のウェブサイトに移動

ステップ実行して、
変数の「値」を確認してみてください。
変数の「値」によって、どちらに分岐するかも確認してみましょう。
 

回答
投稿日時: 18/10/12 16:59:45
投稿者: WinArrow
投稿者のウェブサイトに移動

推測ですが
最初の
>NODE FOOT-  RF1
が何行目のセルに格納されているかわかりませんが、
1行目でない場合、変数「f」が変わらない・・・・
 
>うまくいかない
ではなく、
実際に、どのような動きをしているのか
・・・くらいは、説明しましょう。

投稿日時: 18/10/12 18:18:31
投稿者: itk

VBA初心者なもので,説明が十分でなく申し訳ございません.
 
f = 1
g = 1
 
  Do While Cells(f + 3, 3) <> ""
     sum = sum + Cells(f + 3, 3)
      Sheet2.Cells(g, 2) = sum
      f = f + 1
      g = g + 1
 
この部分が,2つのセルの足し算を定義していることに気が付きました.
 
セルの範囲を指定して(変数で)それの足し算をするにはどのようなコードを使用したら良いのでしょうか.
 
ご指導お願いいたします.

回答
投稿日時: 18/10/12 18:56:57
投稿者: WinArrow
投稿者のウェブサイトに移動

itk さんの引用:
VBA初心者なもので,説明が十分でなく申し訳ございません.
 
f = 1
g = 1
 
  Do While Cells(f + 3, 3) <> ""
     sum = sum + Cells(f + 3, 3)
      Sheet2.Cells(g, 2) = sum
      f = f + 1
      g = g + 1
 
この部分が,2つのセルの足し算を定義していることに気が付きました.
 
セルの範囲を指定して(変数で)それの足し算をするにはどのようなコードを使用したら良いのでしょうか.
 
ご指導お願いいたします.

 
意味不明
 
 
ステップ実行は、試してみましたか?
 

回答
投稿日時: 18/10/12 19:03:42
投稿者: WinArrow
投稿者のウェブサイトに移動

↑意味不明とは
 
表のレイアウトも不十分(セルの場所とデータが整合していない)
 
2つのセルを足し算
といったって、どこに記述しているの?
 
セル範囲で加算するには、
ワークシートではSUM関数を使います。
これヒント
 

投稿日時: 18/10/12 19:06:40
投稿者: itk

勉強不足で質問した私が悪いです.
 
勉強し直します.

回答
投稿日時: 18/10/12 21:54:00
投稿者: simple

ちょっと横から失礼します。
 
■まずは、行番号、列番号が明確に分かる例を提示することです。
例えば、以下で良いですか?
 

   B列     C列      D列 
 1 NODE    FOOT-    RF1 
 2 NOTE                
 3       
 4 100021 1.11E-09 
 5 100042 1.40E-09 
 6 100063 1.45E-09 
 7 100084 1.50E-09 
 8 100105 1.51E-09 
 9 100126 1.52E-09 
    ・ 
    ・ 
21 NODE    FOOT-    RF1 
22 NOTE 
23         
24 100021 1.72E-13 
25 100042 2.29E-13 
26 100063 2.51E-13 
    ・ 
    ・ 
40  THE   ANALYSIS  HAS   BEEN   COMPLETED 
    ↑    ↑        ↑
(注)B列   C列       D列

     
■こんな方針ではどうか。
Do Whileより、For ..Nextのほうが混乱が無いように思える。
例えば、以下のような考え方ではどうですか?
 
For k= 4 to C列の最後の行まで
    If C,D,E列が THE   ANALYSIS  HAS なら
         ・合計値をSheet2に転記
         ・合計値をクリアーする
    Else 
        If C列が数値かつ <>"" 
           C列の数値を 合計値 に加算
        End If
    End If            
Next

 
■疑問点
(Q1)上の例では、4行目から39行目までを加算することになるが、
   それで良いの?
   2つのグループに分かれるように見えるが、それは合算するのね?
(Q2)転記先では、合計値が何についての合計かは、識別できるの?
   それは説明を単純にするために敢えて省略しているんですかね?
   後出しで、実は・・・というのはできるだけ避けた方がよい。

回答
投稿日時: 18/10/12 22:06:03
投稿者: simple

訂正
誤)If C,D,E列が THE ANALYSIS HAS なら
正) If B,C,D列が THE ANALYSIS HAS なら
 
もっとも、おおまかな方針を疑似コードで書いただけなので
チューニングは必要です。
例えば、
全ての行で B,C,D列をチェックするのは無駄だから
C列がANALYSISなら
だけで判定する
とかいったことです。

回答
投稿日時: 18/10/12 22:34:48
投稿者: simple

ああ、誤解していたみたいですね。
C列に FOOT- が出てくるたびに合計を吐き出すのか。
 
それなら、
・最初にC列でANALYSISが出てくる箇所をFindで検索して、最終行を確定させたうえで、
  その範囲で For .. Nextで繰り返す。
・そして、C列に FOOT- が出てくるたびに合計を吐き出していく
ということで良いと思う。

投稿日時: 18/10/12 22:48:48
投稿者: itk

アドバイスいただきありがとうございます。
 
教えていただいた方法でやってみようと思います。
 
ご指摘いただきありがとうございました。

投稿日時: 18/10/15 12:40:06
投稿者: itk

解決いたしました.ご教示いただき有難うございました.
 
今後はもっと質問内容を明確にしてから,投稿するようにします.