Excel VBA質問箱 IV

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

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


1232 / 13645 ツリー ←次へ | 前へ→

【75526】集計 しろ 14/5/9(金) 19:49 質問[未読]
【75528】Re:集計 γ 14/5/9(金) 22:20 発言[未読]
【75533】Re:集計 しろ 14/5/10(土) 18:16 質問[未読]
【75534】Re:集計 γ 14/5/10(土) 18:41 発言[未読]
【75535】Re:集計 γ 14/5/10(土) 19:35 発言[未読]
【75537】Re:集計 γ 14/5/10(土) 23:29 発言[未読]
【75536】Re:集計 kanabun 14/5/10(土) 19:59 発言[未読]

【75526】集計
質問  しろ  - 14/5/9(金) 19:49 -

引用なし
パスワード
   A列  B列  C列
0    1    1
1    0    0
2    25    1
5    2    1
15    0    1
・    ・   ・
・    ・   ・ 
・    ・   ・

上記の例で、A列で0以外かつB列の0以外かつC列の1
となる件数を計算するコードを書きたいのですが、どう
すればよいのでしょうか。

A・B列の数値はランダムで、C列は0か1のみ。

よろしくお願いします。

【75528】Re:集計
発言  γ  - 14/5/9(金) 22:20 -

引用なし
パスワード
   ▼しろ さん:
>上記の例で、A列で0以外かつB列の0以外かつC列の1
>となる件数を計算するコードを書きたいのですが、どう
>すればよいのでしょうか。

こういう話は一般機能でよく出てきますね。
=SUM((A1:A5<>0)*(B1:B5<>0)*(C1:C5=1)) としてCtrl + Shift + Enter
とかなんとか。

コードでどうしてもということなら、
・If文で条件判定して、条件にあったら
   myCount + myCount + 1 などとして回数をカウントします。
・以上を、各行で繰り返します。
といったようなことになると思うのですが、
どのあたりに詰まっていますか?
お知らせ下さい。

【75533】Re:集計
質問  しろ  - 14/5/10(土) 18:16 -

引用なし
パスワード
   ▼γ さん:
ありがとうございます。
データ数は6万件を越え、毎回の集計の度に件数は変動します。
データは自社システムから吐き出していて、数値は文字列になっています。
関数を使うと結果が0になるので、コードを使って結果を出したいのです。

【75534】Re:集計
発言  γ  - 14/5/10(土) 18:41 -

引用なし
パスワード
   ▼しろ さん:
>データ数は6万件を越え、毎回の集計の度に件数は変動します。
>データは自社システムから吐き出していて、数値は文字列になっています。
>関数を使うと結果が0になるので、コードを使って結果を出したいのです。
ああ、そうなんですか。追加情報ですね。

それなら、配列に取り込んだうえで演算すると早くなるかもしれません。
同じ考え方で繰り返し処理をしてはどうでしょうか。

どこまで出来てますか? 途中でも結構ですから示されては?
(配列は使っていなくてOKです。)

> myCount + myCount + 1
は myCount = myCount + 1
の間違いでした。

【75535】Re:集計
発言  γ  - 14/5/10(土) 19:35 -

引用なし
パスワード
   もしくは、ワークシート関数DCOUNTを使うかですね。

  A    B    C    D    E    F    G
1 aaa   bbb   ccc       aaa   bbb   ccc
2 0    1    1        <>0   <>0   1
3 1    0    0               
4 2    25   1               
5 5    2    1               
6 15   0    1               

Sub test()
  Dim myRange As Range
  Set myRange = Range("A1").CurrentRegion
  MsgBox Application.DCount(myRange, , Range("E1:G2"))
End Sub

【75536】Re:集計
発言  kanabun  - 14/5/10(土) 19:59 -

引用なし
パスワード
   ▼しろ さん:

> 数値は文字列になっています。

Sub test2()
  Dim v(), i As Long, k As Long
  
  v() = Range("A1").CurrentRegion
  For i = 1 To UBound(v)
    If v(i, 3) = "1" Then
     If v(i, 2) <> "0" Then
      If v(i, 1) <> "0" Then
        k = k + 1
      End If
     End If
    End If
  Next
  MsgBox "Count=" & k
End Sub

【75537】Re:集計
発言  γ  - 14/5/10(土) 23:29 -

引用なし
パスワード
   kanabunさんのご指摘通り、確認もれです。
書式だけ文字列に変更してました。

これでは上手くいきませんね。
フィルタオプションで実際に抽出するのはできましたが、
DCOUNTで文字列を扱うのは難しいですね。

kanabunさんの案で行ってください。

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