• ベストアンサー

空白を見つける!!

ACCESSにて住所録整理を行っております。 現状 [名前フィールド] 鈴木 一郎    田中 弘 加藤 明     *必ず全角のスペースが入っています 理想 [名前フィールド] [氏]  [名] 鈴木 一郎    鈴木  一郎 田中 弘 田中  弘 加藤 明     加藤  明 これを、それぞれ[氏][名]に分けたいと考えております。 ACCESS VBA でのどの様に空白文字を探し分けるかが思いつきません。 何卒よろしくお願い致したます。

質問者が選んだベストアンサー

  • ベストアンサー
noname#22222
noname#22222
回答No.7

CutStr(strText, Separator, Col) ? CutStr("鈴木 一郎", " ", 1) 鈴木 つまり、strText(="鈴木一郎") が Separator (="全角ブランク") で区切られている列であれば Col(=1)番目の列を抜き出せという関数です。 ? CutStr("鈴木 一郎", " ", 2) 一郎 この場合は、Col(=2)番目 ですから'一郎'を抜き出します。 ? CutStr("鈴木 一郎 様", " ", 3) 様 と列数には制限はありません。 ? CutStr("鈴木,一郎,様", ",", 2) 一郎 と書いたが判りやすいかも知れませんね!

bluevoxy
質問者

お礼

ありがとうございます!! やっと出来ました; 同じ方法でフリガナもバッチリできました。 ご丁寧に教えて頂きましてありがとうございました!!

その他の回答 (6)

  • tx28
  • ベストアンサー率33% (1/3)
回答No.6

回答ではなくアドバイスです。 データの一回限りのデータのコンバートであればクエリを使う方法もあるので参考にしてください。 まず選択クエリをひとつ作成します。 "新規作成"->"デザインビュー"を選びます。 そして、デザインビューで名前が保存されているテーブルを追加してください。 下の一覧にテーブルに登録されているフィールドをすべて追加します。 その後次の二つの式をあいている欄に入力してください。 氏:Left([名前フィールド],InStr([名前フィールド]," ")-1) 名:Right([名前フィールド],Len([名前フィールド])-InStr([名前フィールド]," ")) 実行して結果を確認してください。 結果が問題なければクエリを保存してください。 次にテーブルの新規作成をして"テーブルのインポート"を選びます。 住所録のAccessファイルを選択します。 クエリの一覧から先ほど保存したクエリを選びオプションを表示して "テーブルとしてインポート"を選び"OK"をクリックします。 以上でクエリを基にした新しいテーブルが作られます。 後は適宜名称の変更をして使用してください。

noname#22222
noname#22222
回答No.5

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

bluevoxy
質問者

お礼

ご親切な回答度々ありがとうございます。 Text As String Separator As String Col As Integer がよく理解出来ないのですが、当方のケースですと、何が何に当てはまるのでしょうか?

noname#22222
noname#22222
回答No.4

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

noname#22222
noname#22222
回答No.3

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

bluevoxy
質問者

お礼

ご親切なご回答本当にありがとうございます。 当方ACCESS97 VBAにてデータコンバート中なのですが、cutstrは使用出来るのでしょうか??

noname#22222
noname#22222
回答No.2

私が愛用している 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)
回答No.1

instr関数を利用しましょう。 instr(氏名," ") これで空白の場所が分かります。

関連するQ&A