エクセルで
セルに指定した文字列が含まれている場合
別の文字列に置き換えることをしたいです。
countifやfind関数を使えばできるのですが
複数条件でしたいのです。
複数条件にするとうまくいきません。
例えば
A1の文字列に島根という文字がある場合はshimane,
A1の文字列に東京という文字がある場合はtokyo
A1の文字列に大阪という文字がある場合はosaka
その答えをA2のセルに入れる
というようにしたいです。
申し訳ありませんが いい方法はないでしょうか
No.1
- 回答日時:
こんにちは!
>指定した文字列が含まれている場合
一例です。
↓の画像のD・E列のような対応表を作成しておきます。
アスタリクス「*」を入れているのは数式で空白セルを範囲指定しないようにするためで、
今後検索文字列が増える場合はアスタリクスの行に追加していきます。
画像ではB1セルに
=IF(OR(ISNUMBER(FIND(D$1:D$10,A1))),INDEX(E$1:E$10,SUMPRODUCT((ISNUMBER(FIND(D$1:D$10,A1)))*ROW(D$1:D$10))),"")
配列数式なので、Ctrl+Shift+Enterで確定!(←必須★)し
フィルハンドルで下へコピーしています。
※ セル内に複数の検索文字は含まれない!という前提です。m(_ _)m
No.3
- 回答日時:
こんにちは
含まれている文字はどれか一つと限定してもよいのならば比較的簡単ですが、複数の対象が含まれている場合も全部変換するとなると少々面倒そうですね。
例えば
『東京から大阪へ、そして島根へ』を一気に『tokyoからosakaへ、そしてshimaneへ』と変換したいという意味でしょうか?
ひとつの方法として、作業列を用いて分解して順に処理してゆくのが簡単な方法だと思います。
・B1へは島根→shimaneの変換結果を
・B1セルの文字列に対して、C1セルに東京→tokyoの変換結果を
・C1セルの文字列に対して、D1セルに大阪→osakaの変換結果を
というような手順です。
上記では説明の都合上最終の文字列がD1セルになっていますが、これをB1セルにして中間結果の文字列(上記ではB1セル、C1セル)をどこか別のセルに設定しておけば、見かけ上はB1セルに最終の変換結果が示されるようになります。(中間結果のセル(列)は非表示にしておくなどで見えなくすることも可能です)
上記の関数を全部組み合わせれば、一気に変換する式を作成することも可能ですが、式がとたんに長くなります。
(項目が一つ増えるごとに、約3倍強の長さになっていく感じです)
試みに、ご提示の3項目の例で一気に全部変換できる式を作成してみると
B1セルに
=IFERROR(REPLACE(IFERROR(REPLACE(IFERROR(REPLACE(A1,FIND("島根",A1),2,"shimane"),A1),FIND("東京",IFERROR(REPLACE(A1,FIND("島根",A1),2,"shimane"),A1)),2,"tokyo"),IFERROR(REPLACE(A1,FIND("島根",A1),2,"shimane"),A1)),FIND("大阪",IFERROR(REPLACE(IFERROR(REPLACE(A1,FIND("島根",A1),2,"shimane"),A1),FIND("東京",IFERROR(REPLACE(A1,FIND("島根",A1),2,"shimane"),A1)),2,"tokyo"),IFERROR(REPLACE(A1,FIND("島根",A1),2,"shimane"),A1))),2,"osaka"),IFERROR(REPLACE(IFERROR(REPLACE(A1,FIND("島根",A1),2,"shimane"),A1),FIND("東京",IFERROR(REPLACE(A1,FIND("島根",A1),2,"shimane"),A1)),2,"tokyo"),IFERROR(REPLACE(A1,FIND("島根",A1),2,"shimane"),A1)))
のような式を入力することで可能と思います。
※ 上の式でも同じものが複数回出現する場合には対応していません。
例えば、
『東東京と西東京では、どちらがより東京らしいのか?』
のような文字列です。
このようなものも含めて対応なさりたい場合は、ユーザ定義関数にしてしまった方が簡単に実現できますね。
No.4
- 回答日時:
[No.1]の tom04さんの回答、他のケースにも応用できそうで、感心いたしました。
そこで、添付図を借用して別解を考えたので、参考までに。
B1: =INDEX(E$1:E$10,MATCH(1,0/FIND(D$1:D$10,A1)))
【お断り】上式は必ず配列数式として入力のこと
No.5
- 回答日時:
No.2 の補足
「大阪から東京を経由して島根に戻る」の場合、次のどれでしょうか?
①「shimane」(リストの上から最初にヒットした物だけ表示する)
②「osaka」(一番最初にヒットした物だけを表示する)
③「shimanetokyoosaka」(リストの上からヒットした順に表示する)
④「osakatokyoshimane」(ヒットした順に表示する)
⑤ その他(具体的に第3者が判るように説明してください)
No.7
- 回答日時:
No.1です。
他の方々からもご指摘があるように1セル内に重複する場合でも対応する方法にしてみました。
(東京都は東京と京都が重複)
VBAになりますが一例です。
今回は↓の画像のようにD・E列は必要数だけ入れておきます。
Sub Sample1()
Dim i As Long
Dim FoundCell As Range, FirstCell As Range
Range("B:B").ClearContents
For i = 1 To Cells(Rows.Count, "D").End(xlUp).Row
Set FoundCell = Range("A:A").Find(what:=Cells(i, "D"), LookIn:=xlValues, lookat:=xlPart)
If Not FoundCell Is Nothing Then
GoTo 処理
Set FirstCell = FoundCell
Do
Set FoundCell = Range("A:A").FindNext(after:=FoundCell)
If FoundCell.Address = FirstCell.Address Then Exit Do
GoTo 処理
Loop
処理:
With FoundCell.Offset(, 1)
If .Value = "" Then
.Value = Cells(i, "E")
Else
.Value = .Value & "," & Cells(i, "E")
End If
End With
End If
Next i
End Sub
これで重複があっても1セル内に表示されます。
※ 当然重複がなくても大丈夫です。m(_ _)m
No.8ベストアンサー
- 回答日時:
No.1・7です。
何度もごめんなさい。
すでに解決済みかと思いますが、前回のコードが間違っていました。
興味があれば↓のコードに変更してみてください。
Sub Sample2()
Dim i As Long
Dim FoundCell As Range, FirstCell As Range
Range("B:B").ClearContents
For i = 1 To Cells(Rows.Count, "D").End(xlUp).Row
Set FoundCell = Range("A:A").Find(what:=Cells(i, "D"), LookIn:=xlValues, lookat:=xlPart)
If Not FoundCell Is Nothing Then
Set FirstCell = FoundCell
GoTo 処理
Do
Set FoundCell = Range("A:A").FindNext(after:=FoundCell)
If FoundCell.Address = FirstCell.Address Then Exit Do
GoTo 処理
処理:
With FoundCell.Offset(, 1)
If .Value = "" Then
.Value = Cells(i, "E")
Else
.Value = .Value & "," & Cells(i, "E")
End If
End With
Loop
End If
Next i
End Sub
※ セルの配置は前回アップした画像通りだとします。
どうも失礼しました。m(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの条件付き書式で*を使いたい 4 2022/05/13 16:49
- Excel(エクセル) 一つのセルに複数の関数を入力する方法 4 2022/09/30 13:42
- Excel(エクセル) Excelの空文字判定について 7 2023/01/06 13:25
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/15 08:30
- Excel(エクセル) エクセルのことで教えてください。 A1セルに、 別シートのA1セルが1のときは「A」、2のときは「B 4 2023/02/24 23:08
- Excel(エクセル) 【画像あり】A1が●+B1と同じ文字がB列にある+C1と同じ文字がC列にある場合D1に〇を付ける 3 2023/03/09 18:18
- Visual Basic(VBA) VBA初心者です 検索した数字の行に色をつける 5 2023/02/13 14:22
- Excel(エクセル) capeofdragonと申します Excel2016を使っておりまして 半角又は全角の任意文字列が 2 2022/10/31 13:51
- Visual Basic(VBA) エクセルVBAについて 2 2023/01/31 16:21
- Excel(エクセル) エクセルで文字列と数字が混在する列に書式設定したい。 3 2022/12/19 09:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでの作業計算方法について
-
はがきについて。
-
エクセル 文字を増やしたい。
-
セルの内容表示が邪魔になる
-
Microsoft365に変えたのですが...
-
エクセルの計算
-
Microsoft1Officeの互換ソフト...
-
【マクロ】その時、その時で変...
-
【マクロ】読取専用のファイル...
-
エクセル初心者です 関数の入れ...
-
Excel ピボットテーブルで日付...
-
【関数】適切な文字数の数字を...
-
LOOKUP関数を使えばいいのでし...
-
Aというブックの1というシート...
-
エクセル関数を教えてください
-
Excelのチェックボックスの使い...
-
エクセル 白黒印刷で白線を印刷...
-
時間によってファイル名が変わ...
-
WPS OFFICEでの縦書きについて
-
エクセルの条件付き書式につい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 2019 のピボットテーブル...
-
[関数得意な方]教えて下さい・...
-
Excelにてある膨大なデータを管...
-
[関数について]わかる方教えて...
-
Excel初心者です。 詳しい方、...
-
excelの不要な行の削除ができな...
-
エクセル関数に詳しい方教えて...
-
INDIRECTを使わず excelで複数...
-
[オートフィルタ]で抽出された...
-
エクセルの神よ、ご回答を! エ...
-
エクセル関数に詳しい方、教え...
-
各ページの1番上の表示について
-
Excelで写真のような表を作った...
-
エクセルで不等号記号(≠)が上に...
-
数学 Tan(θ)-1/Cos(θ)について...
-
Excel 2019 は、SPILL機能があ...
-
Excelで全角を半角にしたいので...
-
条件付き書式を教えてください
-
Excel フィルターを掛けた状態...
-
[オートフィルタ]の適用範囲の...
おすすめ情報