- ベストアンサー
アクセスのクエリでSplit関数は使えないのですか
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
あれれ、モジュール(VBA)では無くて、クエリの方をお願いしたつもりだったんですが。 splitを適用したいクエリの結果は、列にSplitを適用しない状態だと何行(レコード)あるんですか? 1行(レコード)で複数箇所splitを適用してませんか?
その他の回答 (2)
- bin-chan
- ベストアンサー率33% (1403/4213)
> Functionの所にブレークポイントを設置してクエリを開いたら、 そのクエリを見せてもらえることができるなら理由がわかるかも。 コピペしてもらうことは可能ですか? 「そのクエリ」をデザインビューで開いて、さらにSQLビューに切り替えると SQL文として表示&編集できますので。
お礼
ん? 私だけなのですかね? 頂いたコードを標準モジュールにそのまま貼り付けて 頂いた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)
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;
お礼
仕組みは全くわかりませんができました。 Functionの所にブレークポイントを設置してクエリを開いたら、2回実行されるようですがなぜなのでしょうか?
お礼
どうもありがとうございました。
補足
私が勘違いしてるようなので勉強しなおします。