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

【EXCEL VBA】ユーザー定義関数の設定

このQ&Aのポイント
  • ネットより拝借した下記ユーザー定義関数を使用して、複数の選択したセルの値をセミコロンで連結する仕組みを作成している途中です。
  • セル(F6)からセル(Fxx)までデータが入力されています。これらのデータをユーザー定義関数を使ってセル(F1)に連結するマクロを組んでみたのですが、コンパイルエラーが発生しています。
  • このエラーを解消するにはVBE上で区切り文字を正しく定義する必要があります。

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

  • ベストアンサー
  • SI299792
  • ベストアンサー率47% (772/1616)
回答No.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

La_Ola_Azul
質問者

お礼

ご回答頂き有難うございます。ご指摘頂いた内容がとてもよく分かりました。シンプルで効率の良い方法をご教授頂き本当に有難うございました。 無事解決出来ました。

その他の回答 (1)

  • SI299792
  • ベストアンサー率47% (772/1616)
回答No.1

Macro6のほうが間違っています。 "=myjoin(F6:F" & gyo - 1 & ","";"")" にしてください。