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

Excelの関数で次の事を行いたいです。
列に"通勤手段"、"自動車"、"自動二輪"という列があります。
通勤手段フィールドには"NULL"が入っていたり、"自動車=クラウン"、
"自動二輪=NINJA"、"電車=JR"、"バス=JR"などの値が入っています。

この列の値の文字列が"自動車"とはいっていれば、"クラウン"という
値を切り取って"自動車"列に"クラウン"を挿入。
この列の値の文字列が"自動二輪"とはいっていれば、"NINJA"という
値を切り取って"自動二輪"列に"NINJA"を挿入。
その他の文字列、NULLは無視する。
ということがやりたいと思っています。

A列が通勤手段。B列が自動車。C列が自動二輪。
A1には"自動車=クラウン"
A2には"NULL"
A3には"自動二輪=NINJA"
A4には"バス=JR"
とあります。これを、次のように文字列を分割して各列に挿入したいです。
B1クラウン。C3にNINJA。です。

自動車と自動二輪の"自動"の部分がかぶってしまっていて、instr関数では
instr(A列の文字列,"自動")だと自動二輪も自動車もひっかかってしまいます。
ExcelかVBAの関数でうまくこの処理をできないでしょうか?

●質問者: akaired
●カテゴリ:コンピュータ
✍キーワード:A1 A3 C3 Excel JR
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● airplant
●23ポイント

文字列の先頭から「自動車=」というようなキーワードで始まる場合は、次のようにExcelの関数だけでできます。

B1に次の式を入れる

=IF(ISERROR(SEARCH("自動車=",A1)),"", SUBSTITUTE(A1,"自動車=",""))

C1にも同様に次の式を入れる

=IF(ISERROR(SEARCH("自動二輪=",A1)),"", SUBSTITUTE(A1,"自動二輪=",""))

B1,C1を必要なところまでコピーする

もし、VBAのInStr関数でやる場合でも、自動車と自動二輪で分けて考える必要があります。

◎質問者からの返答

ご回答ありがとうございます。すいません、説明不足でした。

A列にはいろんな文字列が入っています。ひょっとしたら"#"!自動車!!=プリウス"、

"&%!自動二輪=タンデム"などの文字列があるかもしれないです。文字列の中に

自動車という文字が入っていたらこの処理、自動二輪という文字列が入っていたら

この処理と、処理をわけたいです。


2 ● SALINGER
●23ポイント

=が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のエディタにもでていませんし、実行するとこんな関数はないとエラーが表示されてしまいます。知りたい部分は文字の切り出し方法です。ご教授お願いいたします。


3 ● Mook
●22ポイント ベストアンサー

>自動車と自動二輪の"自動"の部分がかぶってしまっていて、instr関数では

なぜ自動で切ってしまうのでしょうか?

コメントを有効にしていただけると、回答前にこのあたりの確認ができるので助かります。


テーブル設計に再考の余地がある気はしますが、

1行目に「自動車」、「自動二輪」などがあり、A列にデータがあると仮定すると、

B2セルに以下の式を書き

=IF(ISERROR(FIND(B$1,$A2)),"",RIGHT($A2,LEN($A2)-FIND("=",$A2)))

これをデータ範囲にコピーでどうですしょうか。

◎質問者からの返答

いつもありがとうございます。すいません、確認した所ACCESSの間違いでした。Accessのテーブルに既に"通勤手段”というフィールドが存在します。後から、"自動二輪","自動車"のフィールドを追加しました。例えば"自動車=プリウス"で"自動車="の部分がいりません。"プリウス"という名前だけがほしいです。それをVBAで処理を行い処理をしようと思っています。ExcelのようにFind,Search関数が使えるかと思ったら使えないようです。VBEのエディタにもでていませんし、実行するとこんな関数はないとエラーが表示されてしまいます。知りたい部分は文字の切り出し方法です。ご教授お願いいたします。


4 ● SALINGER
●22ポイント

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
◎質問者からの返答

ご回答ありがとうございます、参考になりました!

関連質問


●質問をもっと探す●



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