こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

アクセスのクエリで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

のような事がしたいのですが
クエリでは無理なのでしょうか?

投稿日時 - 2013-01-30 22:19:05

QNo.7919786

困ってます

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

あれれ、モジュール(VBA)では無くて、クエリの方をお願いしたつもりだったんですが。

splitを適用したいクエリの結果は、列にSplitを適用しない状態だと何行(レコード)あるんですか?
1行(レコード)で複数箇所splitを適用してませんか?

投稿日時 - 2013-02-02 14:33:16

補足

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

投稿日時 - 2013-02-05 22:00:24

お礼

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

投稿日時 - 2013-02-05 21:59:42

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

> Functionの所にブレークポイントを設置してクエリを開いたら、
そのクエリを見せてもらえることができるなら理由がわかるかも。

コピペしてもらうことは可能ですか?

「そのクエリ」をデザインビューで開いて、さらにSQLビューに切り替えると
SQL文として表示&編集できますので。

投稿日時 - 2013-01-31 22:01:29

お礼

ん?
私だけなのですかね?
頂いたコードを標準モジュールにそのまま貼り付けて
頂いた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です。

投稿日時 - 2013-02-01 20:02:44

ANo.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;

投稿日時 - 2013-01-30 22:33:37

お礼

仕組みは全くわかりませんができました。

Functionの所にブレークポイントを設置してクエリを開いたら、2回実行されるようですがなぜなのでしょうか?

投稿日時 - 2013-01-31 21:38:28

あなたにオススメの質問