

【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も見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでの計算式で求められ...
-
エクセルのセル内の余白の設定...
-
エクセルで数式を入れても値が...
-
Excelで 分:秒 と表示させる...
-
エクセル 桁を増やす方法
-
エクセルで日付が逆に登録され...
-
エクセルの計算式の後に、単位...
-
エクセルの計算結果を()括弧で...
-
エクセルの分数表示
-
数字の後ろにピリオドを表示す...
-
エクセル 条件付き書式で文字...
-
EXCELでセル内に打った文字が隠...
-
【Excel】 特定セルだけに「ゼ...
-
Excelのセルの表示形式(ユーザ...
-
Excel 文字の前にスペースを入...
-
Excelの単位で立法メイトルを表...
-
Excel &で他セルを参照させた...
-
エクセル・文字列の先頭に空白...
-
エクセルで 何時間何分と表示...
-
EXCELで日付と時刻が入ったセル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでの計算式で求められ...
-
エクセルのセル内の余白の設定...
-
エクセルで日付が逆に登録され...
-
エクセルの計算式の後に、単位...
-
エクセルで数式を入れても値が...
-
Excelで 分:秒 と表示させる...
-
エクセル 桁を増やす方法
-
数字の後ろにピリオドを表示す...
-
【Excel】 特定セルだけに「ゼ...
-
エクセルで折り返しと縮小の同...
-
エクセルで 何時間何分と表示...
-
エクセルの計算結果を()括弧で...
-
EXCELでセル内に打った文字が隠...
-
エクセルの分数表示
-
EXCELで日付と時刻が入ったセル...
-
エクセルで、書式設定をして表...
-
有効数字
-
エクセル 条件付き書式で文字...
-
エクセルで○時間△分を○。□時間...
-
セルの書式設定で一部のフォン...
おすすめ情報