- ベストアンサー
Accessの文字切り出しについて
AccessでActiveDirectoryデータを管理したいと考えておりますが、ADからcsvdeで出力した後、Accessにインポートしています。 が、"DN"フィールドに、分割管理したい項目がまとめて入っており、分割する為のクエリを作成したいと思いますが、文字の抽出方法が分かりません。 CN=日本語ユーザー名(可変長),OU=OU名(可変長),DC=下位ドメイン名,DC=上位ドメイン名,DC=local ◎下記項目を切り出し CN=〇〇〇 OU=〇〇〇 単純に、Left関数・Mid関数では切り出し出来ない為、コーディング方法をお教え頂けましたら幸いです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (2)
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
要は、添付図のようなことを実現したのでしょうか? だったら、事は簡単。 Public Function CutStr(ByVal Text As String, ByVal Separator As String, ByVal N As Integer) As String Dim strDatas() As String strDatas = Split("" & Separator & Text, Separator, , 0) CutStr = strDatas(N * Abs(N <= UBound(strDatas))) End Function CutStr(対象文字列, 区切り文字 Or 文字列, 抜き出すN番目の指示) ? CutStr("AAA and BBB and CCC", "and", 1) AAA_ ? CutStr("AAA and BBB and CCC", "and", 2) _BBB_ なお、CutStr関数の書き方は一通りではありません。次のように書く事も可。Split関数を意地でも使いたくなければ、これもありです。 Private Function CutStr(ByVal Text As String, ByVal Separator As String, ByVal N As Integer) As String Dim I As Integer Dim J As Integer Dim K AS Integer Dim L AS Integer Text = Text & Separator L = Len(Separator) - 1 For I = 1 To N J = K + 1 K = Instr(J. Text, Separator, vbTextCompare) + L Next I IF K > J Then CutStr = Mid$(Text, J, K - J - L) End If End Function いずれにしろ CutStr()は、標準ライブラリに登録しておくべき必須の関数です。
お礼
回答ありがとうございます。 言葉足らずですいません、VBAでは無く、クエリの式で実装したいのです。 あわせて、オリジナル関数をお教え頂きありがとうございます。 クエリ式の中に下記の記塾を行えればと考えてます。 CN名:文字切り出し関数 自分で試した結果 CN名: Mid$(3,InStr(フィールド名,",")) 結果:3 手順としては、Mid関数とInStr関数の組み合わせで、カンマの位置を見つければ良いのではと考えているのですが、私の理解が足りたい為、数字しかかえって来ません。
お礼
ありがとうございます、実装出来ました。 Public Functionで関数を定義すれば良いのですね、勉強になりました。 また、他でもCSVからの抽出は、よく使うので大変勉強になりました。 今後の為に、整理します。 テーブル名:AD 検索フィールド名:DN クエリ式 SELECT Mid(cutstr([AD].[DN],",",1),4) AS CN名, mid(cutstr(AD.[DN],",",2),4) AS OU名, AD.objectClass FROM AD WHERE (((AD.objectClass)="user"));