• 締切済み
  • すぐに回答を!

《excel or word》全角文字を検索して削除、もしくは半角文字のみを抜き出したい

全角文字で書かれた、日本語の文があります。(一般的な文章ですので、文字数は勿論任意です) その中に、半角英数字8文字で書かれたID番号が点在しています。 (IDの前後の文字数、またひとつの分の総文字数は任意です) …という内容が一つのセルに入っていて、それが数千行あるエクセルのブックがあります。 この中から、半角英数字8文字のIDのみ、取り出したいのです。 (半角英数字はIDにしか使われていない、という認識です) 1)半角8桁の英数字だけ別セルに取り出す 関数で何とかならないかと思いましたが、ごく一般的な文章なので、IDの前後の文字数がバラバラで断念しました 2)全角文字のみ検索し、置き換えで削除する ワードにコピーしてやってみようと思いました。 2003なのですが、「任意の英数字」は検索できても、「任意の全角文字」の検索機能はないようです。 (「任意の文字」の項目が、全角文字に該当するのかと思い、検索置換をしてみたら、どうやら半角英数字も該当するようでした) 実際困っております。 何かいい手はないでしょうか。

共感・応援の気持ちを伝えよう!

  • 回答数6
  • 閲覧数11013
  • ありがとう数1

みんなの回答

  • 回答No.6
noname#52504
noname#52504

無理やり関数で処理してみました(半分冗談ですが) 一つのセルに入る文字数は高々 32767=2^15-1 文字ですから、 半分ずつに区切って、半角文字を含むかどうかの判定を繰り返せば、 最大でも15回で位置が判明します。 以下、元データがA列2行目以降に入っているとします。 1.A1セル:=2^(INT(LOG(MAX(LEN(A2:A9999)),2))+1)   を配列数式として入力(Ctrl+Shift+Enter) 2.B1セル:=A1/2 3.B2セル:=(LEN(LEFT($A2,B$1))*2)=LENB(LEFT($A2,B$1)) 4.C2セル:=(LEN(LEFT($A2,SUM($B$1:B$1*$B2:B2)+C$1))*2)=LENB(LEFT($A2,SUM($B$1:B$1*$B2:B2)+C$1))   を配列数式として入力(Ctrl+Shift+Enter) 5.B1セルを1が返るまで右方向にフィル(以下、仮にH1が1になったとします) 6.C2セルをH列まで右方向にフィル 7.I1セル:=MID($A2,SUM($B$1:$H$1*$B2:$H2)+1,8) ←5によってセル範囲変わります   を配列数式として入力(Ctrl+Shift+Enter) 8.B2,C2,…,Q2セルをそれぞれ下方向にフィル   …の前に下記註をご参考下さい。 Excel2003で動作確認済 ※下方向へのフィルを複数列まとめてやると、固まるかもしれません。 ※必要に応じて、列単位で処理⇒その都度値貼り付けで確定 など工夫してください。 ※セル内改行:CHAR(10)は半角扱いになるので、  セル内改行がある場合はあらかじめ削除しておいてください。

共感・感謝の気持ちを伝えよう!

  • 回答No.5

#あ、いけね、俺のコード テストに用いた時の名残で [0-9a-zA-z]{7} になってる [0-9a-zA-z]{8} ね。 ま、この辺は大体皆似たような手法になるか。

共感・感謝の気持ちを伝えよう!

  • 回答No.4
  • Wendy02
  • ベストアンサー率57% (3570/6232)

