• ベストアンサー

途中にある一文字を削除したい

英字と数字のセルがあります。 そこから特定の英字をひとつだけ削除したいのです。 例 ABCD12345 → ABC12345 AMDD29384 → AMD29384 ERKGD45096E → ERKG45096E となるようにです。Dの文字をひとつ削除します。 数字の並びも変則です。英字はだいたい3~6文字ぐらい、数字は6桁ぐらいで、数字の後に英字が1文字ついてるものもあります。 1000行ぐらいあります。 簡単に変換できる方法がありましたら教えてください。 よろしくお願いします。 自分が考えたのは、LFET関数で英字の文字を表示し、LEN関数でその文字数を数え(これは行を分別しやすいように)、REPLACE関数で何文字目を指定し、その指定文字(この場合はD)を空白に変換し、置換で空白をなしにするものです。

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

  • ベストアンサー
  • keirika
  • ベストアンサー率42% (279/658)
回答No.1

文字列がA1にあり、文字数が100を超えないと仮定します。 =LEFT(A1,FIND("D",A1,1)-1)&MID(A1,FIND("D",A1,1)+1,100) でどうでしょうか。

skauranbo
質問者

お礼

素早い回答ありがとうございます。 なんだか焦ってしまい、わかりにくい質問で申し訳ありませんでした。 できました!FIND関数があったのですね。また、ひとつ勉強になりました。

その他の回答 (3)

  • Masa2072
  • ベストアンサー率51% (94/182)
回答No.4

いくつかの不明点があります。 削除する文字(提示された例ではD)ですが複数ある場合の処理はどうなりますか? はじめに見つかったDのみを削除するのであれば、ほかの方が回答されている通りです。 > 自分が考えたのは、LFET関数で英字の文字を表示し、LEN関数でその文字数を数え(これは行を分別しやすいように)、REPLACE関数で何文字目を指定し、その指定文字(この場合はD)を空白に変換し、置換で空白をなしにするものです。 LEFT関数で英字を抜き出すために英字部分の文字数が必要になります。 つまりLEN関数で英字部分の文字数を取得する前に文字数が分かっていることになります。 Dを空白に変換して、置き換えで空白をなしに・・というのもおかしなもので、最初からDを""で置き換えしてしまえばよいだけの話です。 質問内容からすると数字直前の文字で指定の文字に該当した場合のみ削除するようにも読めるのですが、それであれば数字の先頭位置を特定する必要があります。 For NextとMidを使い2文字目から順に1文字取り出しながら数字かどうかを検査し、数字を見つけたらFor NextをExit Forで抜ける。 見つかった場所の左の文字が、指定の文字(D)と一致したらDの場所より左の文字列と右の文字列を結合する。 といった処理をVBAにするとこんな感じかな ※置き換え対象がA1から入力されていて、結果をB列に出力、検索文字はC1に入力しておく Sub Sample() Dim C As Range Dim i As Integer For Each C In Range("A1", Range("A1").End(xlDown)) For i = 1 To Len(C.Value) If IsNumeric(Mid(C.Value, i + 1, 1)) Then Exit For End If Next If i <= Len(C.Value) And Mid(C.Value, i, 1) = Range("C1").Value Then '#変数 i が文字列長以下(数字があった)、数字の文字がC1に入力された文字と一致する '#(変数 i が文字長より大きければ文字列中に数字が無い) C.Offset(0, 1).Value = Left(C, i - 1) & Mid(C.Value, i + 1, Len(C.Value)) Else C.Offset(0, 1).Value = C.Value End If Next End Sub

skauranbo
質問者

お礼

回答ありがとうございました。 焦っていたので、わかりにくい質問で申し訳ありませんでした。 VBAで、また違う切り口をしてくださり、ありがとうございました。 勉強になります。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

質問文はもっと文章で要点をしっかり書いてください。 (1)削除刷るのは 左から見ていって初出の Dの文字 1文字 でよいですか? >数字の並びも変則です。英字はだいたい3~6文字ぐらい、数字は6桁ぐらいで、数字の後に英字が1文字ついてるものもあります。 >1000行ぐらいあります。 も書く必要は無いのでは? 上記ならしつもんいもならない簡単なことです。 Find関数でDを見つけ(初出のDを見つける。それしか見つけない。) 見つかった位置の手前までの文字列と 見つかった位置の次から終わりまでの文字列を 切り出して 2つを結合(&かCONCATENATE)すればしまい。 =LEFT(A1,FIND("D",A1)-1)&RIGHT(A1,LEN(A1)-FIND("D",A1)) Dは実情に合わせて大文字小文字半角全角を選んでください。 もし上記が見当ハズレなら、質問の書き方が不十分です。

skauranbo
質問者

お礼

回答ありがとうございます。 焦っていたので、わかりにくい質問で申し訳ありませんでした。 Dが続いていた場合、削除するのは最初のDです。これで明日、仕事が進みそうです。FIND関数があったのですね。ありがとうございました。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

=IF(ISERROR(FIND("D",A1)),A1,REPLACE(A1,FIND("D",A1),1,"")) ではどうでしょうか?

skauranbo
質問者

お礼

回答ありがとうございます。 焦っていたので、わかりにくい質問で申し訳ありませんでした。 また、違う他の関数を使っての回答、これも勉強になります。ありがとうございました。