• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【VBA】ユーザ定義関数が動かない)

【VBA】ユーザ定義関数が動かない

このQ&Aのポイント
  • VBEの標準モジュールに記述したVBAのユーザ定義関数が、期待通りに動作しない場合の原因と解決方法について教えてください。
  • ワークシートのセルに「=tc("aa","bb")」と入力しても、表示が「=tc("aa","bb")」ではなく「aabb」とならない理由を解説してください。
  • VBAのユーザ定義関数の引数について説明し、引数のデータ型が関数の動作に影響する可能性についても教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答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

bebestplay
質問者

お礼

ありがとうございます! 無事解決しました!

その他の回答 (2)

  • jcctaira
  • ベストアンサー率58% (119/204)
回答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  

bebestplay
質問者

お礼

ありがとうございます! 無事解決しました!

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

まず, 間違い: tt = Str 正解: tc = Str それとセル側の書式設定が文字列になってます。 セルを右クリックして書式設定の表示形式を標準に変えてから,関数を打ち込み直します。

bebestplay
質問者

お礼

ありがとうございます! 無事解決しました!

関連するQ&A

専門家に質問してみよう