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の関数でうまくこの処理をできないでしょうか?

回答の条件
  • 1人2回まで
  • 登録:2009/03/13 02:45:59
  • 終了:2009/03/14 04:29:52

ベストアンサー

id:Mook No.3

Mook回答回数1312ベストアンサー獲得回数3912009/03/13 09:47:39

ポイント22pt

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

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

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


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

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

B2セルに以下の式を書き

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

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

id:akaired

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

2009/03/13 10:13:12

その他の回答(3件)

id:airplant No.1

airplant回答回数220ベストアンサー獲得回数492009/03/13 03:27:02

ポイント23pt

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

B1に次の式を入れる

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

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

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

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

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

id:akaired

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

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

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

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

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

2009/03/13 04:39:52
id:SALINGER No.2

SALINGER回答回数3454ベストアンサー獲得回数9692009/03/13 08:17:51

ポイント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を下にコピー

id:akaired

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

2009/03/13 10:13:23
id:Mook No.3

Mook回答回数1312ベストアンサー獲得回数3912009/03/13 09:47:39ここでベストアンサー

ポイント22pt

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

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

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


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

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

B2セルに以下の式を書き

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

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

id:akaired

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

2009/03/13 10:13:12
id:SALINGER No.4

SALINGER回答回数3454ベストアンサー獲得回数9692009/03/13 11:28:48

ポイント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
id:akaired

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

2009/03/13 13:08:55

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません