[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『条件に合う配列の要素の個数』(バーバラ)
久しぶりなのですが、また、教えていただきたいことがありこちらに来ました。 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.