22pt
>自動車と自動二輪の"自動"の部分がかぶってしまっていて、instr関数では
なぜ自動で切ってしまうのでしょうか?
コメントを有効にしていただけると、回答前にこのあたりの確認ができるので助かります。
テーブル設計に再考の余地がある気はしますが、
1行目に「自動車」、「自動二輪」などがあり、A列にデータがあると仮定すると、
B2セルに以下の式を書き
=IF(ISERROR(FIND(B$1,$A2)),"",RIGHT($A2,LEN($A2)-FIND("=",$A2)))
これをデータ範囲にコピーでどうですしょうか。
23pt
文字列の先頭から「自動車=」というようなキーワードで始まる場合は、次のようにExcelの関数だけでできます。
B1に次の式を入れる
=IF(ISERROR(SEARCH("自動車=",A1)),"", SUBSTITUTE(A1,"自動車=",""))
C1にも同様に次の式を入れる
=IF(ISERROR(SEARCH("自動二輪=",A1)),"", SUBSTITUTE(A1,"自動二輪=",""))
B1,C1を必要なところまでコピーする
もし、VBAのInStr関数でやる場合でも、自動車と自動二輪で分けて考える必要があります。
ご回答ありがとうございます。すいません、説明不足でした。
A列にはいろんな文字列が入っています。ひょっとしたら"#"!自動車!!=プリウス"、
"&%!自動二輪=タンデム"などの文字列があるかもしれないです。文字列の中に
自動車という文字が入っていたらこの処理、自動二輪という文字列が入っていたら
この処理と、処理をわけたいです。
23pt
=が1つしかなければ、
B1の数式を
=IF(ISERROR(SEARCH("自動車",A1)),"",RIGHT(A1,LEN(A1)-SEARCH("=",A1)))
C1の数式を
=IF(ISERROR(SEARCH("自動二輪",A1)),"",RIGHT(A1,LEN(A1)-SEARCH("=",A1)))
B1とC1を下にコピー
いつもありがとうございます。すいません、確認した所ACCESSの間違いでした。Accessのテーブルに既に"通勤手段”というフィールドが存在します。後から、"自動二輪","自動車"のフィールドを追加しました。例えば"自動車=プリウス"で"自動車="の部分がいりません。"プリウス"という名前だけがほしいです。それをVBAで処理を行い処理をしようと思っています。ExcelのようにFind,Search関数が使えるかと思ったら使えないようです。VBEのエディタにもでていませんし、実行するとこんな関数はないとエラーが表示されてしまいます。知りたい部分は文字の切り出し方法です。ご教授お願いいたします。
22pt
Accessのテーブルの話だったのですね。
こんな感じで
(テーブル名はテーブル1としました)
Sub test() Dim DB As DAO.Database Dim RS As DAO.Recordset Dim str As String Set DB = CurrentDb() Set RS = DB.OpenRecordset("テーブル1", dbOpenTable) Do Until RS.EOF RS.Edit str = RS.Fields("通勤手段").Value If InStr(1, str, "自動車") > 0 Then RS.Fields("自動車").Value = Right(str, Len(str) - InStrRev(str, "=")) End If If InStr(1, str, "自動二輪") > 0 Then RS.Fields("自動二輪").Value = Right(str, Len(str) - InStrRev(str, "=")) End If RS.Update RS.MoveNext Loop Set RS = Nothing Set DB = Nothing End Sub
ご回答ありがとうございます、参考になりました!
いつもありがとうございます。すいません、確認した所ACCESSの間違いでした。Accessのテーブルに既に"通勤手段”というフィールドが存在します。後から、"自動二輪","自動車"のフィールドを追加しました。例えば"自動車=プリウス"で"自動車="の部分がいりません。"プリウス"という名前だけがほしいです。それをVBAで処理を行い処理をしようと思っています。ExcelのようにFind,Search関数が使えるかと思ったら使えないようです。VBEのエディタにもでていませんし、実行するとこんな関数はないとエラーが表示されてしまいます。知りたい部分は文字の切り出し方法です。ご教授お願いいたします。