エクセル2003で特定の文字列を削除する処理について

このQ&Aのポイント
  • エクセル2003を使って特定の文字列以降の文字列を削除する処理について質問します。具体的には、特定の文字列【@】と【変化】がバラバラに出てきますが、これらを一括で削除する方法を知りたいです。
  • 現在は置換機能を使って【@】と【変化】の後に「*」を付けて削除していますが、処理後にスペースが残ってしまい、自動調整ができません。どのようにしてスペースをつめることができるでしょうか。
  • または、別の方法で特定の文字列を一括で削除するマクロを紹介していただけると助かります。エクセル2003を使用しています。
回答を見る
  • ベストアンサー

こんにちは いつもお世話になっています

こんにちは いつもお世話になっています エクセル2003を使っています。 特定の文字列以降の文字列を(特定文字列自身も含めて)削除する処理に関して質問します。 特定の文字列は二つあり、【@】と【変化】です(【 】も含みます)。 この二つの文字列はバラバラに出てきます。一方だけがでてくるセル、両方出てくるセル、両方出てこないセル、があるという意味です。これらはB列だけにあります。  現在のやり方は  「*」を各特定文字の後ろに付けて、置換機能で削除しています(「【@】*」、「【変化】*」みたいに)しかし、二つの文字列に対して別々にやるようなので、記録マクロで一括で処理しています。  ここで質問なのですが  置換後の文字列は空白にしているのですが、スペースが残ってしまいます。つまり、処理後にエクセルの書式メニューから「行」-「自動調整」をしてもスペースをつめられない状態です。どうすればスペースをつめられるでしょうか。  あるいは、置換でなく、適当なマクロを紹介していただけると助かります。  よろしくお願いします。

  • 5goma
  • お礼率82% (265/321)

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

  • ベストアンサー
  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.10

 #8 DOUGLAS_ です。 >置換した部分を左クリックしたまま >カーソルで最終行まで選択できてしまう部分のこと >目で見る限りでは空白なのに、黒く反転表示される  #9 xls88 さんがお書きのように「改行文字」が挿入された状態かと存じます。  お示しの「記録マクロ」を Sub Macro1() Cells.Replace What:=Chr(10) & "【@】*", Replacement:="", LookAt:=xlPart, SearchOrder _ :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False Range("L5").Select Cells.Replace What:=Chr(10) & "【変化】*", Replacement:="", LookAt:=xlPart, SearchOrder _ :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False Cells.Replace What:="【@】*", Replacement:="", LookAt:=xlPart, SearchOrder _ :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False Range("L5").Select Cells.Replace What:="【変化】*", Replacement:="", LookAt:=xlPart, SearchOrder _ :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False End Sub のように書き直して、指定文字列の前に「改行文字」が入っている場合を先に置換しておくことで、問題が回避できるかと存じます。  ひょっとしたら、「Chr(10)」(vbLf、ライン フィード文字)以外にも、「目で見る限りでは空白」の文字というのがあるかも知れませんので、その数だけ「Chr(※)」を含む ステートメント の部分を付け加える必要があるかも知れません。  「Chr(10)」以外の場合については、例えば、「目で見る限りでは空白なのに、黒く反転表示される」セル を A1 とすると、 =CODE(A1) という式で、A1セル 内の 文字コード が取得できますので、その数字を「Chr(数字)」のように書いていけばOKです。

5goma
質問者

お礼

DOUGLAS 様 ありがとうございました。 お蔭様で解決しました。 改行文字とかChr関数とか勉強しなければなりませんが、とりあえず作業が前に進みます。 私の言葉足らずを補ってご理解頂き助かりました。 簡単で恐縮ですが、お礼申し上げます。

その他の回答 (9)

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.9

>回答番号:No.3 この回答へのお礼 特定文字(【@】【変化】)のところで Alt+Enterでセル内改行されているのでは? セル範囲は限定した方が無難です。 Cellsだとシート全体のセルが処理対象になります。 下記で試してみてください。 とりあえず、全て特定文字の処で改行されている場合です。 Sub test1() With Range("B1:B10") .Replace What:=Chr(10) & "【*】*", Replacement:="", _ LookAt:=xlPart, SearchOrder:=xlByRows, _ MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False End With End Sub あるいは Sub test2() With Range("B1:B10") .Replace What:=Chr(10) & "【@】*", Replacement:="", _ LookAt:=xlPart, SearchOrder:=xlByRows, _ MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False .Replace What:=Chr(10) & "【変化】*", Replacement:="", _ LookAt:=xlPart, SearchOrder:=xlByRows, _ MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False End With End Sub

5goma
質問者

お礼

