|
こんにちは。いつもお世話になります。
久々に質問させていただきます。
ユーザー定義関数についての質問です。よろしくお願いします。
アンケート入力・集計をしています。
列:質問項目
行:回答者(1行1件、430件)
各質問の回答項目には連番がふってあって、回答されている項目の数字を入力するようになっています。不明・無回答は「N」と入力。
一つの質問に、複数回答も多々あり、その場合は、1つのセルに、カンマ区切りで、複数の数字が入力されています。
集計は、質問項目毎に各回答項目がいくつ選択されているかカウントするものです。
そのカウント用に、ユーザー定義関数を作りました。
が・・・問題が発生してしまいました。
以下は作ったユーザー定義関数です。
'==============================================
Function mySub(argR1 As Range, argR2 As Range) As Long
'argR1 : 数えたいカテゴリの数字あるいは「N」
'argR2 : カウントする範囲
Dim strR1Value As String
Dim buf, e1, e2, e3
Dim lngA As Long
If argR1.Count > 1 Then
mySub = 999
Exit Function
End If
strR1Value = argR1.Value '参照するセルの値を代入
buf = argR2.Value '集計する範囲の値を代入
For Each e1 In buf
e3 = Split(e1, ",") 'カンマ区切りの数字を分割
For Each e2 In e3
If strR1Value = e2 Then
lngA = lngA + 1
End If
Next e2
Next e1
mySub = lngA
End Function
'==============================================
この関数は一応正常には動くようです。
しかし、広範囲にコピペしたときに、フリーズしてしまうのです。
コピペして、再計算されて、きちんと値も表示されます。
しかし、その時点でフリーズしてしまい、強制終了の憂き目にあいます(T_T)
おそらくエクセルのリソースの問題なのだと思いますが、
なにか対処方法はないでしょうか?
ファイルを客先にお渡しすることになると思うので、あまり不安定なままではまずいと思いますし、最終的には作業列を作って普通の関数で対応するのがベターかなあ?とは思ってます。
しかし、もし「ここをこうすれば良い(安全)」みたいなことがあれば、出来たらユーザー定義関数で対応したいと思っています。
よろしくお願いします。
あ、集計表ですが、計算対象範囲は、1列430行で、
計算式を入れる範囲は、16行×48列=768セル です。
それと、上記のエラーとは関係ないですが、私はユーザー定義関数はあまり作ったことがありません。
エラー処理も、今回は、返り値をLong型にしましたので、エラー時は「999」を返すようにとりあえずしてみました。
通常は、どういうやり方がベターなのでしょうか?
また、ユーザー定義関数を作る場合の注意点等々、アドバイスいただけたら幸いに思います。
よろしくお願い申し上げます。
|
|