こんにちは。 #2 で書いた者ですが、パターンがダブっていました。 .Pattern = "[^\w\d]"    ↓ .Pattern = "[^\w]" ただし、パターンは、\wですと、半角英数字で、「_ (アンダースコア)」が入ってしまいます。 必ず、半角英数を8文字を出すようにしてみました。また、一行に複数あっても、カンマつきですが、出力するようにしました。値コピーして、それで、区切り位置に、「,(カンマ)」を使えば、セルひとつずつに別けることも可能です。 それと、IngnoreCase =True なら、大文字・小文字は関係ありません。 単に、アンダースコアが気にならないのなら、\w{8}でも可能です。 Function RegGetCode(myStr As String) As String Dim Match As Object Dim buf As String   With CreateObject("VBScript.RegExp")     .Pattern = "[0-9a-z]{8}" '"\w{8}"     .Global = True     .IgnoreCase = True   If .Test(myStr) Then   For Each Match In .Execute(myStr)    buf = buf & "," & Match.Value   Next   RegGetCode = Mid$(buf, 2)   End If   End With End Function

共感・感謝の気持ちを伝えよう!

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

エクセルで回答します。昨日の回答の使い回しで申しわけありませんが http://oshiete1.goo.ne.jp/qa3158346.html No.3 で1行変更すれば半角英数字を取り出せます。変更するのは以下です  変更前 strPattern = "[0-9A-Za-z0-9A-Za-z]"  変更後 strPattern = "[0-9A-Za-z]" でも文章中に半角英数字はID以外になく、IDは8文字と決まっているなら関数でもできそうですね。A1に文字列があるとき =MID($A$1,MAX(INDEX((CODE(MID($A$1,ROW(INDIRECT("1:"&LEN($A$1))),1))<123)*ROW(INDIRECT("1:"&LEN($A$1))),))-7,8) で半角英数字8桁を取り出せます。

共感・感謝の気持ちを伝えよう!

  • 回答No.2
  • Wendy02
  • ベストアンサー率57% (3570/6232)

こんにちは。 >全角文字のみ検索し、置き換えで削除する ということなら、 '標準モジュール Function RegRepl(myStr As String) As String   With CreateObject("VBScript.RegExp")     .Pattern = "[^\w\d]"     .Global = True     RegRepl = .Replace(myStr, "")   End With End Function においてあげればよいはずです。ただし、半角英数が点在していたら、これは役には立ちません。 VBE に貼り付けたら、以下のような数式にしてあげれば出来ます。 =RegRepl(A1)

共感・感謝の気持ちを伝えよう!

  • 回答No.1

