【VBA】ユーザ定義関数が動かない
下記のようなプログラムをVBEの標準モジュールに記述して、
ワークシートの適当なセルに「=tc("aa","bb")」と入力してEnterを押した所
セルの表示が「=tc("aa","bb")」となってしまい狙った効果が得られません。
本当は、「aabb」と表示させたいのですが、なぜうまくいかないのでしょうか。
ご教授願います。
◆関数の仕様
引数1と引数2に入力された文字列を連結して返り値として返す。
◆コード
Function tc(str1 As Range, str2 As Range) As String
Dim Str As String
Str = str1.Value & str2.Valuett
tt = Str
End Function
No.2ベストアンサー
- 回答日時:
Str は、予約語として跳ねられることはないけれども、VBA関数だから、変数なのか関数か分からなくなってしまいます。
だから、変数としては、Str は、使ってはいけません。本来、ユーザー定義関数名や、プロシージャ名、このような間違いをさせないために、大文字と小文字を組み合わせ、例えば、wsJoin() などとして上げると、分かりやすいです。ws = Worksheetの意味です。Join は、配列を文字列に直す、VBA関数の名前です。小文字で入れると、変化しませんので、すぐに、自分の入力の間違いが分かります。
str2.Valuett --> str2.Value
tt -->tc
以下、元のコードを参考に同じものを作ってみました。
=tc("aa","bb")
=tc(A1,A2)
=tc(A1:A4)
引数に、パラメータ配列を使ったので、5個でも、10個でも引数が可能です。
エラー処理のために、戻り値は、Variant 型にします。ただ、以下は、Error のところに、コメントブロックしてあります。
'//
Public Function tc(ParamArray Arg() As Variant) As Variant
Dim v As Variant
Dim c As Variant
Dim buf As String
'On Error Resume Next
For Each v In Arg
If TypeName(v) = "Range" Then
For Each c In v
buf = buf & c.Text
Next
Else
buf = buf & v
End If
Next
tc = buf
'On Error GoTo 0
End Function
No.3
- 回答日時:
呼び出す時の関数の引数、VBA関数の引数タイプが違います。
・=tc("aa","bb")は文字列渡し。
・Function tc(str1 As Range, str2 As Range)はセル渡し。
もし、文字列またはRangeのどちらも使用する場合は単純に以下の関数でできると思います。
Function tc(str1 As Variant, str2 As Variant) As String
tc = str1 & str2
End Function
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
ユーザー定義関数に#NAME?が返ってくる
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでの計算式で求められ...
-
エクセルで数式を入れても値が...
-
エクセルのセル内の余白の設定...
-
エクセルの計算結果を()括弧で...
-
エクセルで西暦に変更できない
-
Excelで 分:秒 と表示させる...
-
エクセル 条件付き書式で文字...
-
エクセルで日付が逆に登録され...
-
エクセルで 何時間何分と表示...
-
エクセルで折り返しと縮小の同...
-
エクセルの計算式の後に、単位...
-
エクセルの分数表示
-
【Excel】 特定セルだけに「ゼ...
-
Excelで数字をハイフンで区切る...
-
エクセル 桁を増やす方法
-
エクセル・文字列の先頭に空白...
-
数字の後ろにピリオドを表示す...
-
【エクセル】16進数の文字列を2...
-
Excelのセルの表示形式(ユーザ...
-
エクセル A1に1と入力すると○、...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでの計算式で求められ...
-
エクセルのセル内の余白の設定...
-
エクセルで数式を入れても値が...
-
Excelで 分:秒 と表示させる...
-
エクセルの計算結果を()括弧で...
-
エクセルで日付が逆に登録され...
-
エクセルの計算式の後に、単位...
-
【Excel】 特定セルだけに「ゼ...
-
エクセルで西暦に変更できない
-
エクセルで折り返しと縮小の同...
-
エクセル 桁を増やす方法
-
エクセルで 何時間何分と表示...
-
EXCELで日付と時刻が入ったセル...
-
エクセルの分数表示
-
エクセル 条件付き書式で文字...
-
Excelに「隠し文字」のような機...
-
Excelで数値を時間数に変換する...
-
エクセルで、書式設定をして表...
-
エクセル:日付和暦の数字だけ...
-
Excelの単位で立法メイトルを表...
おすすめ情報