- ベストアンサー
空白を見つける!!
ACCESSにて住所録整理を行っております。 現状 [名前フィールド] 鈴木 一郎 田中 弘 加藤 明 *必ず全角のスペースが入っています 理想 [名前フィールド] [氏] [名] 鈴木 一郎 鈴木 一郎 田中 弘 田中 弘 加藤 明 加藤 明 これを、それぞれ[氏][名]に分けたいと考えております。 ACCESS VBA でのどの様に空白文字を探し分けるかが思いつきません。 何卒よろしくお願い致したます。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
CutStr(strText, Separator, Col) ? CutStr("鈴木 一郎", " ", 1) 鈴木 つまり、strText(="鈴木一郎") が Separator (="全角ブランク") で区切られている列であれば Col(=1)番目の列を抜き出せという関数です。 ? CutStr("鈴木 一郎", " ", 2) 一郎 この場合は、Col(=2)番目 ですから'一郎'を抜き出します。 ? CutStr("鈴木 一郎 様", " ", 3) 様 と列数には制限はありません。 ? CutStr("鈴木,一郎,様", ",", 2) 一郎 と書いたが判りやすいかも知れませんね!
その他の回答 (6)
- tx28
- ベストアンサー率33% (1/3)
回答ではなくアドバイスです。 データの一回限りのデータのコンバートであればクエリを使う方法もあるので参考にしてください。 まず選択クエリをひとつ作成します。 "新規作成"->"デザインビュー"を選びます。 そして、デザインビューで名前が保存されているテーブルを追加してください。 下の一覧にテーブルに登録されているフィールドをすべて追加します。 その後次の二つの式をあいている欄に入力してください。 氏:Left([名前フィールド],InStr([名前フィールド]," ")-1) 名:Right([名前フィールド],Len([名前フィールド])-InStr([名前フィールド]," ")) 実行して結果を確認してください。 結果が問題なければクエリを保存してください。 次にテーブルの新規作成をして"テーブルのインポート"を選びます。 住所録のAccessファイルを選択します。 クエリの一覧から先ほど保存したクエリを選びオプションを表示して "テーブルとしてインポート"を選び"OK"をクリックします。 以上でクエリを基にした新しいテーブルが作られます。 後は適宜名称の変更をして使用してください。
s_husky です。 現役のを示しておきます。 Public Function CutStr(ByVal Text As String, _ ByVal Separator As String, _ ByVal Col As Integer) As Variant On Error GoTo Err_CutStr 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 Col J = K + 1 K = InStr(J, Text, Separator, vbTextCompare) + L Next I CutStr = Mid$(Text, J, (K - J - L) * Abs(K > J)) Exit_CutStr: Exit Function Err_CutStr: CutStr = Null Resume Exit_CutStr End Function
お礼
ご親切な回答度々ありがとうございます。 Text As String Separator As String Col As Integer がよく理解出来ないのですが、当方のケースですと、何が何に当てはまるのでしょうか?
s_husky です。 Access97用のCutStr関数です。 Public 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
s_husky です。 老婆心ながら、CutStr関数の実際的な使用方法を示唆しておきます。 *同一住所録の氏名を同一の住所録の姓と名に分離する場合の使用方法です。 Private Sub コマンド住所録更新_Click() QDFExecute "住所録更新", "UPDATE 住所録 SET 姓=CutStr(氏名, ' ', 1), 名=CutStr(氏名, ' ', 2)" End Sub Public Sub QDFExecute(ByVal QDFName As String, ByVal SQLText As String) On Error GoTo Err_QDFExecute Dim dbs As DAO.Database Set dbs = CurrentDb dbs.Execute SQLText Exit_QDFExecute: Exit Sub Err_QDFExecute: MsgBox Err.Description & "(QDFExecute:" & QDFName & ")" Resume Exit_QDFExecute End Sub
お礼
ご親切なご回答本当にありがとうございます。 当方ACCESS97 VBAにてデータコンバート中なのですが、cutstrは使用出来るのでしょうか??
私が愛用している CutStr関数が利用できます。 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("鈴木 一郎", " ", 1) 鈴木 ? CutStr("鈴木 一郎", " ", 2) 一郎 というように使います。
- ept63
- ベストアンサー率21% (54/247)
instr関数を利用しましょう。 instr(氏名," ") これで空白の場所が分かります。
お礼
ありがとうございます!! やっと出来ました; 同じ方法でフリガナもバッチリできました。 ご丁寧に教えて頂きましてありがとうございました!!