いくつかの不明点があります。
削除する文字(提示された例では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
お礼
素早い回答ありがとうございます。 なんだか焦ってしまい、わかりにくい質問で申し訳ありませんでした。 できました!FIND関数があったのですね。また、ひとつ勉強になりました。