人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

アクセスの質問です。
早く終了するのでポイントを分散させません!

アクセスのデータの中に、A:B:C:Dというように「:」で区切られたデータが1つのカラムの中に入っています。
クエリで、最初の:の前だけの文字列を抜き出す事はできますでしょうか?

最初の:と、二番目の:の間にある文字列を抜き出す関数のような物もありましたら、お教えください。

A:B:C:D ⇒ A
A:B:C:D ⇒ B

よろしく、お願いいたします。

●質問者: martytaka
●カテゴリ:コンピュータ 学習・教育
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● うぃんど
●100ポイント ベストアンサー

まずは標準モジュールに下記の自作関数を書き込みます

Function MySplit(t As String, s As String, i As Integer) As String
 Dim sArray() As String
 sArray = Split(t, s)
 If i <= UBound(sArray) Then
 MySplit = sArray(i)
 Else
 MySplit = ""
 End If
End Function

クエリでは次のようにして使います

SELECT MySplit(カラム名,":",0), MySplit(カラム名,":",1), MySplit(カラム名,":",2), MySplit(カラム名,":",3)
FROM テーブル;

":" がセパレータ(分割する文字)
数値はゼロ始まりで何番目のものを取り出すかです
数値に該当する箇所にデータが無い場合は空白を返すようになっています

無料質問しておられたので、作っていたのですがキャンセルされたのですね・・・
ちょっと戸惑いました(笑)


martytakaさんのコメント
SELECT MySplit(カラム名,":",0), MySplit(カラム名,":",1), MySplit(カラム名,":",2), MySplit(カラム名,":",3) FROM テーブル; は、クエリの抽出条件の所にかけばよいのでしょうか? また、カラム名とは、元データのカラム名でしょうか? よろしく、お願いいたします。 PS そうなんです。 結構、大変な質問なので無料なんて失礼だなと思い。。 本当にありがとうございます。

うぃんどさんのコメント
>カラム名とは、元データのカラム名でしょうか? はい、そうです >クエリの抽出条件の所にかけばよいのでしょうか? いいえ、私の書いたものはクエリをSQLビューに切り替えて書くのです 同じことをクエリのデザインビューで行うならば下記のような具合になります |フィールド|式1: MySplit(カラム名,":",0)|式2: MySplit(カラム名,":",1)|式3: MySplit(カラム名,":",2)|式4: MySplit(カラム名,":",3)| |テーブル| | | | | |並び替え| | | | | |表示| | | | | |抽出条件| | | | | |または| | | | |

martytakaさんのコメント
できました! でも、いざクエリを実行すると、「未定義関数があります」とでてしまいます。 なぜでしょうか。 本当にすみません。。

うぃんどさんのコメント
(1)まずは標準モジュールに正しく自作関数を書き込めたかの確認から・・・ Altキー+F11キーでVisualBasicEditerを開いて、 標準モジュールに一字一句間違いなく張り付いているかを確認します つぎに Ctrlキー + Gキーでイミディエイトウィンドウに移動して下記のように入力してEnter ? MySplit("A:B:C:D",":",1) そうすると次の行に下記の答えが返ってくるはず B (2)クエリの再確認 入力ミスが無いかを再確認 それでもダメならAccessのバージョンと、クエリをデザインビューではなくSQLビューに切り替えて SELECT 何チャラ・・・ってのを全て返信してください(テーブル名などを秘匿したい場合は、***などではなく適当にわかりやすそうな名前にしてくださいね)

martytakaさんのコメント
SELECT Shouhin.[MySplit(tablevalue,":",0)] AS 式1, Shouhin.[MySplit(tablevalue,":",1)] AS 式2, Shouhin.[MySplit(tablevalue,":",2)] AS 式3, Shouhin.[MySplit(tablevalue,":",3)] AS 式4 FROM Shouhin; テーブル名は、Shouhinで、Shouhinの中の、tablevalueがカラム名です。 アクセスは2007dす。

martytakaさんのコメント
Function MySplit(t As String, s As String, i As Integer) As String Dim sArray() As String sArray = Split(t, s) If i <= UBound(sArray) Then MySplit = sArray(i) Else MySplit = "" End If End Function は、MySplitという名前で保存しております。 関連付けがされていないオブジェクトになっています。 本当にありがとうございます。

うぃんどさんのコメント
先ほどのコメントで(1)のテストはOKだったということで話をすすめていいですか? 手元に2007が無いので、これは推測になりますが、 SQLビューで下記のSQLを貼り付けて実行してみてください Shouhin.[ と ] が入ってしまったためにエラーになってるのだと推測しました >|sql| SELECT MySplit(tablevalue,":",0) AS 式1, MySplit(tablevalue,":",1), MySplit(tablevalue,":",2) AS 式3, MySplit(tablevalue,":",3) AS 式4 FROM Shouhin; ||<

うぃんどさんのコメント
返信の順番間違いました > MySplitという名前で保存しております それは標準モジュールではなく、 クラスモジュールとして作成してしまっているのではないでしょうか? 標準モジュールにはModule1という名前(数字は連番)が勝手に付くはずなんですが・・・
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