- ベストアンサー
【VBA】ユーザ定義関数が動かない
- VBEの標準モジュールに記述したVBAのユーザ定義関数が、期待通りに動作しない場合の原因と解決方法について教えてください。
- ワークシートのセルに「=tc("aa","bb")」と入力しても、表示が「=tc("aa","bb")」ではなく「aabb」とならない理由を解説してください。
- VBAのユーザ定義関数の引数について説明し、引数のデータ型が関数の動作に影響する可能性についても教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
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
その他の回答 (2)
- jcctaira
- ベストアンサー率58% (119/204)
呼び出す時の関数の引数、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
お礼
ありがとうございます! 無事解決しました!
- keithin
- ベストアンサー率66% (5278/7941)
まず, 間違い: tt = Str 正解: tc = Str それとセル側の書式設定が文字列になってます。 セルを右クリックして書式設定の表示形式を標準に変えてから,関数を打ち込み直します。
お礼
ありがとうございます! 無事解決しました!
お礼
ありがとうございます! 無事解決しました!