|
▼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
こういうコードはよく書きますけどねえ!!
|
|