xls88 様 ありがとうございました。 重ね重ね言葉足らずで申し訳ありません。 PDICという辞書からのコピーしたデータなのですが、改行文字に気がつきませんでした。 特定文字の出現の仕方が不規則なせいか、せっかく教えていただいたコードがうまく働くところと、残ってしまうところとがありました。私の使い方が悪いのかもしれません。このコードでまた勉強させていただきます。 簡単で恐縮ですが、お礼申し上げます。

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.8

1)置換後の文字列は空白にしているのですが、スペースが残ってしまいます。 2)つまり、処理後にエクセルの書式メニューから「行」-「自動調整」をしてもスペースをつめられない状態です。 3)どうすればスペースをつめられるでしょうか。  (2) の頭に「つまり」と書かれていますが、(1) と (2) とが同義とは思えません。  (1) に書かれている「スペース」というのは、もちろん「全角スペース」とか「半角スペース」というような「スペース」ですよね。  (2)・(3) に書かれている「スペース」というのは、どういう意味でしょうか?  「スペースをつめられない状態」とお書きですが、[書式(O)] - [行(R)] - [自動調整(A)] を実行しても、選択した範囲の セル 内の内容に応じて、行の高さが自動的に調節されるだけです。  具体的には、[書式(O)] - [行(R)] - [自動調整(A)] を実行した場合には、「セル の内容が1行内に納まる セル」と「何も入力されていない 空白セル」とは同じ高さ(実際には、標準フォント の約1.1倍の高さ:http://homepage2.nifty.com/zaco/xlgrd/page01.html#3)に調節されるはずです。  もし(3)にお書きの意味が、下記のような意味合いでしたら、補足願います。 ・空白セル のある行の高さを「0」にする ・空白セル のある列の幅を「0」にする

5goma
質問者

お礼

DOUGLAS 様 ありがとうございました。 言葉足らずでごめんなさい。 置換した部分を左クリックしたままカーソルで最終行まで選択できてしまう部分のことを言いたかったのです。目で見る限りでは空白なのに、黒く反転表示されるのがわからないんです。 これも表現がおかしいかもしれませんが、ご理解いただけるとありがたいです。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.7

例えばA列のA1セルから下方にデータがあるとします。 B1セルには次の式を入力して下方にオートフィルドラッグします。 =IF(A1="","",IF(AND(COUNTIF(A1,"*【@】*")>0,COUNTIF(A1,"*【変化】*")>0),IF(FIND("【@】",A1)>FIND("【変化】",A1),LEFT(A1,FIND("【変化】",A1)-1),LEFT(A1,FIND("【@】",A1)-1)),IF(COUNTIF(A1,"*【@】*")>0,LEFT(A1,FIND("【@】",A1)-1),IF(COUNTIF(A1,"*【変化】*")>0,LEFT(A1,FIND("【変化】",A1)-1),A1)))) C1セルには次の式を入力して下方にオートフィルドラッグします。 =IF(B1<>"",COUNTIF(B$1:B1,"?*"),"") E列に空白の行を除いた答えの表を表示させるとしてE1セルには次の式を入力して下方にオートフィルドラッグします。 =IF(ROW(A1)>MAX(C:C),"",INDEX(B:B,MATCH(ROW(A1),C:C,0)))

5goma
質問者

お礼

KURUMITO 様 ありがとうございました。 詳しく教えていただいて助かりました。 とても勉強になりました。 簡単で恐縮ですが、お礼申し上げます。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.6

No.4・5です! ごめんなさい。 ダブって投稿してしまいました。 どちらかは無視してください。m(__)m

5goma
質問者

お礼

tom04 様 ありがとうございました。 せっかく作っていただいたコードなんですが「型が一致しません」というエラーがでました。私の作動のさせ方が間違っているのかもしれません。 簡単で恐縮ですが、お礼申し上げます。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.5

こんにちは! 無理やりって感じの方法です。 Sheet上のセルに空白が残っているとしての方法です。 ↓のコードをSheet見出し上で右クリック、 → コードの表示 を選択し コピー&ペーストしてマクロを実行してみてください。 Sub test() Dim i, j, k As Long Dim str, buf As String For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row For j = 1 To Cells(i, Columns.Count).End(xlToLeft).Column For k = 1 To Len(Cells(i, j)) str = Mid(Cells(i, j), k, 1) '↓のIF文内 前者のスペースは「半角スペース」・後者のスペースは「全角スペース」で入力 If str = " " Or str = " " Then str = "" '←続けて""を入力 End If buf = buf & str Next k Cells(i, j) = buf buf = "" Next j Next i End Sub 以上、お役に立てばよいのですが・・・m(__)m

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

こんにちは! お役に立てるかどうか判りませんが・・・ Sheet上には空白が残っている状態でのコードです Sheet見出し上で右クリック → コードの表示 を選択し ↓のコードをコピー&ペーストしてマクロを実行してみてください。 Sub test() Dim i, j, k As Long Dim str, buf As String For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row For j = 1 To Cells(i, Columns.Count).End(xlToLeft).Column For k = 1 To Len(Cells(i, j)) str = Mid(Cells(i, j), k, 1) '↓のIF文内 前者のスペースは「半角スペース」・後者のスペースは「全角スペース」で入力 If str = " " Or str = " " Then str = "" '←続けて""を入力 End If buf = buf & str Next k Cells(i, j) = buf buf = "" Next j Next i End Sub 以上、お役に立てばよいのですが、 ダメならごめんなさいね。m(__)m

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.3

1)他に、【@】と【変化】に類似する文字が無いのなら B列の対象セル範囲を選択 編集メニューの「置換」で 検索する文字列に、【*】 置換後の文字列に、何も入力せず空白のまま で「すべて置換」 これでスペースが残ることなく特定文字列を削除できます。 それでもスペースが残るようなら 置換後の文字列入力欄でBackSpaceキーを操作し、全く何もない状態を確認してください。 2)類似する文字があるのなら、【@】と【変化】個々に「置換」を行ってください。 B列の対象セル範囲を選択 編集メニューの「置換」で 検索する文字列に、【@】 置換後の文字列に、何も入力せず空白のまま で「すべて置換」 >二つの文字列に対して別々にやるようなので、記録マクロで一括で処理しています。 「新しいマクロの記録」で得られたコードがあるなら提示してみてください。

