[[20141026150550]] 『条件に合う配列の要素の個数』(バーバラ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『条件に合う配列の要素の個数』(バーバラ)

 久しぶりなのですが、また、教えていただきたいことがありこちらに来ました。
 A1:C9に次のようなデータがあります。

 項目A	項目B	項目C
 あ	0	25
 い	-10	30
 う	0	0
 え	0	-10
 お	0	0
 か	13	15
 き	15	15
 く	20	0

 下記のようなコードで、同シートの別の列に
 項目Bが0でない、または、項目Cが0でないデータを
 書き出します。

 c(r, 2) <> 0 Or c(r, 3) <> 0
 →これに合致する要素の個数を「この時点」で
 数える方法を教えていただけないでしょうか。

 Sub Test1()
 Dim lastrow As Long, myCnt As Long, r As Long
 Dim c As Variant

    lastrow = Range("A1").End(xlDown).Row
    c = Range("A2:C" & lastrow)
  '===========================================================>この時点
For r = 1 To lastrow - 1
    If c(r, 2) <> 0 Or c(r, 3) <> 0 Then
        myCnt = myCnt + 1
        Range("E" & myCnt + 1).Value = c(r, 2)
        Range("F" & myCnt + 1).Value = c(r, 3)
        Range("G" & myCnt + 1).Value = c(r, 1)
    End If
 Next
 End Sub

 よろしくお願いいたします。

< 使用 Excel:Excel2007、使用 OS:Windows7 >


 こんなことでいいのかな?

 Sub Test1()
 Dim lastrow As Long, myCnt As Long, r As Long, x
 Dim c As Variant
 lastrow = Range("A1").End(xlDown).Row
 With Range("A2:C" & lastrow)
    x = .Parent.Evaluate("count(if((" & .Columns(2).Address & "<>0)+(" & _
    .Columns(3).Address & "<>0)," & .Columns(2).Address & "))")
    MsgBox x
    c = .Value
 End With
  '===========================================================>この時点
For r = 1 To lastrow - 1
    If c(r, 2) <> 0 Or c(r, 3) <> 0 Then
        myCnt = myCnt + 1
        Range("E" & myCnt + 1).Value = c(r, 2)
        Range("F" & myCnt + 1).Value = c(r, 3)
        Range("G" & myCnt + 1).Value = c(r, 1)
    End If
 Next
 End Sub
(seiya) 2014/10/26(日) 19:18

 seiyaさん

 早速ご回答いただきまして、ありがとうございます。
 おかげさまで思い通りの結果になりました。
 evaluateは初めてでしたが、かなり汎用性がありそうなので、勉強してみます。

(バーバラ) 2014/10/26(日) 22:25


 seiyaさん

 evaluate以前でつまづきました。
 count(if***)の箇所はを、VBA上でない関数に置きなおすと、
 =COUNT(IF((B2:B9<>0)+(C2:C9<>0),B2:B9))となるような気がしますが
 これだと、6にならずに0になります。
 どこがおかしいか教えていただけまえせんでしょうか。
(バーバラ) 2014/10/27(月) 19:37

 セルで使うなら、配列数式なので Ctrl + Shift + Enter で確定しやらないとそうなるかも。 
(seiya) 2014/10/27(月) 20:23

 seiyaさん
 できました。ありがとうございました!
(バーバラ) 2014/10/27(月) 21:14

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.