アプリ版:「スタンプのみでお礼する」機能のリリースについて

次のようなデータがあります。
    A  B
1  200
2 -350
3  500
4 -260
5  ・
6  ・
実際には600ほどあります。
次のように0>大きいものと0<ものの数をだすためにIF分を使ったのですが時間がかかってしょうがないのですがもっと早くやる方法はありますか教えてくださいよろしくお願いします。
実際に使っているものです。
抜粋したので少し構文が違うかもしれませんが要するに勝率を出したいのです。
Dim a, b, Sr As Double
Cau = 7
For x = 1 To 5
shi = "あきない0"
shi = shi & x
r = Sheets(shi).Range("A65536").End(xlUp).Row
For i = 90 To r
Sheets("MAIN").Cells(Cau, 9) = "計算中"
Sr = Sheets(shi).Cells(i, 10).Value
If Sr >= 0 Then
'Sheets("MAIN").Range("G6") = Sr
'Sheets("MAIN").Range("G7") = a
a = a + 1
Else
b = b + 1
'Sheets("MAIN").Range("H6") = Sr
'Sheets("MAIN").Range("H7") = b
End If
Sheets("MAIN").Cells(Cau, 9) = ""
Next i
If shi = "あきない01" Then
Sheets("MAIN").Range("Y9") = a
Sheets("MAIN").Range("Y10") = b
Sheets("MAIN").Range("I11") = a / (a + b)
End If
省略-------------------------------------繰り返し
a = 0
b = 0
Cau = Cau + 5
Next x

A 回答 (3件)

>VBAではどのコマンドを使えばできますか?


xls88さんもおっしゃるようにVBA上でワークシート関数が使えます。
Sub Macro1()
Range("Y9").Value = WorksheetFunction.CountIf(Sheets("あきない01").Range("A90:A65536"), ">=0")
End Sub
とかです。
但し、VBAで結果をえるには、ボタンをクリックするなど何らかのイベントが必要ですよね。
シート上に直接、関数を入れておけば常に計算結果が更新されますので
便利でしょう。
    • good
    • 0
この回答へのお礼

できました!! 今までは計算に4-5分かかっていました即計算ができますこれで便利に使わせてもらえます。
ありがとうございました。

お礼日時:2009/03/08 17:06

VBAで使用できるワークシート関数一覧


http://www.relief.jp/itnote/archives/001974.php
    • good
    • 0
この回答へのお礼

参考になりましたありがとうございました。

お礼日時:2009/03/08 17:02

これは、VBAの勉強ということでしょうか。


実践ということであれば、関数の方が便利で簡単で早いと思います。
引継ぎなども簡単でしょう。
シート MAINの Y9セルに シート名 あきない01 の90行以下の範囲で、0以上値の数
であれば =COUNTIF(あきない01!A90:A65536,">=0")
0未満は =COUNTIF(あきない01!A90:A65536,"<0")
I11セルは =Y9/(Y9+Y10) ですみませんか。

VBAの勉強だとしたら、コードでどの様な処理の流れになっているかフロー図にしてみると良いです。
難しく考えずに
For x = 1 To 5  Xはシート名?
For i = 90 To r 90行以下の行で繰り返し
If Sr >= 0 Then
計算の処理
EndIf
Next i
If shi = "あきない01" Then
シート名が あきない0 なので何も処理しない
End If
これはまったく無駄な処理ですよね。

この回答への補足

早々、ありがとうございます。
関数では教えていただいたと通りやってみて早く計算ができました。
VBAではどのコマンドを使えばできますか?

補足日時:2009/03/08 13:44
    • good
    • 0

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