![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
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.
と入力したいのですが、方法はございませんか?
膨大なデータを扱うため、大変困っています。どなたかご教授お願いします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
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
と言う感じでしょうか
動作確認をしていませんが・・・
回答になっているでしょうか?
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
「メモ帳」では正規表現が使えませんし、膨大なデータなら、「メモ帳」では扱えない大きさでしょう。
エクセルからテキスト・ファイルとして保存すれば、テキスト・テディタで読み込むことができます。
また、
> 全角・半角文字が混在している大量のデータから半角英数記号だけを取り出す。
と言われていますが、「取り出す」とは単なる「検索」なのか「置き換え」なのか、
「取り出して」その後どうしたいのかを書かないと、的確な回答は得られないと思います。
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
No.1
- 回答日時:
やろうとしていることと 条件が合わないように見えるんですが……
=TRIM(MID(SUBSTITUTE(A$3,".","."&REPT(" ",255)),(ROW(A1)-1)*256+1,255))
これでいいなら。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 英語 Statistically significant differences (p < 0.05), 5 2022/05/03 01:09
- 英語 lead on Earth,” の意味の取り方 6 2022/12/06 10:52
- 英語 These were removed and the patient was placed on a 2 2023/04/18 21:37
- 英語 英文解釈を教えてください。 3 2023/07/10 13:57
- 英語 この英文は平易な反面格調高いですか? 1 2023/01/15 12:04
- その他(言語学・言語) 兄妹デュオ Carpenters が前置詞の目的語になれば The Carpenters 。なぜ? 2 2023/04/09 10:41
- 英語 A healthy 20 centimeters tall の a がなぜ定冠詞でないのでしょうか? 2 2022/10/22 04:40
- 英語 Given that all patients had scores of zero on the 2 2022/05/16 17:44
- 英語 A healthy 20 centimeters tall の a がなぜ定冠詞でないのでしょうか? 2 2022/10/14 05:21
- Visual Basic(VBA) エクセルの数式で教えてください。 1 2023/07/31 15:49
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
全角・半角混在の文字列から半角文字のみ取り出す
Excel(エクセル)
-
2バイト文字を一括削除するマクロ
Word(ワード)
-
文字列から英数字のみを抽出する関数
Excel(エクセル)
-
-
4
EXCEL 文字列操作
Excel(エクセル)
-
5
エクセルで、半角文字列を抽出するには
Excel(エクセル)
-
6
メッセージボックスを前面に表示させるには?
Visual Basic(VBA)
-
7
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
8
セル内文章から、英数字のみ取り出す関数を教えてください
Excel(エクセル)
-
9
UserForm
Visual Basic(VBA)
-
10
エクセルで全角と半角を分離する方法って?
Excel(エクセル)
-
11
半角/全角文字混在データの分割方法
Visual Basic(VBA)
-
12
EXCELをバッチコマンドで起動したとき、引数を渡せますか
その他(プログラミング・Web制作)
-
13
EXCELで、セル内の半角カナのみを削除する関数
Excel(エクセル)
-
14
VBA 数式を残して値をクリアについて
Excel(エクセル)
-
15
VBAで文字列を数値に変換したい
Excel(エクセル)
-
16
Excelのセルの色指定をVBAから配列を用いて効率的に行う方法はあり
Visual Basic(VBA)
-
17
マクロでネットワーク上のコンピューターへの接続
Excel(エクセル)
-
18
エクセルVBA Unionはなぜ遅い?
Visual Basic(VBA)
-
19
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
-
20
エクセルの関数で、記号などを抽出もしくは削除したい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel分数の表示について
-
Excelについての質問です。 B2...
-
EXCELの散布図で日付が1900年に...
-
文字2桁、3桁交じりの文字列...
-
【EXCEL】画像の黄色部分の抽出...
-
マクロエクセルのブロック解除
-
絶対参照
-
Excelで表を作ったところに文字...
-
Excelピボットテーブルの1行目
-
エクセルのクイックアクセスツ...
-
DATE関数で現在の年齢を出した...
-
(マクロ)vlookupの元データを同...
-
PDFの請求明細をエクセルにしたい
-
エクセルのクイックアクセスツ...
-
REGEXREPLACE関数について、
-
職場の人から聞かれており、こ...
-
エクセルの空欄をつめて、次の...
-
ユーザー定義関数をアドイン登...
-
EXCELの質問です 119から足した...
-
エクセルの問題です。絶対値の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
半角カタカナをヘボン式ローマ...
-
(マクロ)vlookupの元データを同...
-
エクセルで上位バイトのセルと...
-
exselの質問です
-
Excel 大小比較演算子による「...
-
Excel VBについての質問です。
-
エクセルの問題です。絶対値の...
-
非表示列の再表示に失敗
-
職場の人から聞かれており、こ...
-
Excel関数-文字列で自動作成さ...
-
Excelデータをコピペして、ペー...
-
ユーザー定義関数をアドイン登...
-
【マクロ】for next構文について
-
エクセルの日付を編集する
-
【マクロ】VLOOKUPにて参照元に...
-
exselで最小数で並び替える関数
-
libre 表計算ソフトの計算がう...
-
エクセルで表
-
エクセルの表で1年間の曜日を...
-
西暦和暦
おすすめ情報