5goma
質問者

お礼

xls88 様 ありがとうございました。  言葉足らずで申し訳ありません。  記録マクロは以下の通りです。   Sub Macro1() Cells.Replace What:="【@】*", Replacement:="", LookAt:=xlPart, SearchOrder _ :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False Range("L5").Select Cells.Replace What:="【変化】*", Replacement:="", LookAt:=xlPart, SearchOrder _ :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False End Sub このマクロを実行後、「行」の自動調整をするのですが、最終行全部とその前の行(この行には検索をかけた特定文字列の直前の文字列がありますが)に表示上は空白ですがカーソルでなぞると反転表示され選択される部分が残ります。選択したまま削除すると「行」の自動調整が働いて空白部分がつまります。しかし、この削除処理をしないと自動調整がきかず空白のままなのです。この一行ちょっとのことを「スペース」と表現してしまいました。該当セルが多数のため手動での上記の処理は避けたいです。 この「スペース」を削除して自動調節を効かせる方法、あるいはマクロの手直しを教えていただけないでしょうか。

noname#192382
noname#192382
回答No.2

あなたのマクロの中で置換後の文字のところに空白でなく、NULL(なにも入力しない)に指定すればうまくいくと思います。

5goma
質問者

お礼

optimumsoup 様 ありがとうございました。  言葉足らずで申し訳ありません。  記録マクロは以下の通りです。   Sub Macro1() Cells.Replace What:="【@】*", Replacement:="", LookAt:=xlPart, SearchOrder _ :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False Range("L5").Select Cells.Replace What:="【変化】*", Replacement:="", LookAt:=xlPart, SearchOrder _ :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False End Sub このマクロを実行後、「行」の自動調整をするのですが、最終行全部とその前の行(この行には検索をかけた特定文字列の直前の文字列がありますが)に表示上は空白ですがカーソルでなぞると反転表示され選択される部分が残ります。選択したまま削除すると「行」の自動調整が働いて空白部分がつまります。しかし、この削除処理をしないと自動調整がきかず空白のままなのです。この一行ちょっとのことを「スペース」と表現してしまいました。該当セルが多数のため手動での上記の処理は避けたいです。 この「スペース」を削除して自動調節を効かせる方法、あるいはマクロの手直しを教えていただけないでしょうか。 NULLに指定する方法も教えていたけると助かります。一応ネットで調べたんですが・・・

noname#204879
noname#204879
回答No.1

「置換」でも「適当なマクロ」でもない別解です。 D1: =IF(ISERROR(FIND("【@】",A1)),1000,FIND("【@】",A1)) E1: =IF(ISERROR(FIND("【変化】",A1)),1000,FIND("【変化】",A1)) B1: =LEFT(A1,MIN(D1:E1)-1)

5goma
質問者

お礼

mike_g 様 ありがとうございました。 詳しく教えていただいて助かりました。 とても勉強になりました。 簡単で恐縮ですが、お礼申し上げます。

