No.5ベストアンサー
- 回答日時:
>しょっちゅう出てくる基本語や
実際にやってみると、出てくる数が「少ない」のがイイ単語ではありませんよ。
>一度出てきた語を除外して抽出
前回並べた単語を除外したいという事ですか?いままでにやった結果(or除外したいワード)をどこにどう取り置きしておきたいのか不明なのと、あんまり後出しダラダラあれもこれもと際限なくなるのはカンベンなので、次の課題別のご相談にしてください。
Sub macro1r1()
Dim mydic As Object
Dim h As Range
Dim s As String
Dim a, ax, buf, res
Set mydic = CreateObject("Scripting.Dictionary")
'除外文字
a = Array(",", ".", "/", "?", "!", ":", ";", "$", """", "(", ")", "[", "]", "'s")
On Error Resume Next
For Each h In Cells.SpecialCells(xlCellTypeConstants)
s = h.Value
For Each ax In a
s = Replace(s, ax, " ")
Next
For Each ax In Split(Application.Trim(s), " ")
buf = StrConv(ax, vbLowerCase)
mydic(buf) = mydic(buf) + 1
Next
Next
With Worksheets("Sheet2")
.cells.clearcontents
res = mydic.keys
.Range("A2").Resize(mydic.Count, 1) = Application.Transpose(res)
res = mydic.items
.Range("B2").Resize(mydic.Count, 1) = Application.Transpose(res)
.Range("A1:B1") = Array("WORD", "COUNT")
.Columns("A:B").AutoFit
.Range("A:B").Sort key1:=.Range("B1"), order1:=xlAscending, key2:=.Range("A1"), order2:=xlAscending, header:=xlYes
End With
End Sub
早速の対処ありがとうございました。2度までも丁寧にコード作成していただき感謝します。
ご指摘のように回数だけで単語の取捨選択はできるものではありません。
自分の目で見て選んでいくべきですね。
しかし、頻出回数が分かるので大いに参考になりますし、助かります。
以前に並べた単語を下にくつけてやってみましたが、語数が増えるばかりでこれもしんどいとわかりました。
おかげさまで私の希望がだいぶ叶えられましたので喜んでいます。
お手数をおかけしました。厚く御礼申し上げます。
明日、ベストアンサーに選ばせていただきます。
No.4
- 回答日時:
No.1・2です。
>しょっちゅう出てくる基本語や、一度出てきた語を除外して抽出する、なんてことができますかね。
とありましたので・・・
前回のコードの
>Next j
>End If
の2行の間に
If wS2.Cells(Rows.Count, 1).End(xlUp).Row > 1 Then
cnt = wS2.Cells(Rows.Count, 1).End(xlUp).Row
Else
cnt = 0
End If
の5行を追加してみてください。
(Sheet2の表示されているデータはそのまま残し、Sheet1のA1セル以降に新しいデータをコピー&ペーストします)
おそらくこれで一度出現している「単語」は表示されないはずです。
※ 今回も前回同様時間を要すると思います。m(_ _)m
3度もご対応ありがとうございました。
ちょっとパソコンを買い替えないと動きが悪くて困ります。
新しくiMacを買ったのですが、 excelはまだ入れていません。
教えていただいたコードを保存しておき、また利用させていただきます。
ありがとうございました。
No.3
- 回答日時:
20ページというと1万ワードぐらい?
それならベタ打ちして後から重複除外しても、大丈夫そうですね。
一応高速版:
sub macro1()
dim mydic as object
dim h as range
dim s as string
dim a, ax, res
set mydic = createobject("Scripting.Dictionary")
’除外文字
a = array(",", ".", "/", "?", "!", ":", ";", """", "'s")
on error resume next
for each h in cells.specialcells(xlcelltypeconstants)
s = h.value
for each ax in a
s = replace(s, ax, " ")
next
for each ax in split(application.trim(s), " ")
mydic.add strconv(ax, vblowercase), ""
next
next
res = mydic.keys
worksheets("sheet2").range("a1").resize(mydic.count, 1) = application.transpose(res)
end sub
みたいな。
#ハイフネーションを元の単語に戻すみたいな、ワープロ機能を付けだすとどんどん際限なくなっていきます。
活用形とか複数形とかは、まぁあんまりエクセルでやっつける範疇外のように思います。
この回答への補足
本当に一瞬で抽出しましたので感動しました。
昨日と今日でこれで2冊分を抽出できました。
思い通りできてうれしいのですが、また新たな問題に出くわしました。
私の狙いは英文を読んだときに、知らない単語や、あやふやと思う単語を抽出して学習したかったのです。
ところが毎回1万や5,000語の単語から、100~ 200の単語を選ぶのは大変だと気づきました。
しょっちゅう出てくる基本語や、一度出てきた語を除外して抽出する、なんてことができますかね。
勝手なことを言って申し訳ありませんが、何かヒントになるようなことでも教えていただけたら幸いです。
よろしくお願いします。
No.2
- 回答日時:
No.1です。
補足に
>「”」だけが消去できません
とありましたので、再びお邪魔します。
この際ですので、Sheet2のA列に重複なく表示させ、昇順に並び替えてみました。
↓のコードでマクロを実行してみてください。
Sub Sample2()
Dim i As Long, j As Long, k As Long, cnt As Long, c As Range, myArray1, myArray2, wS1 As Worksheet, wS2 As Worksheet
Set wS1 = Worksheets("Sheet1")
Set wS2 = Worksheets("Sheet2")
myArray2 = Array(".", "!", "?", """") '←「"」ダブルクォーテーションを追加しています。
For i = 1 To wS1.Cells(Rows.Count, 1).End(xlUp).Row
myArray1 = Split(wS1.Cells(i, 1), " ")
For k = 0 To UBound(myArray1)
wS2.Range("B1") = myArray1(k)
For j = 0 To UBound(myArray2)
wS2.Range("B1") = Replace(wS2.Range("B1"), myArray2(j), "")
Next j
Set c = wS2.Range("A:A").Find(what:=wS2.Range("B1"), LookIn:=xlValues, lookat:=xlWhole)
If c Is Nothing Then
cnt = cnt + 1
wS2.Cells(cnt, 1) = wS2.Range("B1")
End If
Next k
Next i
wS2.Range("B1").ClearContents
wS2.Range("A:A").Sort key1:=wS2.Cells(1, 1), order1:=xlAscending, Header:=xlNo
End Sub
※ For~Nextを多用していますので、時間がかかるかもしれません。
今度はどうでしょうか?m(_ _)m
この回答への補足
度々お手数をおかけして申し訳ありません。ありがとうございました。
やはり時間がかかりましたね。もともと私のWINDOWS XPは速度が遅くなっていたのですが、これをした時はフリーズしたのかと思うぐらい忘れた頃に抽出していました。
昨日と今日でこれで2冊分を抽出できました。
思い通りできてうれしいのですが、また新たな問題に出くわしました。
私の狙いは英文を読んだときに、知らない単語や、あやふやと思う単語を抽出して学習したかったのです。
ところが毎回1万や5,000語の単語から、100~ 200の単語を選ぶのは大変だと気づきました。
しょっちゅう出てくる基本語や、一度出てきた語を除外して抽出する、なんてことができますかね。
勝手なことを言って申し訳ありませんが、何かヒントになるようなことでも教えていただけたら幸いです。
よろしくお願いします。
No.1
- 回答日時:
こんばんは!
>20ページほどの英文があります
とありますが、
ExcelのSheet1のA1セル以降に英文があるとします。
英文の場合は半角スペースで単語毎に区切られるはずですので、それを利用しています。
VBAになりますが一例です。
Sheet2にA列に単語を表示するようにしてみました。
Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面に
↓のコードをコピー&ペーストしてマクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)
Sub Sample() 'この行から
Dim i As Long, k As Long, cnt As Long, c As Range, myArray, wS1 As Worksheet, wS2 As Worksheet
Set wS1 = Worksheets("Sheet1")
Set wS2 = Worksheets("Sheet2")
For i = 1 To wS1.Cells(Rows.Count, 1).End(xlUp).Row
myArray = Split(wS1.Cells(i, 1), " ")
For k = 0 To UBound(myArray)
Set c = wS2.Range("A:A").Find(what:=myArray(k), LookIn:=xlValues, lookat:=xlWhole)
If c Is Nothing Then
cnt = cnt + 1
wS2.Cells(cnt, 1) = myArray(k)
End If
Next k
Next i
End Sub 'この行まで
尚、通常英文は文章の最後に「.」(ピリオド)や「?」(疑問符)・「!」(感嘆符)等がついていると思いますが
それらは考慮していません。
もしそれらを消したい場合、Sheet2にデータが表示されたのちに↓のマクロを実行してみてください。
Sub 符号消去()
Dim i As Long, k As Long, myArray, wS As Worksheet
Set wS = Worksheets("Sheet2")
myArray = Array("!", "?", ".")
For i = 1 To wS.Cells(Rows.Count, 1).End(xlUp).Row
For k = 0 To UBound(myArray)
If InStr(wS.Cells(i, 1), myArray(k)) > 0 Then
wS.Cells(i, 1) = Replace(wS.Cells(i, 1), myArray(k), "")
End If
Next k
Next i
End Sub
※ 消去するのは「!」・「?」・「.」だけにしていますので、他の符号はArrayの中に追加してみてください。
こんなんではどうでしょうか?m(_ _)m
この回答への補足
早速にご回答いただきありがとうございました。
Windows XPの調子が悪く、ネットにつながらずやきもきしていました。(iMac ではメールとサイトを見ておりました)
先程やっとつながり、教えていただいたコードをコピーして試しました。
あまりにもうまくできたので感動しました。
アルファベット順に並び替えてみると、同じ単語がいくつか出てくるのに気づきました。
2つのコードを繰り返してうまく消すことができました。
1つおたずねしたいのですが、「”」だけが消去できません。
何か方法がありますか?
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルで重複データを行ごとに抽出したい 4 2022/12/05 08:18
- 大学受験 大学受験英語の勉強法についてです どうしても英語長文の勉強ができません 初めて数分で絶対にやる気がな 2 2023/05/05 00:32
- その他(学校・勉強) 漢文が難しすぎます 覚えるべき単語が多すぎて、捨てようか迷っています 自分は理系で、共テだけで漢文を 4 2023/05/11 23:05
- 英語 英語勉強 4 2022/07/14 21:01
- 大学受験 明治大学受験、もう一冊、英単語張をやるか? 4 2022/10/23 20:50
- 大学受験 大学受験英語長文の勉強法について 武田塾のYouTubeなどを参考にして、勉強法を考えました 自分は 2 2023/05/05 08:05
- 英語 高3です。 英語が本当に出来なくて困ってます。 英単語はなんとか覚えられたのですが、 文法が全く分か 3 2022/05/04 17:47
- PDF いきなりPDFで文書の切り取り 3 2022/10/29 13:25
- 大学受験 大学受験英語の勉強方法として、まず、単語と文法をやれと言われます 単語はやっているのですが、文法はや 3 2023/05/04 22:45
- TOEFL・TOEIC・英語検定 【英会話】[Would]を使った文章の和訳方法や使い方がなかなか理解出来ません。 理解出来ない例文 1 2022/08/08 13:04
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA コピーを有効行までループ...
-
Excelで連続印刷をするマクロ
-
条件に応じて特定の行を非表示...
-
EXCELで指定範囲に一括し...
-
Excel にて非表示行を探すワー...
-
エクセルでの書式ー下付きショ...
-
yyyy/mm/ddの日付に一括変換す...
-
Excel2007 セルを右方向に削除...
-
Excel(VBA)データ入力に応じて...
-
エクセルで同じ行中にある先頭...
-
wordのvbaでハイパーリンク設定...
-
Excelでセル内の数式は残し値だ...
-
EXCEL:同じセルへどんどん足し...
-
Excelで同じシートのコピーを一...
-
エクセルで前のシートを連続参...
-
EXCELで1ヶ月分の連続した日付...
-
Accessのスプレッドシートエク...
-
別シート参照のセルをシート毎...
-
日報をエクセルで作成したいの...
-
VBAでシートコピー後、シート名...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
条件に応じて特定の行を非表示...
-
Excelでセル内の数式は残し値だ...
-
Excel2007で、太字にした行のみ...
-
Excelで連続印刷をするマクロ
-
「マクロ」の足し算の式を教え...
-
エクセル VBA 小数点を含む数字...
-
エクセルで全ての数字間にカン...
-
(Excel2003)すぐ左の最後の行...
-
Excel(VBA)データ入力に応じて...
-
Excel にて非表示行を探すワー...
-
エクセルで、行ごとの並び替え...
-
エクセル2003でマクロをおこな...
-
excel ある部分だけをコピペし...
-
行の入れ替えってどうするの?
-
Excelで周期的に列を削除する方法
-
整数行を残し小数点の行を削除...
-
EXCEL マクロで「キーワード入...
-
VBA コピーを有効行までループ...
-
Excel2007 セルを右方向に削除...
-
wordのvbaでハイパーリンク設定...
おすすめ情報