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も見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
全角・半角混在の文字列から半角文字のみ取り出す
Excel(エクセル)
-
2バイト文字を一括削除するマクロ
Word(ワード)
-
EXCEL 文字列操作
Excel(エクセル)
-
-
4
文字列から英数字のみを抽出する関数
Excel(エクセル)
-
5
エクセルで、半角文字列を抽出するには
Excel(エクセル)
-
6
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
7
メッセージボックスを前面に表示させるには?
Visual Basic(VBA)
-
8
セル内文章から、英数字のみ取り出す関数を教えてください
Excel(エクセル)
-
9
UserForm
Visual Basic(VBA)
-
10
エクセルで全角と半角を分離する方法って?
Excel(エクセル)
-
11
半角/全角文字混在データの分割方法
Visual Basic(VBA)
-
12
フォントの大きさ
Visual Basic(VBA)
-
13
EXCELをバッチコマンドで起動したとき、引数を渡せますか
その他(プログラミング・Web制作)
-
14
VBAで文字列を数値に変換したい
Excel(エクセル)
-
15
VBA 数式を残して値をクリアについて
Excel(エクセル)
-
16
EXCELで、セル内の半角カナのみを削除する関数
Excel(エクセル)
-
17
Excelのセルの色指定をVBAから配列を用いて効率的に行う方法はあり
Visual Basic(VBA)
-
18
split関数で区切り文字がない場合
Visual Basic(VBA)
-
19
エクセルVBA Unionはなぜ遅い?
Visual Basic(VBA)
-
20
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの関数について教えて...
-
Excelカスタム関数(アドイン登...
-
Excelデータをコピペして、ペー...
-
Excel関数-文字列で自動作成さ...
-
スプレッドシート、Excelでの数...
-
Excelで50個のセルに同じ文字を...
-
Microsoft Officeの中古は信用...
-
スプレッドシートで使う数式を...
-
エクセルVBA、別ブックへ転記す...
-
エクセルで会社の従業員のデー...
-
エクセルで不等号記号(≠)が上に...
-
エクセルの表で1年間の曜日を...
-
A列とB列を参照してC列に連番を...
-
エクセルの空欄をつめて、次の...
-
エクセルでの特別な文字を上に...
-
エクセルでセルに標準で入力さ...
-
エクセル日付 文字列の関数がエ...
-
エクセル2013で月間勤務表から...
-
エクセルの日付を編集する
-
EXCELの質問です 119から足した...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA、別ブックへ転記す...
-
エクセルでの作業計算方法について
-
時間によってファイル名が変わ...
-
【関数】適切な文字数の数字を...
-
Excelについて教えてください
-
エクセル初心者です 関数の入れ...
-
【マクロ】ファイル名の変更に...
-
UNIQUE関数が使えないバージョ...
-
エクセルの計算
-
【関数】先頭だけにある、半角...
-
Excelで、決まった行を繰り返し...
-
Excelでセルの値が同じか...
-
LOOKUP関数を使えばいいのでし...
-
Excel
-
はがきについて。
-
エクセルの条件付き書式につい...
-
エクセルのデーターが2か月前の...
-
エクセル②
-
エクセルで「-0.0」と表示さ...
-
Microsoft1Officeの互換ソフト...
おすすめ情報