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.1
- 回答日時:
やろうとしていることと 条件が合わないように見えるんですが……
=TRIM(MID(SUBSTITUTE(A$3,".","."&REPT(" ",255)),(ROW(A1)-1)*256+1,255))
これでいいなら。
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.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.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
と言う感じでしょうか
動作確認をしていませんが・・・
回答になっているでしょうか?
お探しの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も見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
全角・半角混在の文字列から半角文字のみ取り出す
Excel(エクセル)
-
2バイト文字を一括削除するマクロ
Word(ワード)
-
文字列から英数字のみを抽出する関数
Excel(エクセル)
-
-
4
EXCEL 文字列操作
Excel(エクセル)
-
5
エクセルで、半角文字列を抽出するには
Excel(エクセル)
-
6
ドロップダウンリスト 自動表示したい
Excel(エクセル)
-
7
VBAにてメッセージボックスを最前面に表示させる
その他(プログラミング・Web制作)
-
8
セル内文章から、英数字のみ取り出す関数を教えてください
Excel(エクセル)
-
9
エクセルで全角と半角を分離する方法って?
Excel(エクセル)
-
10
EXCELをバッチコマンドで起動したとき、引数を渡せますか
その他(プログラミング・Web制作)
-
11
フォントの大きさ
Visual Basic(VBA)
-
12
VBAでこんなことできますか?
PowerPoint(パワーポイント)
-
13
文字列からタブコードを取り除きたい
Visual Basic(VBA)
-
14
VBAで文字列を数値に変換したい
Excel(エクセル)
-
15
メッセージボックスを前面に表示させるには?
Visual Basic(VBA)
-
16
split関数で区切り文字がない場合
Visual Basic(VBA)
-
17
ExcelのVBA。public変数の値が消える
Visual Basic(VBA)
-
18
VBSで起動したアプリが前面表示しない
Visual Basic(VBA)
-
19
マクロでネットワーク上のコンピューターへの接続
Excel(エクセル)
-
20
VBAでActiveDirectoryのユーザ一覧の取得の仕方
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル初心者です 関数の入れ...
-
【関数】先頭だけにある、半角...
-
エクセル 白黒印刷で白線を印刷...
-
Excelのチェックボックスの使い...
-
【関数】適切な文字数の数字を...
-
Excelのpivotについて質問です
-
Excel ピボットテーブルで日付...
-
LOOKUP関数を使えばいいのでし...
-
エクセル関数を教えてください
-
エクセルのセルに同じ大きさの...
-
UNIQUE関数が使えないバージョ...
-
excelの不要な行の削除ができな...
-
エクセルで「-0.0」と表示さ...
-
時間によってファイル名が変わ...
-
WPS OFFICEでの縦書きについて
-
エクセルの関数について教えて...
-
Aというブックの1というシート...
-
【マクロ】シート名を取得する...
-
VBA Private Sub Worksheet_Cha...
-
VBA、Excelのworkbook.open に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 2019 のピボットテーブル...
-
[関数得意な方]教えて下さい・...
-
Excelにてある膨大なデータを管...
-
[関数について]わかる方教えて...
-
Excel初心者です。 詳しい方、...
-
excelの不要な行の削除ができな...
-
エクセル関数に詳しい方教えて...
-
INDIRECTを使わず excelで複数...
-
[オートフィルタ]で抽出された...
-
エクセルの神よ、ご回答を! エ...
-
エクセル関数に詳しい方、教え...
-
各ページの1番上の表示について
-
Excelで写真のような表を作った...
-
エクセルで不等号記号(≠)が上に...
-
数学 Tan(θ)-1/Cos(θ)について...
-
Excel 2019 は、SPILL機能があ...
-
Excelで全角を半角にしたいので...
-
条件付き書式を教えてください
-
Excel フィルターを掛けた状態...
-
[オートフィルタ]の適用範囲の...
おすすめ情報