下記のユーザー定義関数を作成したのですが
ワークシートのセルで#VALUE!のエラーがでます。
宜しくお願いします。
Function find1(検索 As Range) As Variant
Dim objRange As Range
Dim target As Variant
target = 検索.Value
Set objRange = Columns("E").Find(target)
find1 = objRange.Value
End Function
意味の良く分からない関数ですね・・・
「指定されたセルの値と同じ値のセルがあったらそのセルの値を返す」?
> ワークシートのセルで#VALUE!のエラーがでます。
見つからなかった時の処理が無いからでは?
#上記関数は、見つからない時、エラーになりますね。
マルチポスト
http://pc11.2ch.net/test/read.cgi/tech/1165574205/466
一時的にfindメソッドの使い方の勉強のために
このような関数を作りました。
E列には、絶対見つかる、value値又はtextを入れてます。
文法上の間違いですか?
2CHにも、投稿してるため、マルチポストと指摘されてますが
FAQ掲示板には、こちらだけですので、宜しくお願いします。
少なくとも、私が試した限りでは、
> E列には、絶対見つかる、value値又はtextを入れてます。
の時には「#VALUE!のエラー」は発生しませんでした。
> findメソッドの使い方の勉強のためにこのような関数を作りました。
とりあえず、デバッグはやってますか?
> 2CHにも、投稿してるため、マルチポストと指摘されてますが
> FAQ掲示板には、こちらだけですので、宜しくお願いします。
「FAQ掲示板」って何です?
「2CH」での定義がどうなっているのか知りませんが、
どこであろうと、「同じ内容の質問を別の場所に投稿」したら、マルチポストだと思いますけど・・・
大吉末吉 様
返信ありがとう、ございます。
マルチポストの件、今後反省します。
試されて、エラーが出なかったのことですが
当方、excel2000では無理なのかな。
正直なところ、VBの本は良く読むのですが
自分で書いたのは初めてなのです。
動く感動を味わいたいのですが。
わたしも試した限りではエラーは発生せずに正常に動きました。
(Functionで作る意味が分かりませんでしたが)
念のため、呼び出し側のコードも書いていただいてよろしいですか?
RE:A24様
ぶっちゃけ、初心者過ぎて恥ずかしいのですが書いてみます。
自作関数←標準モジュールに入力しました
↓
ワークシート1のE列に 適当な英数字を入力
↓
ワークシート1での呼び出しは
A10に検索文字がある場合は
=find1(A10)としてます。(もちろんE列には該当する文字があります)
うまく動作したら、コードを増やそうとおもったのですが、
VB初めてで、失敗しました。
>=find1(A10)としてます。
それでは動きません。実際に使っているコードを正確に書いてください。
…というかデバッグして1つ1つの処理内容を確認してください。
大吉末吉さんにも聞かれてますが、デバッグしてますか?してるなら
その結果を教えてください。
[Excel VBA]
Function find1(検索 As Range) As Variant
Dim objRange As Range
Dim target As Variant
target = 検索.Value
MsgBox 検索.Worksheet.Name & 検索.Address & " (" & CStr(target) & ")を探します。"
MsgBox Columns("E").Worksheet.Name & Columns("E").Address & "を対象とします。"
Set objRange = Columns("E").Find(target)
If objRange Is Nothing Then
MsgBox "見つかりませんでした。"
Else
MsgBox objRange.Address & "に見つかりました。"
find1 = objRange.Value
End If
End Function
> 当方、excel2000では無理なのかな。
Excel2000で試してみました。エラーですね・・・
#Excel2993なら動作しました。
MSの技術情報を見ると、
「Excel のユーザー定義関数の制限について」
(http://support.microsoft.com/kb/170787/ja)
に、
------------------------------------------------------------
次の処理が実行できません。
(中略)
・プロパティの設定およびほとんどのメソッドの実行。
------------------------------------------------------------
ってありますね。
つまり、Findメソッドは、
Excel2000では、この「ほとんど」に入っていて、
Excel2003は、「ほとんど」から外れた・・・
って事なんでしょうかね。
> 一時的にfindメソッドの使い方の勉強のために
なら、Functionにしてセルに設定するのは止めて、マクロ(Sub)で試してみるとか・・・
間違ってないような気がしますが…。
確認のため、標準モジュールに次のコードを入れてみてください。
Private Sub Find_Prac()
Dim hit As Variant
hit = find1(Range("A10"))
MsgBox hit
End Sub
セルA10に検索文字を入れてから、このコードをF8キーを押しながら、1行ずつ
進めてください。どこがおかしいか分かると思いますが。
>=find1(A10)としてます。
…というかセルに直接書いてるのではなかろうか。。。
ご返事遅くなりすいませんでした。
マクロにしたらの件ですが、仕事で使いたいので、上司や外部取引先などの
方でマクロ(マクロボタン)に抵抗を感じてる方の為の、配慮です。
じきをみて、Excel2003で試してみます。
コードに間違ってないとのことで若干自信がつきました
皆さん、ご意見大変ありがとうございました。
なお、デバッグの件もExcel2003で勉強しようと思います。
ツイート | ![]() |