ここから本文です

VBAのこの関数定義どうしたらいいと思います??

che********さん

2009/11/100:09:38

VBAのこの関数定義どうしたらいいと思います??

excelで
=IF(Or(And(セル<> Max(範囲), セル <> Min(範囲)), (Abs(セル - IF(セル = Max(範囲), Large(範囲, 2), Small(範囲, 2))) / (Max(範囲) - Min(範囲))) < ある値), "OK", "NO")
で結果がYESかNOとなるようにしていました


自分的にVBAでは下のようにしました!
定義や構文を多少~~で省略しましたが気にしないでください

しかし
結果がYESかNOとなるようにするために最初のIFの前になにをつけたらよいかわかりません
なにをつけたらよいでしょうか??

~~

aaa =① IF(Application.Or(Application.And(cell <> Max(hanni), cell <> Min(hanni)), (Abs(cell - Application.IF(cell = Max(hanni), Large(hanni, 2), Small(hanni, 2))) / (Max(hanni) - Min(hanni))) < Q), "OK", "NO")

~~

補足Application.WorksheetFunctionはApplication.と省略しても使うことは可能ですよ!

閲覧数:
2,242
回答数:
2
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

yas********さん

編集あり2009/11/113:28:56

[VBA]WS関数IFはVBA関数IIfで代用が可能?

------
ワークシート関数のオブジェクトにIFはありませんでした。
しかし、VBA関数IIfがワークシート関数IFとほぼ一緒のようです。

<構文>
IIf(expr, truepart, falsepart)

上記より下記の質問
「IFの前になにをつけたらよいかわかりません」

上の回答は、数式内のIF及びApplication.IFをIIf関数に置き換えし、
その他の関数については、ワークシート関数を使用して、下記のようにすることで、解決(するかもしれません<注1)。
※IIf関数と同様にABS関数もWS関数オブジェクト一覧に見当たらないため、VBA関数を使用しました。

----------
With Application.WorksheetFunction
aaa = IIf(.Or(.And(cell <> .Max(hanni), cell <> .Min(hanni)), (Abs(cell - IIf(cell = .Max(hanni), .Large(hanni, 2), .Small(hanni, 2))) / (.Max(hanni) - .Min(hanni))) < Q), "OK", "NO")
End With
----------

<注1>
hanniやQの変数の型が正しいか公開された式だけでは検証のしようがないので、曖昧な回答になってしまうかと。

<蛇足>
質問文の補足に以下のようにありますが、
「Application.WorksheetFunctionはApplication.と省略しても使うことは可能ですよ! 」

確かに下記三つはメソッドとして、同じ処理をするようです(はじめて知りました)。
・Application.Or
・WorksheetFunction.Or
・Application.WorksheetFunction.Or
「Or メソッド」
<構文>
式.Or(Arg1, Arg2~,Arg30)

ただORにはメソッドの他に、「演算子」があります
<構文>
result = expression1 Or expression2
※expression1は数式

前掲より構文が異なるかと思われます。また、演算子とメソッドを切り分ける際、Application.Orよりは、WorksheetFunction.Orのほうがいいのかなと思いました。

理由1>>
Application.とかいてもその中にOrがない。(インテリセンスが働かない)

理由2>>
私の理解の問題かもしれませんが、「Application.メソッド」がプロシージャ中にあると、OnkeyやEnableを連想し、はじめと終わりを探す癖がある(笑)。

それと、IIf関数を使ったコードは(これも馴れなのかもしれませんが)可読しづらいかと。なので、If...Then...Else ステートメントやSelect Case ステートメントを使用したほうが良いかと思われます。

私の回答上文が全く意味ワカメなら、深く考える必要もあまりないと思います。
If...Then...Else ステートメントやSelect Case ステートメントを検索し、そちらを使った方がいいんでないの?という意見です。

ベストアンサー以外の回答

1〜1件/1件中

nek********さん

2009/11/102:20:01

こんばんは。

ユーザー定義関数の設計として正しいかと言う問題は置いておいて、

ワークシート関数をVBAから呼び出すときは、
Application.WorksheetFunction.関数名(・・・)
とするのが正解。

さて、IFの前に何をつけるのかと言う問題ですが、
VBAの関数にもIFがありますから、特別何もつけなくても良いです。

そのかわりワークシート関数と同じ使い方はできません。
IF 条件式 Then
True の場合の処理
Else
False の場合の処理
END IF
という、形で書きます。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる