A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
続きです。
添付画像で、今のところ、中途半端なスタイルになっていますが、ランダムで出力したものを、フラッシュカード・スタイルで出力するのですが、やった数だけ、1がついていきます。
本来は、逐時モードと連続モードの予定ですが、今の段階では、連続モードと逐時モードがごちゃごちゃになっています。逐時モードは、覚えたかどうかをクリックして、記録するもので、連続モードは、一気に流れていきます。完成までには、まだ試行錯誤が続きそうです。
よいスピークエンジンがあれば、もっとよくなります。
1ヴォイス-4000円程度します。(日本語も売られています。市販のものと、Windowsの添付では雲泥の差があります)
現在、AT&Tはなくなってしまいました。興味があれば、紹介いたします。
これ以上は、ご質問者さんが現れない限りは、発表は控えさせていただく予定にしています。自分が思っている以上のものができるような予感がします。
なお、日本語訳は、古い辞書から学習用の訳つけが可能でしたので、P-DICではないものを利用しました。
なお、私の勝手な判断で、先に進めてしまったことはお詫び申し上げます。
実際は、これをAndroid に応用できるとさらによいでしょう。
'//標準モジュール
Sub WordTest()
Dim ArWords()
Dim strt As Long
Dim T As Long
Dim K As Long, K1 As Long
Dim Voice As SpeechLib.SpVoice
Set Voice = New SpeechLib.SpVoice 'CreateObject("Sapi.SpVoice")
'参照設定 Microsoft Speech Object Library '(sapi.dll)
Dim sh1 As Worksheet: Set sh1 = Worksheets("Sheet1")
Application.EnableCancelKey = xlErrorHandler
On Error GoTo ErrHandler
strt = 1
T = Range("J4").Value
If T < 5 Or T > 99 Then
MsgBox "出題数は、5個からです", vbExclamation
Exit Sub
End If
K = sh1.Range("J7").Value
If K <= 0 Then
MsgBox "速度係数が存在しないか間違っています。", vbCritical
Exit Sub
End If
ReDim ArWords(1 To 20, 1 To 2)
With sh1
For i = 1 + strt To 20
ArWords(i, 1) = .Cells(i, "Q").Value
ArWords(i, 2) = .Cells(i, "R").Value
Next i
For i = 1 To 20
p = i '別のマクロへ
.Range("D6").Value = ArWords(i, 1)
Voice.Speak "<xml><lang langid=""409"">" & ArWords(i, 1) & "</lang></xml>" '英語
Application.ScreenUpdating = True
Application.Wait Now() + TimeSerial(0, 0, K)
.Range("D9").Value = ArWords(i, 2)
Voice.Speak "<xml><lang langid=""411"">" & ArWords(i, 2) & " </lang></xml>" '日本語
DoEvents
K1 = Application.Max(2, K - 2)
Application.ScreenUpdating = True
Application.Wait Now + TimeSerial(0, 0, K1)
.Range("D6").Value = ""
.Range("D9").Value = ""
.Cells(i + Start, "P").Value = .Cells(i + Start, "P").Value + 1 'Count
Next
End With
Application.EnableCancelKey = xlInterrupt
Exit Sub
ErrHandler:
With sh1
.Range("D6").Value = ""
.Range("D9").Value = ""
End With
Exit Sub
End Sub
'//
セル情報 D6 から結合セル(3行4列)
D9から結合セル(3行4列)
ランダムの英単語は、Q2から下へ
J4-出題数
j7-速度
j10- 優先
j13 -モード
D12/E12 は、覚えた/覚えられない の逐時モードのスイッチ予定
No.5
- 回答日時:
まだ、私は続けています。
(^^;Excelはなぜか外部オブジェクトのP-DICのユーティリティが組み込めません。ワードはできたようです。ただ、P-DICは、DDEですから、猛烈に遅いです。そで、一行スタイルに出力し、CSVに組み替えてしまいました。
78万行になりました。(ver51 かなり古いものです。学習用は学辞郎が優れています。)
こうやって考えてみると、50個ランダムに出すのは良いにしても、単語暗記は繰り返さなくてはなりません。(ただし、私のやり方は、似た意味のものをなるべく集めるという原則は守りたいです)
一旦、ランダムのインデックスを作ってしまったら、10~50個区切りで出題しなくてはならないはずです。そして、係数(自己申告で覚えたか覚えなかったかの区別の数値化)で管理しなくてはなりません。
後は、音声もつけなくてはなりませんね。
No.4
- 回答日時:
#3の回答者です。
この先が見えてきません。(私自身が、という意味です)まず、訳を振るマクロというものが、以前は、シャープの翻訳これだけ、とか、IBMの翻訳の王様という学習用のツールがあったのですが、今は、Microsoft Translator 当たりになるけれど、Azure に移行してから、使い方がわからなくなってしまいました。
PDIC一行辞書とかいうものがありますが、うまくいくかどうか分かりません。
No.3
- 回答日時:
こんにちは。
マクロの処理のほうがきれいにいくと思います。
50個抽出した後の問題が残ります。
実際に、作ってみましょう。
英単語は、画像では一部ですが、著作権フリーの「英語キュレーション」のレベル10を使わせていただきました。
http://wordchunk.azurewebsites.net/View/PC/html/ …
いろんな単語リストの中で、内容的に優れているので、私のお薦めです。
今回は、ランダムで出力するだけのものですが、暗記のためのリストですと、これでは不足しているように思います。繰り返しするということで、間違えたら、カウントを加えていき、多くカウントがついたものから、再び学習し、OK(True)になるまで繰り返すようにしたら良いと思います。ただし、今回のコードは、まだ、バグが残っているようです。
以下は、標準モジュールに貼り付けてください。
'//
Option Explicit
Sub RondomIndex()
'1列目:単語,2列目:Index
Const NUM As Long = 50
'シート名(任意)
Dim sh1 As Worksheet: Set sh1 = Worksheets("Sheet1")
Dim sh2 As Worksheet: Set sh2 = Worksheets("Sheet2")
Dim LastRow As Long
Dim Ar1() As Variant
Dim Ar2() As Variant
Dim i As Long, j As Long, mx As Long, cnt As Long
Dim ret As Variant
With sh1
cnt = Application.CountA(.Range("A2:A500"))
If cnt > 0 And cnt < (NUM * 0.5) Then '0.5 の決まりはない
'データがあると誤動作します。
If MsgBox("念のために1列目のデータを消去します", vbOKCancel) = vbCancel Then Exit Sub
.Range("A2", .Cells(Rows.Count, 1).End(xlUp)).ClearContents
End If
End With
'1行目はタイトル行
'index の2列目で見る
LastRow = sh2.Cells(Rows.Count, 1).End(xlUp).Row '最後尾
If sh2.Cells(Rows.Count, 2).End(xlUp).Row < 5 Then
With sh2
ReDim Ar1(1 To LastRow - 1, 0 To 1)
ReDim Ar2(1 To LastRow - 1, 0)
Randomize
For i = 1 To UBound(Ar1, 1)
Ar1(i, 0) = Rnd()
Ar1(i, 1) = i
Next
'ランダム番号出力
RankingPos Ar1(), Ar2()
.Cells(2, 2).Resize(LastRow - 1).Value = Ar2
End With
MsgBox "もう一度実行してください。", vbInformation
Else
With sh1
j = .Cells(Rows.Count, 1).End(xlUp).Row + 1
mx = j - 1
Application.ScreenUpdating = False
For i = mx To mx + NUM
ret = Application.Match(i, sh2.Range("B1").Resize(LastRow - 1), 0)
If IsNumeric(ret) Then
If Application.CountIf(sh1.Range("A2:A1200"), sh2.Cells(ret, 1).Value) > 1 Then
'MsgBox sh2.Cells(ret, 1).Value, vbCritical 'ダブリ発見の場合
'stop
Else
.Cells(Rows.Count, 1).End(xlUp).Offset(1).Value = sh2.Cells(ret, 1).Value
End If
End If
Next
Application.ScreenUpdating = True
If LastRow >= mx + NUM + 1 Then
Application.Goto .Cells(mx + NUM, 1)
Else
Application.Goto .Cells(Rows.Count, 1).End(xlUp)
MsgBox "このレベルの最後です", vbInformation
End If
End With
End If
End Sub
Function RankingPos(Ar(), Ar2())
Dim i As Long
Dim j As Long
Dim Temp As Double, Temp2 As Long
For i = UBound(Ar, 1) To LBound(Ar, 1) Step -1
For j = LBound(Ar, 1) + 1 To i
If Ar(j - 1, 0) > Ar(j, 0) Then
Temp = Ar(j - 1, 0)
Temp2 = Ar(j - 1, 1)
Ar(j - 1, 0) = Ar(j, 0)
Ar(j - 1, 1) = Ar(j, 1)
Ar(j, 0) = Temp
Ar(j, 1) = Temp2
End If
Next j
Ar2(i, 0) = Ar(i, 1)
Next i
End Function
'//
画像
No.2
- 回答日時:
自分なら、A列に英単語、B列にRAND関数を入力し、
B列からLARGE関数またはSMALL関数で上位か下位の50個を選択して、それをMATCH関数とINDEX関数を使って表示させる。
LARGE関数やSMALL関数ではなく、RANK関数使って順位を付けて、その1位から50位までに対応する値を表示させるようにしても良いかもしれない。
ただ、この場合は配列数式になるのでお勧めしない。
No.1
- 回答日時:
簡単なマクロを組み込めばサクッとできます
参考
http://www.moug.net/tech/exopr/0090051.html
https://detail.chiebukuro.yahoo.co.jp/qa/questio …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBA 複数条件にマッチし...
-
Excel で行を指定回数だけコピ...
-
エクセル形式の住所録から自動...
-
歯抜けの時間を埋めて行の挿入
-
エクセル:VBAで月変わりで、自...
-
Excel VBA インデックスの境...
-
ExcelVBAで改ページを追加したい
-
VBA別シートの最終行の下行へ貼...
-
エクセルVBAでの日付順のデ...
-
スマホ機種変更で旧機種のGoogl...
-
代替機にキズ
-
スマホにPCから音楽を入れたい...
-
画面が真っ暗に・・・
-
LAVIE Direct DT PC-GD298ZZAL...
-
FOMAカード(UIM)異常
-
着うた用に変換しても認識でき...
-
動画のダウンロードについて
-
拡張子「.HUF(.huf)」のファ...
-
ディーガからmicroSDに取り込ん...
-
外付けHDDをフローリングに落と...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel で行を指定回数だけコピ...
-
excelの差込印刷で可視セルだけ...
-
Excel VBA インデックスの境...
-
エクセル:VBAで月変わりで、自...
-
VBA別シートの最終行の下行へ貼...
-
VBA:同じ文字列データの比...
-
エクセルVBAで 2種のリストを...
-
エクセルVBA 別シートの複数の...
-
歯抜けの時間を埋めて行の挿入
-
エクセルVBAで SendKeys "{TAB}"
-
エクセル2007で、マクロで、結...
-
VBA 貼付先範囲(行)がいっぱ...
-
vbaでコントロールブレイク
-
エクセルVBAでの日付順のデ...
-
Excel VBAでシート内全体に非表...
-
《エクセル》リストから同じ分...
-
Excelマクロ データが上書きさ...
-
VBAの処理が途中で止まる
-
エクセルVBAで実行時エラー...
-
EXCELマクロで全シート対...
おすすめ情報