• ベストアンサー

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

英字と数字のセルがあります。 そこから特定の英字をひとつだけ削除したいのです。 例 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/17068)
回答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
質問者

お礼

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

関連するQ&A

  • 英字を含まない文字行を削除

    英字を含まない文字行を削除 1491 1492 1493 1494 1495 1496 1497 1498 1499 149A 149B 149C 149D 149E 149F このような16進数が書かれたテキストファイルがあります。 149A 149B 149C 149D 149E 149F このように英字が含まれていない数字のみの行を削除する方法を教えてください。

  • Excel VBAにてSQLで文字列中の空白を削除

    投稿させていただきます。 MSDNのフォーラムの下記URLの質問にて有効な情報を得ることができませんでしたのでここでもお聞きします。 http://social.msdn.microsoft.com/Forums/ja-JP/vbajp/thread/f8d2eae8-8547-48f8-96e2-12e5e01dc294 ADOとMicrosoftJetOLE DB4.0プロバイダを使用して、自らのブックからワークシートへ接続しています。 SELECTするワークシート(テーブル)の1つのフィールドには文字列中に空白が含まれており、それを無視して、WHERE句の条件を適用させて、データ抽出をしようとしています。 Trim関数は左右の空白削除で、使えることはわかりました。 しかし、文字列間となるとREPLACE関数で置き換えてやるのが最善と考え、それを実行しましたが、「式に未定義関数Replaceがあります」とエラーがでます。 抽出結果には置き換え前のデータを表示させたいです。 REPLACE関数に限らず、何か良い方法はありませんでしょうか。 環境はWindows 7 Excel2003です。 よろしくお願いします。

  • 文字を削除して合計 Excel2007

    Excelで数字を含む文字列から数字のみを取り出し、合計する方法を考えているのですが、わかりません。  |..A..|..B..|..C.|..D.| .2|50%|30%|20%|10%| という風にセルに記入している場合、E2に全体としての割合を表す関数を作りたいと思っています。 とりあえず各セルから%を除いて数字のみを表示する関数を作りました。 =LEFT(A2,LEN(A2)-1) 例はデータが少ないのですが、実際は多数のデータを使うつもりなので、全ての値を足すのでなく、 指定した範囲内の値を合計するようにしたいと思っています。 作業列を使えばできるかもしれませんが、使わない方向でやりたいので、宜しくお願いします。 ちなみに、各割合は、別のシートから=で値を入力しています。

  • エクセルで文字を数値に変換したい!

    現在、1セルに1文字(あ~ん)が入っている表があるのですが、この文字たちを数字に変換したいのですが、どんな関数を使えばいいのでしょうか?   A B  C D E  1 エ ン ブ レ ム  → 4 5 3 4 3 2 リ フ ト       → 2 3 5 といった具合にあ行 1 い行 2 ウ行 3 エ行 4 お行 5 なのです。 ただし、「ん」だけ前に文字の次の行、前の文字がオ行の場合、1に戻るなのですが。 よろしくお願いします。

  • 文字間の空白の削除を教えてください。

    全角文字の文字間にある空白を削除したいです。 山 田 太 郎 → 山田太郎 下記のとおり置き換えようとしてもダメでした。 select replace('山 田 太 郎',' ','') from user_master; 左空白削除(ltrim() 関数)、右空白削除(rtrim() 関数)、左右空白削除(trim() 関数)などは、ありますが。。。 文字間の空白削除は、どうすれば良いのですか?

  • 英字の大文字小文字および混在の扱い

    早速ですが、 現在、指定された単語を含む文字列を抜き出す様なcgiを作っています。 現在のコーディングです。 foreach $line (@lines) { $an = index $line,$skey; if ($an >= 0) { 上記では、 $skey と全く同じモノしか検索(抽出)出来ないため、 今回、$skey が英字の時は、大文字、小文字、およびその混在でも 抜き出せるように改善したいと思っています。 例えば、abc と指定されたら、abcでもABCでもAbcでも抜き出せるような。 (英字と数字の混在や、全角は対象外で構いません。) 考え方として、 指定されたキー(文字列)を基に大文字、小文字を作り、 (uc関数、lc関数) 両方で検索してやれば殆どokと思うのですが、 混在の場合はどうやればいいか思いつきません。 また、 そもそも指定されたキーが英字であるかの判断方法が分かりません。 (大文字、小文字の変換は英字に限りますので) ということで、 (1)大文字、小文字の混在時の対応方法 (2)指定されたキーが英字であるかの判断方法 を教えていただきたくお願いします。

    • ベストアンサー
    • Perl
  • EXCEL VBA 記号の削除

    A列3行目からはじまる(A列2行目タイトル=FA)データより"!"や"#"などの記号を取り除いた ものをE列に表したいと思っています。 データを半角にして、ASC関数を使って記号を取り除こうとしたのですが、半角になるだけで 記号を取り除くことができません。 If の後、ASC関数は使用せず、"!"や"#"を指定しても結果が同じだったんですが REPLACEの使い方が間違っているのでしょうか? Dim セル As Range Dim TARGET As Range Dim 変換文字 As String Dim i As Long Dim W As Worksheet Set W = Sheets("DATA転記") Set TARGET = W.Range("A3", Range("A65536").End(xlUp)) For Each セル In TARGET 変換文字 = StrConv(セル.Text, vbNarrow) For i = 1 To Len(変換文字) If Asc(変換文字) >= 32 And Asc(変換文字) <= 47 And _ Asc(変換文字) >= 58 And Asc(変換文字) <= 64 And _ Asc(変換文字) >= 91 And Asc(変換文字) <= 96 And _ Asc(変換文字) >= 123 And Asc(変換文字) <= 126 Then _ 変換文字 = WorksheetFunction.Replace(変換文字, i, 1, "") End If Next i セル.Cells(, 5).Value = StrConv(セル.Text, vbWide) Next セル

  • Excelで空白行を削除したい

    2500行位使用しているシートのなかに、どのセルも空白になっている不要な行が300行くらい混ざっています。 この行を自動的に削除するにはどうすれば良いでしょうか。 ただ、その行のA~Eセルは空白でもFセルに値が入っているなど完全に空白でない行は削除できません。 メニュー、関数、VBAなど有れば教えてください。

  • エクセル関数を使わないで特定の文字より右を消したい

    あるサイトより大量のデータをコピペすると 「●月●日 ●時●分」となります。 当方は日にちのみ必要なので時間の部分が必要ないので 削除したいのですが 例えば、2月21日 23時 7分を 置換で 検索する文字列に 日* と入力して 置換後の文字列を空白にすると 2月21 になってしまい必要な「日」までもが消えてしまいます。 マクロを組んで一気に消したいので LEN関数やREPLACEなど使わずに消す方法はありますか? 又、関数を使っても簡単にマクロを組める方法があれば教えていただけたらと 思います。 どうぞよろしくお願いします。

  • 削除される行と、されない行があります

    VBAで、もしD列とE列が同じ数字ならその行を削除、 という式を作りました。なお、D列が0より大きいときに その式を適用するようにしました。 なぜか、D列とE鉄が同じ場合は、きちんと削除されるのに、 ある行だけ削除されません。 理由がわかりませんでした。 どのようなことが考えられますか。 D列もE列も半角で数字が入っていました。

専門家に質問してみよう