| 
    
     |  | ▼nadatani さん: 
 こんばんは。返事が遅れました(ちょっと、体調がわるくって)
 土日で何とか回復しそうです。
 
 
 >ご指摘いただいたコードで動かさしていただきました。
 >いつも大きな数字をとらえるようです。
 >マイナスが発生しないのですが・・・
 
 セルA7から、データが入っているのですよね?
 
 そして、対応するD列に 「ABAB」 が入っていたら+-の符号を付け替えて計算するのですよね?
 
 Msgboxの数式には ちょっと誤りがありましたが、結果は正常に計算されますが・・・。
 
 再度、新規ブックにて(あくまでも新規ブックです)。
 
 標準モジュールに
 
 Sub 総合計1()
 Dim ans As Variant
 Dim rng As Range
 Call mk_sample
 MsgBox "サンプルデータ作成"
 Set rng = Range(Cells(7, 1), Cells(Rows.Count, 1).End(xlUp))
 With rng
 MsgBox "=if(offset(" & .Address & ",0,3)=""ABAB"",-1*(" & .Address & ")," & _
 .Address & ")" & vbCrLf & "こんな配列数式を評価します"
 
 ans = Evaluate("=if(offset(" & .Address & ",0,3)=""ABAB"",-1*(" & .Address & ")," & _
 .Address & ")")
 End With
 If rng.Row > 5 Then 'この5の意味がわかりませんが、そのままにしておきます
 Range("F4").Value = Application.Sum(ans)
 MsgBox "総合計は" & Format(Range("F4").Value, "#,##0")
 End If
 
 End Sub
 Sub mk_sample()
 Range("a7:a20").Value = Application.Transpose(Array(1, 2, 3, _
 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14))
 Range("d20").Value = "ABAB"
 End Sub
 
 
 として、mainを実行してみてください。
 
 サンプルデータもコードで作成していますから、真っ白なシートを
 アクティブにして実行してみてください。
 
 セルA7からA20に数値が表示され D20に ABAB
 
 というサンプルデータにて計算します。
 
 結果は 77と表示されるはずですが、いかがですか?
 
 正しく表示されたら、前回正しく計算されなかった理由を探ってみてください。
 
 尚、
 
 >If rng.Row > 5 Then 'この5の意味がわかりませんが、そのままにしておきます
 
 は、計算データは、A7からですよね?
 だとしたら、
 
 私なら、
 
 If rng.Row > 6 Then
 
 こういうコードはよく書きますけどねえ!!
 
 |  |