• 締切済み

Excel VBA 半角英数の抽出もしくは全角文字の削除

Excel2003でVBAを使って、次の2点のことを行いたいと思っております。 1)全角・半角文字が混在している大量のデータから半角英数記号だけを取り出す。 過去のQ&A(http://oshiete1.goo.ne.jp/qa3158346.htmlのNo.3)から類似した回答を見つけましたが、この方法ですと「=AtoZ(A1)」とセルを指定しなければいけません。一度に半角英数記号を取り出す方法はございませんか? 2)抽出するデータは英文で1つのセルに複数の文章が入力されているのですが、文章を区切って1つのセルには1文のみの入力にする。 例えば、下記の文章がA3にあるとします。 Spring came. Freddie, the leaf, was born on a branch of a tall tree. Hundreds of leaves were born on the tree. They were all friends. これを A3にはSpring came. A4にはFreddie, the leaf, was born on a branch of a tall tree. A5にはHundreds of leaves were born on the tree. A6にはThey were all friends. と入力したいのですが、方法はございませんか? 膨大なデータを扱うため、大変困っています。どなたかご教授お願いします。

みんなの回答

回答No.4

1については、引数をループで回せばよいのかな、と直感的に思います.検証できていませんが 2については、 Splitを使ったら簡単にかけるのではないでしょうか? 前提としては各文の終わりにちゃんとピリオドが書いてあることですね Dim Sentence() As String Dim Row as Long Dim Counter as Long Row = 3 Sentence = Split(Cells(3,1).Value, ".")'A3セルの中身を.で切って配列に格納 For Counter = 0 To UBound(Sentence) Cells(Counter + 3, 1).value = Sentence(Counter) & "." Next Counter と言う感じでしょうか 動作確認をしていませんが・・・ 回答になっているでしょうか?

noname#79209
noname#79209
回答No.3

#2さんが言われるように、エクセルの仕事ではありません。 私なら。まず正規表現が扱えるテキスト・エディタを入手します。 フリーソフトでも良いかも知れませんが、有料ですが以下のソフトがあります。 http://www.villagecenter.co.jp/soft/wz50/ http://www.rimarts.co.jp/dana-j.htm http://hide.maruo.co.jp/software/hidemaru.html 「メモ帳」では正規表現が使えませんし、膨大なデータなら、「メモ帳」では扱えない大きさでしょう。 エクセルからテキスト・ファイルとして保存すれば、テキスト・テディタで読み込むことができます。 また、 > 全角・半角文字が混在している大量のデータから半角英数記号だけを取り出す。 と言われていますが、「取り出す」とは単なる「検索」なのか「置き換え」なのか、 「取り出して」その後どうしたいのかを書かないと、的確な回答は得られないと思います。

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

こんばんは。 両方とも、Excel向きではありませんね。 特に、膨大なデータならなおさらだと思います。 本来、テキストファイルの中で処理したほうが早いです。 もしかしたら、私と同業者?(私の場合は、もう少し複雑なんです)なのかもしれませんが、特に、2番目のセンテンス切り分けですが、正しく、最初大文字でセンテンスの最後が「.(ピリオド)」で終わっているならよいのですが、実際は、そういうことにならないことが多いのです。それで、結局、後から、手動で入れていくことが多いですね。 ただ、正規表現のマニュアルを手に入れて、後は、ご自身でやってみてください。他人にいちいち聞いているよりも、そのほうが早いです。練習は、エディタ上でしてください。後戻りが利きます。文系・理系を問わず、テキスト処理する人は、正規表現は必須です。 '標準モジュールに貼り付けてください。 '----------------------------------------------- '半角英数抽出 '----------------------------------------------- Sub TestRegExp1()   Dim Buf2 As Variant   Dim dummy As Variant   Dim myData As String   Dim c As Variant   Dim i As Long   i = 1   For Each c In Range("A1:A10") '検索範囲    If VarType(c) = vbString Then     Buf2 = OneByteChar(c.Value)     On Error Resume Next     dummy = UBound(Buf2)     On Error GoTo 0     If IsNumeric(dummy) Then     'コピー先      Worksheets("Sheet2").Cells(i, 2).Resize(UBound(Buf2) + 1).Value _         = WorksheetFunction.Transpose(Buf2)       i = i + 1 + UBound(Buf2)     End If     Buf2 = ""     dummy = ""    End If   Next c    End Sub Function OneByteChar(ByVal strText As String) '正規表現抽出  Dim Buf() As String  Dim myPat As String  Dim Matches As Object  Dim Match As Object  Dim i As Long     myPat = "[\dA-z]+"     With CreateObject("VBScript.RegExp")     .Global = True     .IgnoreCase = False     .Pattern = myPat     Set Matches = .Execute(strText)     For Each Match In Matches       ReDim Preserve Buf(i)       Buf(i) = Match       i = i + 1     Next Match   End With   OneByteChar = Buf() End Function '----------------------------------------- 'センテンス抽出 '----------------------------------------- Sub TestRegExp2()   Dim Buf() As String   Dim myData As String   Dim myPat As String   Dim Matches As Object   Dim Match As Object   Dim i As Long      '元のデータ   myData = Range("A3").Value      myPat = "([A-Z][^\.]+\.)"      If myData = "" Then MsgBox "データがありません", 48: Exit Sub   With CreateObject("VBScript.RegExp")     .Global = True     .IgnoreCase = False     .Pattern = myPat     Set Matches = .Execute(myData)     For Each Match In Matches       ReDim Preserve Buf(i)       Buf(i) = Match       i = i + 1     Next Match   End With   Range("A3").Resize(UBound(Buf()) + 1).Value = WorksheetFunction.Transpose(Buf()) End Sub

noname#176215
noname#176215
回答No.1

やろうとしていることと 条件が合わないように見えるんですが…… =TRIM(MID(SUBSTITUTE(A$3,".","."&REPT(" ",255)),(ROW(A1)-1)*256+1,255)) これでいいなら。

関連するQ&A

  • 中3 NEW HORIZON P78 Q&A

    こんにちは。 中三 東京書籍 NEW HORIZON P.78のQ&Aの問題です。(僕が持ってる教科書には載っていないので先生が作った問題かもしれませんが、ご回答よろしくお願いします) <問題> Were there many leaves born on the tree? です。 僕は、 Were there many leaves で、たくさんの葉っぱがありましたか というように解釈しましたが、leavesのあとの born on the tree は、born は形容詞ですよね? ということは名詞の前に置くのではないですか?  できるだけわかりやすく説明していただけると幸いです。 ご回答よろしくお願いします。

  • 和訳があっていますでしょうか?

    一本の木の先端には他の全ての葉はなくなっていたが2つの葉は残っていました。 On the tip/of a tree/which had lost/all its other leaves,/two still remained. 先端に/一本の木の/その木はなくしてしまっていた/その木のすべての他の葉を、/二枚がまだ残っていた。 ------------------------------------------------------------ 一枚の葉はオーリとそしてもう一枚をトゥルーファと名づけられていた。 One leaf was named/Ole/and the other,Trufa. 一枚の葉は名づけられていた オーリと そして他の一枚はトゥルーファと。 ------------------------------------------------------------ オーリとトゥルーファは同じ小枝から共にぶら下がっていた。 Ole and Trufa both hung/from one twig. オーリとトゥルーファは共にぶらさがっていた 同じ小枝から。 ------------------------------------------------------------ 彼らは木の一番先端にいたので、大量の日光を受けた。 Since they were/at the very tip/ of the tree,/ they received/ lots of sunlight. 彼らはいたので 一番先端に その木の  彼らは受けた  大量の日光を。

  • Science の問題です

    A starch test is carried out on a leaf of Plant J and a leaf of Plant K. State the colour of the iodine solution at the end of the test for the leaf of each plant. Iodine solution on leaf of Plant J : Yellowish-brown  Iodine solution on leaf of Plant K : Dark blue 色が反対ではないでしょうか? 詳しい方どうぞ教えてください。よろしくお願いいたします。

  • 半角英数文字が全角に・・・?

    OSwin2000で作ったホームページのデータ (DW4.0でホームページ作成)を FDに落とし、OSwin95,98で読み取ると、 一部データが半角から全角に変わってしまいます。 OSwin2000のデータが半角になっているかどうか、 何回も確認したのですが、・・・・? ファイル形式のせいでしょうか? PCの初心者です。

  • 全角英数から半角英数にしたい

    以前はパソコンを立ち上げた段階では自動で「半角英数」に設定されていて、自分で「Caps Lock」を押して「あ」に変えていました。 しかし、それが最近、初期が「全角英数」になっています。 今は「Caps Lock」を押して「全角英数」と「あ」を切り替えるような感じになっています。 「Caps Lock」で「半角英数」と「あ」を切り替えていた時代に戻りたいです・・・ よろしくお願いします! あ、IME2010です。

  • 半角英数文字の抽出がしたい。

    こんにちは。 SQLで分からない事があります。 大変申し訳ございませんが、ご存知の方おられましたら アドバイスをよろしくお願い致します。 SQLで無理な場合はPL/SQLでも構いません。 (質問内容) SELECT文で、カラムに入っている値を半角英字or数字だけ取り出して SELECTをしたいのですが、どのようにすればよいのでしょうか? 例)カラムに値にABC-!123が設定されている場合、   ABC123がSELECTできるようにしたい。  ※カラムには何が設定されているかわかりません。   (NULLという事は、ありません。) 以上です。 よろしくお願い致します。

  • 半角英数が全角に

    半角英数で入力しているとピリオドだけが全角になります。Caps Lockを間違えて押しているのでしょうか?このキー以外にも原因がありますか?ご存知の方教えてください。

  • 半角・全角を押しても英数半角に切り替わりません

    ウィンドウズ7を使用していますが、半角・全角を押しても英数半角に切り替わりません! どなたか解決方法を教えて頂けませんでしょうか。 非常に困っています。。

  • 文字入力が頻繁に半角と全角の英数のみになる・・

    どこを押しているという訳でもないのですが、文字などを入力していると、頻繁に半角と全角の英数になってしまいます。 通常ならなにかの拍子にESCの下の切り替えタブを押してしまっても、もう一度押せばひらがな入力に戻りますよね? ところがこの症状がでると、切り替えタブを押しても、全角の英数と半角の英数の切り替えにしかならず、マウスでクリックしていちいちひらがな入力に変えなければならなくて非常に困っています。改善方法はありませんか?

  • 英文の構造が分かりません

    いつもお世話になります。 Japan times の下記の英文で構造が分からないところがあります。 That's been the appraisal for a while now, born of numbers showing that fewer than one in 10 teens were using Twitter early on. この文章の、showing ~ 10 teens がborn of numbersを修飾していると思っているのですが、 that fewer はどういう働きをしてるのでしょうか?thatの後にすぐfewerってできるのですか??

専門家に質問してみよう