

【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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAで時間(00:00形式)を積算(足し算)したい 1 2022/11/15 17:04
- Excel(エクセル) エクセルで書式設定とフィルタの組み合わせでうまく行かないのですが 4 2022/10/07 10:02
- Visual Basic(VBA) countifsについての質問 3 2023/03/08 13:45
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Excel(エクセル) VBA オリジナル関数で選択セルの合計を作成したい 3 2023/03/19 19:45
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでの計算式で求められ...
-
エクセルのセル内の余白の設定...
-
【Excel】 特定セルだけに「ゼ...
-
エクセル 桁を増やす方法
-
Excelで 分:秒 と表示させる...
-
Excel 文字の前にスペースを入...
-
エクセルで日付が逆に登録され...
-
エクセルの計算式の後に、単位...
-
エクセルで数式を入れても値が...
-
EXCELで日付と時刻が入ったセル...
-
数字の後ろにピリオドを表示す...
-
エクセルの計算結果を()括弧で...
-
EXCELでセル内に打った文字が隠...
-
エクセルで折り返しと縮小の同...
-
エクセルで○時間△分を○。□時間...
-
スプレッドシートのセル内、折...
-
エクセルで、書式設定をして表...
-
エクセルの分数表示
-
エクセルで 何時間何分と表示...
-
セルの書式設定で一部のフォン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルのセル内の余白の設定...
-
エクセルでの計算式で求められ...
-
エクセルで数式を入れても値が...
-
エクセルで日付が逆に登録され...
-
エクセルの計算式の後に、単位...
-
Excelで 分:秒 と表示させる...
-
エクセル 桁を増やす方法
-
【Excel】 特定セルだけに「ゼ...
-
エクセルで折り返しと縮小の同...
-
エクセルの計算結果を()括弧で...
-
エクセル 条件付き書式で文字...
-
エクセルで 何時間何分と表示...
-
EXCELでセル内に打った文字が隠...
-
EXCELで日付と時刻が入ったセル...
-
数字の後ろにピリオドを表示す...
-
エクセルで西暦に変更できない
-
Excelに「隠し文字」のような機...
-
エクセルで、書式設定をして表...
-
エクセル セル幅は広いのにシャ...
-
セルの書式設定で一部のフォン...
おすすめ情報