都道府県穴埋めゲーム

レコードに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

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

「アクセスのクエリでSplit関数は使えな」の質問画像

A 回答 (3件)

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



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

この回答への補足

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

補足日時:2013/02/05 22:00
    • good
    • 4
この回答へのお礼

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

お礼日時:2013/02/05 21:59

> Functionの所にブレークポイントを設置してクエリを開いたら、


そのクエリを見せてもらえることができるなら理由がわかるかも。

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

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

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

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;
    • good
    • 0
この回答へのお礼

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

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

お礼日時:2013/01/31 21:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A