はじめまして。
いま、Wordに以下のようなデータがあります。
What_2 is_1 a_1 burrito_0? What_2 is_1 that_3?
(各英単語の後ろに、アンダーバーと数字がついています)
これを、同じ数字が付いている単語を抽出してエクセル等でリストを
作りたいのですが、何か良い方法はないでしょうか?
たとえば、以下のようなリストが理想です。
(英単語の後ろにある数値は頻度です)
----------
0
burrito 1
1
a 1
is 2
2
what 2
----------
どうぞ、よろしくお願い致します。
No.3ベストアンサー
- 回答日時:
マクロを使わないなら、次のような手順でしょうか。
(1)
What_2 is_1 a_1 burrito_0? What_2 is_1 that_3?
という文を
What_2
is_1
a_1
burrito_0?
What_2
is_1
that_3?
のように1単語ずつ改行させる。
この方法としては、Wordにおいて「検索と置換」ダイアログを表示します。「検索する文字列」に「<スペース>」を指定、「置換後の文字列」に「^p」(改行記号)を指定して「すべて置換」します。
さらに「?」も邪魔なので次のようにして消去します。「検索する文字列」で「?」を指定、「置換後の文字列」に空欄(つまり何も指定しない)として「すべて置換」します。もし、ピリオドやカンマがあれば、それも同様に削除してください。
(2)
こうして1単語毎に改行した文書を「名を付けて保存」で「ファイルの種類」を「書式なし(*.txt)」形式で保存します。
(3)(2)のテキストファイルをExcelで開きます。
ファイルを開くと「テキストファイルウィザード」が表示されます。
「1/3」はそのまま「次へ」、「2/3」の区切り文字で「その他」をチェックし「_」を入力します。完了ボタンを押します。
以上で、A列に単語、B列に数値が入力されます。
(4)
頻度を算出します。
まず、データ全体を選択してA列でソートします。昇順・降順は問いません。
次にセルC1に以下の式を入力します。
=IF(A1<>A2,COUNTIF(A1:A,A1),"")
セルC1をコピーして、単語のある行全部のC列にコピーします。
C列を選択してコピーし、そのまま「形式を指定して貼り付け」で「値」を指定して貼り付けます。
データ全体を選択してC列でソートします。C列が空欄の行を削除します。
以上で、必要な情報が取得できたはずです。後は好きなようにフォーマットを修正してください。
cistronezkさん、ご回答ありがとうございました。
マクロは手が出なかったのですが、教えていただいた方法でしたらすぐに出来ます。急いでいたので本当に助かりました。
No.5
- 回答日時:
#1です。
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/v …
こちら等で、お勉強なさってください。
参考URLの様にやった後、自動記録されたマクロを全部消して、#1のコードを貼り付けていただいても可です。(先頭のDim rowCounter As Longもお忘れなく)
若干の補足をしておきます。
VBAの行の先頭に'(シングルクォーテーション)が付いていると、その行はコメント扱いとなり、実行されません。初期状態では、ご質問の一行の例だけを対象に処理する様になっております。実際にテキストファイル全体を処理する場合は、'B:云々の下の1行をコメントとし、'A:云々の下のコメントにしてある7行の’を外して生かす必要があります。
また、処理対象のファイルの名前の部分と、
For j = 0 To 9 Step 1
の9の部分を、実際に合わせて変更する必要があります。9のところは、10以上でも動作する筈です。
mitarashiさん、詳しい説明をしていただき、本当にありがとうございました。この処理は、できるだけ早くしなければならないので、今回はWordとExcelの基本的な機能だけでやってしまおうと思います。
ただ、マクロは勉強しておいたほうがよいと思うので、この作業が終わったら紹介してくださったサイトなどを見てみます。
本当にありがとうございました。
No.4
- 回答日時:
回答3の(4)の式が間違ってました。
誤)
>=IF(A1<>A2,COUNTIF(A1:A,A1),"")
正)
=IF(A1<>A2,COUNTIF(A:A,A1),"")
です。失礼しました。
No.2
- 回答日時:
こんばんは。
#1さんの回答と同じような回答しても仕方がありませんから、別の方法を述べさせていただきます。
ご質問は、私の仕事範囲にも近いのですが、実際、自分の仕事関連なら、マクロは組みません。テキストエディタで、一行にひとつにするように単語に切り分けます。
テキストエディタで、このようにします。
-------------------------------------------
What 2
is 1
a 1
burrito 0?
What 2
is 1
that 3
-------------------------------------------
それをExcelに貼り付けて、それを並べ替えと、フィルタ・オプションで重複を取るという方法を取ります。
ところで、
What_2 is_1 a_1 burrito_0? What_2 is_1 that_3?
その数字は、どのように作られたものでしょうか。その数字は、もともと、何かソーステキストから、頻度ほ出して、それをWordマクロで貼り付けたもののようです。この数字は、What と is の数字が違うので、どうやら、標準頻度(例:ALCのSVL)ではなさそうです。0は、頻度のランキング外にあるものだと思います。
この文章に、_1 など付いていなければ、ふつう大学等で出しているコンコーダンサー(Concordancer)というツールがあるので、そこからリストを作ればよいと思います。要するにご質問の目的は、コンコーダンサーなどで作られたリスト表がほしいということだと思います。ただし、コンコーダンサー自体は、単なる頻度だけです。
ご回答、ありがとうございました。
マクロの方も興味深かったのですが、明朝までにやらなければならないので、Wendy02さんに教えていただいた方法でやりたいと思います。
ちなみにこの数字は、JACET8000という語彙リストのレベル分け(Level1~Level8)の数字で、0はLevel8外という意味です。
No.1
- 回答日時:
Excel VBAのコードです。
先日文章中の特定文字列のカウントの回答をしたものを改造してみました。ご呈示の文例では動作しましたが、他の文例に対しても適用できるかどうかは不明ですので、あらかじめ言い訳をしておきます。'A部のコメントアウトを外すと、テキストファイルを読み込んで処理します。(Wordのファイルではありませんので悪しからず。Wordからテキスト形式で保存してから処理してください。実際のテキストファイルのパス、ファイル名に合わせてコードを変更して下さい。)
その場合、B部のテストデータ部はコメントアウトして下さい。
末尾のmyCellPrintは、debug.printで試験したのを書き換えるのが面倒なので、ワークシート上でシミュレートしようと即興で作成してみました。分かり難くしているだけと思いますがご容赦下さい。
Dim rowCounter As Long
Sub Test()
Dim FSO, buf As String
Dim strPattern As String
Dim srcFilePath As String
Dim Matches As Variant
Dim i As Long, j As Long
Dim myDic As Object
Dim myKey As Variant
Dim hitWord As String
'A:read from Textfile
' srcFilePath = "C:\Documents and Settings\?????\デスクトップ\testText.txt"
' Set FSO = CreateObject("Scripting.FileSystemObject")
' With FSO.GetFile(srcFilePath).OpenAsTextStream
' buf = .ReadAll
' .Close
' End With
' Set FSO = Nothing
'B:Test Data
buf = "What_2 is_1 a_1 burrito_0? What_2 is_1 that_3?"
rowCounter = 0
Cells.Clear
For j = 0 To 9 Step 1
strPattern = "(\S+)_" & CStr(j) & "[ .?]"
With CreateObject("VBScript.RegExp")
.Pattern = strPattern
.Global = True
Set Matches = .Execute(buf)
End With
myCellPrint j
If Matches.Count > 0 Then
Set myDic = CreateObject("Scripting.Dictionary")
For i = 0 To Matches.Count - 1
hitWord = Matches(i).submatches(0)
If Not myDic.exists(hitWord) Then
myDic.Add hitWord, 1
Else
myDic.Item(hitWord) = myDic.Item(hitWord) + 1
End If
Next i
myKey = myDic.keys
For i = 0 To myDic.Count - 1
myCellPrint myKey(i), myDic.Item(myKey(i))
Next i
Set myDic = Nothing
End If
myCellPrint
Next j
End Sub
'debug.print をワークシートでシミュレートしたつもり
Sub myCellPrint(Optional arg1 As Variant, Optional arg2 As Variant)
If rowCounter = 0 Then rowCounter = 1
If Not IsMissing(arg1) Then
Cells(rowCounter, 1).Value = arg1
If Not IsMissing(arg2) Then Cells(rowCounter, 2).Value = arg2
End If
rowCounter = rowCounter + 1
End Sub
正規表現でパターンマッチングしています。
strPattern = "(\S+)_" & CStr(j) & "[ .?]"
のところは環境に合わせて修正して下さい。
「VBA 正規表現」で検索すると多数参考サイトが見つかります。
この回答への補足
mitarashiさま、ご返答いただき、ありがとうございます。
せっかくVBAコードを書いていただいて恐縮ですが、、VBAの知識がなくExcelに組み込むことすらできないので、残念ながら実行出来ません。
もしもお時間があるようでしたら、エクセルのど素人にも分かるように使い方を教えていただけないでしょうかm_ _m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ワードにて スペースを全て改行...
-
サクラエディタで連続改行を処...
-
特定の文字を含む行だけ抽出す...
-
テキストファイルで改行に置換...
-
Accessでの置換
-
正規表現の置換で数値のみを抽...
-
空白スペースをタブに置換する方法
-
秀丸の正規表現で文字列を切り...
-
置換でピリオドを一括削除出来...
-
文字+改行コードの置換について
-
ワイルドカード検索・置換対応...
-
句読点ごとに段落がついていな...
-
「ドゥ」の簡単なローマ字入力方法
-
googleカレンダーの予定を入力...
-
1MBでドレくらいの文章を書くこ...
-
Google form グーグルフォーム...
-
年末調整の申告書入力用PDFにつ...
-
PDF 入力途中で改行したい
-
ワードで住所の漢数字番地の縦...
-
エクセルでセル未入力時の初期...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ワードにて スペースを全て改行...
-
テキストファイルで改行に置換...
-
特定の文字を含む行だけ抽出す...
-
Accessでの置換
-
空白スペースをタブに置換する方法
-
サクラエディタで連続改行を処...
-
置換でピリオドを一括削除出来...
-
CSVファイルをエクセルで開いた...
-
正規表現の置換で数値のみを抽...
-
秀丸で指定した文字が入ってい...
-
テキストに縦に並んでいるデー...
-
文字+改行コードの置換について
-
秀丸の正規表現で文字列を切り...
-
ワード2010 ひらがな 削除
-
ワードで各行の先頭に文字列を...
-
不要な改行を一括削除する方法
-
LibreOfficeのWriterで特定の文...
-
秀丸エディタで改行を削除する...
-
テキスト中の改行を詰めるコマンド
-
ワイルドカード検索・置換対応...
おすすめ情報