Option Explicit 'Excel VBA Sub Sample2() Dim RE As Object Dim strPattern As String Dim msg As String Dim MatchCollection As Object Dim Match As Object Dim r As Object Set RE = CreateObject("VBScript.RegExp") strPattern = "[0-9a-zA-z]{7}" With RE .Pattern = strPattern .IgnoreCase = True .Global = True For Each r In ActiveSheet.UsedRange Set MatchCollection = .Execute(r) If MatchCollection.Count > 0 Then For Each Match In MatchCollection msg = msg & Match.Value & vbCrLf Next End If Next End With MsgBox msg Set Match = Nothing Set RE = Nothing End Sub とかは? 参考資料 http://officetanaka.net/excel/vba/tips/tips38.htm

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • エクセル2003で、1つのセルに全角文字、半角文字

    エクセルで文字数制限のあるセルに 全角、半角文字が混在している場合 A1 上下ABCDひだりみぎ ←対象となるセル B1全角文字数 7 C1半角文字数 4 というように対象のセルの全角文字数、半角文字数を別々のセルに表示できる方法があれば おしえてください。

  • 2桁の数字を半角に、1文字の英字を全角に変換したい

    最終的に縦書きでレイアウトする既存の文章を編集しているのですが、 文中の英数字を自動的に半角→全角、全角→半角に変換できるソフトを探しています。 ただし、全部の英数字を一括して全角→半角もしくはその反対に変換するのではなく、 「2桁の数字は半角に」(1桁と3桁以上は全角に)、 「1文字の英数字は全角に」(2文字以上の英数字は基本的に半角に) 変換したいのです。 マクロを利用すればいいのでしょうが、そのノウハウがなく、 また、例えば、2文字、3文字の英字は全角のままにしておきたいこともあったりして、 一般的な「検索・置換」のように、確認しながら変換していけると理想的なので、 できれば、こうした機能があるエディターソフトなどを手に入れたいと思っています。 15年近く前、MacOS用に発売された、「システムソフトエディタ」というソフトは、 ほぼ、この希望通りのことができる機能を備えていて、とても重宝したのですが、 システムソフトが開発をやめていますし、自分自身、現在はWindowsを利用しています。

  • Word2002 半角数字、半角英字、全角数字、全角英字を別々に検索及び置換する方法?

    Word2002を使用しています。 その1: そこで、半角数字、半角英字、全角数字、全角英字を別々に検索する方法を知りたいです。VBAなどのプログラミングは使用したくありませ ん。例えば、半角数字のみを検索する(該当文字を強調する。)。 検索のみで、この段階では置換しません。 その2: 上記で見つかった半角文字を全角へ(又はその逆で全角文字を半角文字へ)置換する方法を教えて下さい。 よろしくお願いします。

  • 全角半角あわせて3文字

    全角半角が混在している文字列の左から3文字を取得したい場合にいい方法はないでしょうか? mb_substr関数で第3パラメータはバイト数で指定するようです。 関数リファレンスでは「最大文字数」って表現になってます。 http://php.net/manual/ja/function.mb-substr.php 半角なら文字数=バイト数ですが、全角だと指定の半分の文字数になります。 最大だから間違ってはないですが、文字数じゃないよな‥‥っていつも思ってます。 いったん半角→全角にして、6バイト分を切り出すのはできます。 でも、英数字も全角半角混在してるので元の文字列を壊したくないのです。 mb_substrの第3パラメータを6から3まで、mb_strlenが3になるまで回すのもやってみました。 でも、なんかスマートじゃないんですよ‥‥。 なにかこう、スマートないい手はないでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • 半角/全角の変換方法

    Excelで1つのセルの中に文章が入力されたデータがあります。 1行に対して1つの文章(A1に1つ、B1に1つという感じです)で 約2万行あり、1つの文章の長さは50文字~8000文字と様々です。 その文章の中には英数字も含まれているのですが その英数字が半角であったり、全角であったりと統一されておらず 不都合が出ておりますので、英数字は全て半角へ変換したいのですが 文字数が多すぎる為か、ASC関数ではエラーが表示(#VALUE!)される 行がいくつもあり困っております。 何かよい方法はないものでしょうか?

  • 全角文字と半角数字を分けるには?

    ひとつのセル内に、全角文字と半角数字が混ざっているシート(簡単な住所録)があります。 最終的には文字のみ残したいのですがどういう方法がありますか? たくさんあるデータの中で文字数がばらばらで、頭から何文字目を削除、等の手は使えません。 たぶん検索や置き換えで、半角数字を拾い出せると楽だと思うのですが、どうしたらいいかわからないので・・・宜しくお願いします。

  • 全角文字と半角英数字の文字数をそれぞれ別に計上したい

    エクセルのワークシート上で、そのシートにある全角文字と半角英数字の文字数をそれぞれ別に計上したいのですがそんな便利な関数があれば教えて下さい。

  • ワードで数字以外の半角文字を検索し、全角に置換したい

    ワード2003です。 30Pの文書にカタカナの文字が多数あり、半角と全角が入り混じっています。また、数字も、半角で入力されています。 その中から カタカナの半角文字だけを検索し、全角に置換したいのですができますか どなたか教えてください。

  • 全角と半角が混在するセルの文字数はどれに基づいて、

    全角と半角が混在するセルの文字数はどれに基づいて、どのように計数されますか?

  • セル内の文字で半角2文字で1文字とカウントしたい

    openofficeを利用しています。 セル内の全角と半角が混じった文章から半角2文字で1文字とカウント 全角はそのまま1文字とカウント して文字数を数えることはできますでしょうか? LENBが利用できないので困っています。 よろしくお願いします。