関連するQ&A

  • エクセル2003での置換について教えてください。

    エクセル2003での置換について教えてください。 こんにちは いつもお世話になっています エクセル2003での置換について教えてください。 特定の文字列以降の文字列を(特定文字列自身も含めて)削除したいのです。  特定の文字列は二つあります。【@】と【変化】です(【】も含みます)。  この二つの文字列はバラバラに出てきます。一方だけがでてくるセル、両方出てくるセル、両方出てこないセル、があるという意味です。  「*」を各特定文字の後ろに付けて、置換機能で削除していますが、二つの文字列に対して別々にやっています。 これを一度で置換して削除する方法を教えてください。  よろしくお願いします。

  • いつもお世話になっております。

    いつもお世話になっております。 エクセルのcount関数について質問させていただきます。 数値が入っているセルを範囲指定する際、すぐ隣に数値が入っているのに、そこを含まずに指定すると、エラースマートタグの「このセルにある数式は、隣接したセル以外の範囲を参照します」の表示が出ますが、同じ式で1か所文字列に変更するとエラーが消えます。 文字列を削除してセルを空白にしてもエラーは再度出ます。この違いがよくわかりません。 どういう意味なのか教えていただけないでしょうか。よろしくお願いします。 画像の数式は、いずれの行もB列からE列まで選択してcount関数をF列に入れています。

  • ワードのマクロについて

    お世話になります。 エクセルのマクロについてはここでよくアドバイスをもらっていますが、今回ワードでの処理について教えてください。 1つのフォルダにワード文書がたくさん入っています。 各ワード文書に対し以下の操作を自動化させたい。 1.すべてを選択(ctrl+A) 2.置換で「改行」をすべて削除   あいまい検索のチェックをはずした上で 検索する文字列 ^p  置換後の文字列は「空白」   すべて置換 3.置換で「スペース」をすべて削除   あいまい検索のチェックをはずした上で 検索する文字列 ^w  置換後の文字列は「空白」   すべて置換     4.すべてを選択 5.メニュー→書式→文字種の変換→全角にチェック→OK    ですべての文字を全角にする まとめると「すべての改行、スペースを削除し、全文字を全角に統一する」 この作業をフォルダ内の全ワード文書に対して一括で処理できないでしょうか? ちなみにワード文書は元々メモ帳(*.txt)で作成されていたものをリネームソフトで拡張子を*.docに変換したものです。そのためファイルを閉じるときに「書式なし形式で使用できない機能が含まれています」と聞いてきますが「はい」でOKです。 アドバイスおねがいします。

  • Excelで電話番号の0を保持して-を取り去るには

    Excelのシートに、 052-123-4567 080-1234-5678 のような電話番号が A1~A999のセルに入力されています。 これらのすべての電話番号の -(半角ハイフォン)を取り去って、 0521234567 08012345678 というようにしたいのですが、 置換で 検索する文字列のボックスに - (半角ハイフォン) 置換する文字列のボックスに空白 (何も入力しない) を指定して置換すると、 521234567 8012345678 というように-は削除されますが、 頭の0が取り省かれてしまいます。 これは、数値として扱われているため0が取り省かれていると思われます。 頭に'(半角アポストロフィー)を付けけばうまくいきますが、 すべての電話番号に'を付ける必要があり現実的ではありません。 (問1) セルの書式を文字列にして、 置換してみましたが、それでも0が取り省かれてしまいます。 先に、セルの書式を文字列にしてから、その後で、電話番号を読み込ませて、セルの書式が文字列になっていることを確認してから置換しても、0が取り省かれてしまいます。 なぜ、セルの書式を文字列にしても、0が取り省かれてしまうのでしょうか? (問2) 置換ダイアログのオプションで、 置換後の文字列の書式の表示形式で文字列を指定して、 置換してみると、 -が取れ省かれずに 052-123-4567 のままになっています。 置換後の文字列の書式の表示形式で文字列を指定しないと -が取り省かれるのに、 置換後の文字列の書式の表示形式で文字列を指定すると、 なぜ、-が取り省かれなくなるのでしょうか? (問3) 0が取り省かれずに-を取り除くように置換するには、 どのようにすればよいのでしょうか。 よろしくお願いします。 (Windows10)

  • エクセルでセルに 2010/1/2 とあります。書式は日付です。これを

    エクセルでセルに 2010/1/2 とあります。書式は日付です。これを20100102と8桁の文字列に置き換えたいのですがどうしたらよいでしょう。「/」を置換で削除して文字列に変えると 201012としかなりません。お願いします。

  • 改行コードを削除出来ない

    エクセルファイルのセルに文字列が大量に入ってます。1セル当たりは4,5文字です。 文字列の後ろに改行コードが付いてるようのです。 改行コードだと思った理由 ・LEN(セル)で文字数を表示させると、見た目より1文字多い ・セルを選択し画面上部の編集ボックス?で文字列の後ろをカーソルでクリックし、  左矢印←を押すと、2回押しで動く。いかにも見えない一文字があるかのように動く ・文字列後ろをクリックしバックスペースを押すと←による動きが正常になる 取った対策 セルをいくつか選択し、置換処理で削除しようとしたが、削除出来なかった。 検索文字列: 改行コード(ctrl+J) 置換文字列: なし バックスペースキーで解消出来ますが、全セルで行うには数が多過ぎます。 置換操作でなぜ削除出来なかったのでしょうか?改行コードではないのか?とも疑ってます。 非常に小さいスペース? どうすれば全部削除出来るでしょうか?

  • エクセル マクロ VBA

    エクセルのマクロについて質問です。 『集計』というブックの『集計開始』というシートに     A列    B列     C列 1行目 見出し  見出し   見出し      (商品名)  (支店)  (個数)         2行目 コメント  空白     空白   3行目 空白   空白     空白 4行目 商品名  支店     個数  5行目 空白   空白     空白 6行目 空白   空白   コメント1 7行目 空白   空白     空白 8行目 空白   空白   コメント2 9行目以降    上記のデータ(見出しを除く)の繰り返し というデータが入っています。 B列の中に『AAA』という文字が含まれていたら、そのセルを空白に置換し、 含まれていなかったら、そこで処理がとまったりエラーが出たりしないで次のステッップへ進み、 C列の中に『B』という文字が含まれていたら、そのセルを空白に置換し、 含まれていなかったら、そこで処理がとまったりエラーが出たりしないで次のステッップへ進み、 (今は、手作業で編集→置換→検索する文字列の中に『B*』と入力し、 置換後の文字列を空白にしてすべて置換ということをやっています。)                            ABC列(データーの入っている行まで)の空白を含む行を一括削除し、 以下のような形にしたいのです。     A列    B列     C列 1行目 見出し  見出し   見出し      (商品名)  (支店)  (個数)         2行目 商品名  支店     個数  3行目 商品名  支店     個数          ・         ・ このようにするマクロ文はどのようになりますでしょうか?

  • いつもお世話になっております。

    いつもお世話になっております。 エクセル、VBAに関する質問です。 ● 行削除について ある特定の行を削除したいと考えています。 添付ファイルを参照下さい。 ある特定の列(ex B列)内データに対し紐づいている特定の列(ex A列) が専用(紐付⇒1)(ex78110に対しABCが1データ紐付いている) の場合は、行を削除せず。 逆に、ある特定の列(ex B列)内データに対し紐づいている特定の列(ex A列) が共通(紐付⇒2以上)(ex 紐付⇒3。12310に対しFBA、RFA、GTC の3データが紐付いている)の場合は、行を削除。 という条件にて、行削除を実行したい、と考えています。 どの関数、コードを利用するかどうか。。 アイデアがまるで出てきません。 お知恵を貸してください。よろしくお願いします。

  • excel_特定のセル範囲で同じ文字列が有ったら色

    マクロ初心者です。 excel2002マクロ_特定のセル範囲で同じ文字列が有ったらその数によりセルを色分けしたい 特定のセル範囲で文字列が入っているところと空欄のところがあります。 空欄のところには、後から文字列が入るところと空欄のままのところがあります。 その範囲内で同じ文字列があった場合、2個の時、3個の時、4個の時、5個、6個、7個、8個、9個、10個以上の時に、それぞれ決めておいた色でセルを色分け表示したいです。 文字列の順番はランダムです。 excel2002なので、3種類までなら条件付き書式で設定できるのですが、それを超える場合は設定できません。 それで、これをマクロで設定できるでしょうか。 条件付き書式で設定した場合は、文字列を入力した時点でセルの色はすぐに反映されますが、マクロの場合もそのようにすることは可能でしょうか。 よろしくお願いします。

  • 【エクセル】文字列置換について

    エクセルでの文字列置換についてお教えください。 一部の文字列が含まれていたら、置換するという処理は可能ですか? 例えば、 ”ああああいいいい”  ”ああああうううう” ”ああああええええ” セルに、上記の文字列が、あったとして、 ”ああああ”が、含まれていたら、 すべてのセルを、”おおおお” に、置き換える(差し替える)という処理を想定しています。 よろしくお願いいたします。

専門家に質問してみよう