- ベストアンサー
【EXCEL VBA】ユーザー定義関数の設定
- ネットより拝借した下記ユーザー定義関数を使用して、複数の選択したセルの値をセミコロンで連結する仕組みを作成している途中です。
- セル(F6)からセル(Fxx)までデータが入力されています。これらのデータをユーザー定義関数を使ってセル(F1)に連結するマクロを組んでみたのですが、コンパイルエラーが発生しています。
- このエラーを解消するにはVBE上で区切り文字を正しく定義する必要があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
エラーになっているところは、文法上のミスです。""から間違っています。 プロブラムを見ると効率が悪いです。Macro1のようにすれば、ループは不要です。 見ていて思ったのですが、データを変更すると、プログラムを動かさなければなりません。であれば、マクロで関数を入れるのではなく、直接データを入れればいいのでは? Macro2のようにすればmyJoinは不要になり、効率がいいです。 関数を直すという方法もあります。空白セルがあれば、それ以降連結しないようにしました。これなら、Macro6は不要となり、F1に=myJoin(F6:F100,";")を入れておけばいい、いちいちマクロを動かす必要はなくなります。 ' Option Explicit ' Sub Macro1() ' Dim gyo As Long ' gyo = [F6].End(xlDown).Row ' gyo = Cells(Rows.Count, "F").End(xlUp).Row [F1] = "=myjoin(F6:F" & gyo & ","";"")" End Sub ' Sub Macro2() ' Dim gyo As Long Dim buf As String ' For gyo = 6 To Cells(Rows.Count, "F").End(xlUp).Row buf = buf & ";" & Cells(gyo, "F") Next gyo [F1] = Mid(buf, 2) End Sub ' Function myJoin(範囲 As Range, Optional 区切り文字 As String) As Variant ' Dim c As Range Dim buf As String Dim ILen As Integer If 範囲.Rows.Count <> 1 And 範囲.Columns.Count <> 1 Then myJoin = CVErr(xlErrRef) 'エラー値 Exit Function End If ' For Each c In 範囲 ' If c = "" Then Exit For End If buf = buf & 区切り文字 & c Next c ILen = Len(区切り文字) myJoin = Mid$(buf, ILen + 1) End Function
その他の回答 (1)
- SI299792
- ベストアンサー率47% (772/1616)
Macro6のほうが間違っています。 "=myjoin(F6:F" & gyo - 1 & ","";"")" にしてください。
お礼
ご回答頂き有難うございます。ご指摘頂いた内容がとてもよく分かりました。シンプルで効率の良い方法をご教授頂き本当に有難うございました。 無事解決出来ました。