• ベストアンサー

アクセスのクエリでSplit関数は使えないのですか

レコードにaaa/bbb/cccと入っていて、 クエリで SELECT Split([テーブル1]![フィールド1],"/") AS test FROM テーブル1; とすると、 式に未定義関数 <関数名> があります。(Error 3085) になります。 VBAでやるとしたら Sub test() Dim str As String str = "aaa/bbb/ccc" Debug.Print Split(str, "/")(1) End Sub のような事がしたいのですが クエリでは無理なのでしょうか?

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

  • ベストアンサー
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.3

あれれ、モジュール(VBA)では無くて、クエリの方をお願いしたつもりだったんですが。 splitを適用したいクエリの結果は、列にSplitを適用しない状態だと何行(レコード)あるんですか? 1行(レコード)で複数箇所splitを適用してませんか?

zugvebwoesn
質問者

お礼

どうもありがとうございました。

zugvebwoesn
質問者

補足

私が勘違いしてるようなので勉強しなおします。

その他の回答 (2)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

> Functionの所にブレークポイントを設置してクエリを開いたら、 そのクエリを見せてもらえることができるなら理由がわかるかも。 コピペしてもらうことは可能ですか? 「そのクエリ」をデザインビューで開いて、さらにSQLビューに切り替えると SQL文として表示&編集できますので。

zugvebwoesn
質問者

お礼

ん? 私だけなのですかね? 頂いたコードを標準モジュールにそのまま貼り付けて 頂いたSQL文をそっくりそのまま貼り付けてクエリを作りました。 そのクエリを開くとやはり2度strSplitを通るようです。 Dim i As Integer  '追加 Function strSplit(strString As String, strSep As String, nCol As Long) As String Dim strArray() As String Dim nArray As Long i = i + 1  '追加 MsgBox i & "回目"  '追加 strArray() = Split(strString, strSep) nArray = UBound(strArray()) If nCol <= nArray Then strSplit = strArray(nCol) Else 'ここは工夫してください strSplit = strString End If End Function にしたら、やはり2回表示されます。 当方の環境はwin7+access2007です。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

VBAでやるとしたら、以下を定義 ・"Module1"のような半角英数字のモジュール名に作成・保存すること ・"共通関数"のような日本語名のモジュール名にすると、見つからないエラーになる Function strSplit(strString As String, strSep as string, nCol as long) as string  dim strArray() as string  dim nArray as long  strArray() = Split(strString, strSep) nArray = UBound(strArray())  if nCol <= nArray then   strSplit = strArray(nCol)  else   ’ここは工夫してください   strSplit = strString  end if End function で、クエリの列として上記の関数名で呼ぶ SELECT strSplit([テーブル1]![フィールド1], "/", 1) as test FROM テーブル1;

zugvebwoesn
質問者

お礼

仕組みは全くわかりませんができました。 Functionの所にブレークポイントを設置してクエリを開いたら、2回実行されるようですがなぜなのでしょうか?

関連するQ&A