![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
No.1ベストアンサー
- 回答日時:
こんにちは。
KenKen_SP です。Excel VBA での回答です。別に VBS でも良かったのですが...OFFICE カテなので、
結構難しいですよねー。例えば I've とかをどう切り分けるか?
考えたけど、英語は良く分からないのでそのまんま半角スペースで区切りました。
あと工夫したのは、記号をカットするとこですかね...(´・ω・`)
あまりに巨大なテキストファイルだと時間がかかるか、フリーズするかもしれま
せんが、通常サイズのテキストファイルなら VBA でも結構高速で集計できますよ。
【実行手順】
1. Excel を起動
2. [Alt]+[F11]キー押下で Visual Basic Editor(以下 VBE)を起動
3. VBE メニュー[挿入]-[標準モジュール]
4. 3. で開いたスペースに下記の Sub から始まるコードをコピー&ペースト
5. VBE 閉じる
6. Excel 画面に戻り、[Alt]+[F8] でマクロ実行
7. あとは適当に画面のとおり。
' コードはここから下
Sub 重複しない単語の数を調べる()
Dim Dic As Object 'Dictionary
Dim sFilename As String
Dim n As Integer
Dim sBuf As String
Dim vKeysAry As Variant
Dim vKey As Variant
Dim vCnt As Variant
Dim lKeyCount As Long
Const NONCOUNT_KEY = "!""#$%&()^\`[+*]{}<>?,./_:;" ' 除外する記号
' 対象テキストファイル問い合わせ
sFilename = Application.GetOpenFilename( _
FileFilter:="Textファイル (*.txt),*.txt", _
Title:="重複しない単語の数を調べます ※シートはクリアされます", _
MultiSelect:=False)
If UCase$(sFilename) = "FALSE" Then Exit Sub
' テキストデータを読み込む
n = FreeFile()
Open sFilename For Binary Access Read As #n
sBuf = String$(LOF(n), vbNullChar)
Get #n, , sBuf
Close #n
sBuf = Replace$(sBuf, vbNullChar, "")
' テキストデータ前加工
sBuf = StrConv(sBuf, vbNarrow)
sBuf = Replace$(sBuf, vbCrLf, vbLf)
sBuf = Replace$(sBuf, vbCr, vbLf)
sBuf = Replace$(sBuf, vbLf, " ")
' 除外する記号を半角SPへ置換
For n = 1 To Len(NONCOUNT_KEY)
sBuf = Replace(sBuf, Mid$(NONCOUNT_KEY, n, 1), " ")
Next n
' テキストデータを半角SPで分解して配列化
vKeysAry = Split(sBuf, " ")
' 語句をカウント
Set Dic = CreateObject("Scripting.Dictionary")
Dic.CompareMode = 1 ' 1: TextCompare 大文字・小文字を区別しない
For Each vKey In vKeysAry
If Len(vKey) > 0 Then
If Not Dic.Exists(vKey) Then
Dic.Add Key:=vKey, Item:=CStr(1)
Else
Dic(vKey) = CStr(Val(Dic(vKey)) + 1)
End If
End If
Next
' 結果出力
vKey = Application.Transpose(Dic.Keys)
vCnt = Application.Transpose(Dic.Items)
With ActiveSheet
.Cells.Clear
.Cells(1, 1).Value = sFilename
.Cells(3, 1).Value = "Word"
.Cells(3, 2).Value = "Count"
With Range(.Cells(3, 1), .Cells(3, 2))
.Font.Bold = True
.HorizontalAlignment = xlCenter
End With
lKeyCount = UBound(vKey)
If lKeyCount > Rows.Count Then lKeyCount = Rows.Count
.Cells(4, 1).Resize(lKeyCount).Value = vKey
.Cells(4, 2).Resize(lKeyCount).Value = vCnt
End With
Set Dic = Nothing
MsgBox "終わったみたい(´・ω・`)", vbInformation
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 教えて!goo 【回答が書きにくいのはなぜ】投稿内容に不適切な表現など・(中略)・投稿内容の修正をお願いいたします 9 2023/05/09 08:41
- その他(プログラミング・Web制作) 2つのテキストファイルを比べて文字列を特定する方法を教えて下さい 5 2022/05/01 15:22
- 英語 数字の単位について教えてください 6 2022/11/10 08:25
- 英語 「和製英語はネイティブスピーカーに通じない」とあざ笑う英語堪能な日本人をどう思う? 13 2022/05/27 08:39
- 英語 2単語が1単語になった英単語の名称、傾向及び例示について 3 2023/05/04 18:54
- 英語 英語下ネタ豊富 英語に、下ネタの造語?がたくさんあってびっくりしました。 日本語では文章で説明しない 1 2023/03/07 23:05
- 英語 【英語】 最近シス単を使って学習をしているのですが、なかなか覚えられなくて困っています。以下は今の自 1 2022/04/13 18:16
- その他(学校・勉強) 英単語の勉強をして思考力が上がることってあるんですか? 2 2022/08/18 17:26
- 英語 高2で英単語・熟語について悩んでて 全然覚えられなくて 回数は何度もしてるのですが… 前置詞等に悩ん 1 2022/04/29 09:59
- 英語 突然ですが、日本人が英語を話せない大きな理由は英単語量が少ないことだと思っています。中学校から始める 6 2022/05/05 22:35
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
単語のスペルを並び替えてくれ...
-
フィルター と フィルタ の...
-
聞き流してほしいという 言い方
-
Androidの単語登録ができない
-
牛 英語
-
アルファベットの略語について...
-
ミドルネームをイニシャルで表...
-
トムはなくしたペンを探してい...
-
スペースキーを使わずにtabキー...
-
毎日笑顔をイタリア語で言うと...
-
淫夢語録?っていうのが気持ち...
-
筆記体のi・j・tの書き方について
-
Bitchとbicth はどっちもビッチ...
-
ジャイケル・マクソン
-
うるさい女
-
並び替えると別の意味になる言葉
-
ケルト語で「時」と云う単語に...
-
語彙とはなんでしょうか?
-
英検1級について
-
学習機能の文字を削除するには?
おすすめ情報