ジメジメする梅雨のお悩み、一挙解決! >>

YouTubeに「絶対覚える英単語1000」というサイトがあるのですが英単語を覚えるのに役立ちます。

この「絶対覚える英単語1000」を真似して、自分で、

①英単語が表示する
②その英単語を読み上げる
③しばらくして、その英単語に対する日本語が表示する
④その日本語を読み上げる

コンテンツを、作りたいですが、どのようにすれば、良いでしょうか?

ソフトは、
日本語読み上げソフト「テキスト読み上げ太郎」を持っています。

ひよっとして、プログラムを作る必要が御座いましたら、Excel2013のVBAも少し使えます。

質問者からの補足コメント

  • うれしい

    ご回答有難う御座います。


    すこしVBAを復習して、教えて頂いた通り、やってみます。
    まずは、お礼を申し上げます。

    「絶対覚える英単語1000」のレベル2,3を覚えようとしてますが、あまり効果が上がらないです。
    ・自分の目指している分野の英単語と違うものが多く含まれている。
    ・十分知っている単語まで含まれている。
    ためだと思います。
    たぶん、自分の目指している分野の英単語を1000語ぐらい覚えれば、かなり英語力が上達するはずです。
    やはり自分に必要なものだけを選択して覚える必要があります。

    そのために、教えて頂きました方法で、是非、自分なりの英単語コンテンツを作りたいです。

      補足日時:2016/06/11 15:16
  • うれしい

    ご回答有難う御座います。

    Microsoft Speech Platform(Ver.11) をインストールしました。

    更に、誠に誠に申し訳御座いませんが、
    現在のプログラムでは、
    ①まず英単語(または英文)を読み上げる
    ②英単語(または英文)が表示
    ③その英単語(または英文)が消える
    ④日本語を読み上げる
    ⑤日本語を表示
    の順番となります。

    更に以下のような順番にはならないでしょうか?

    ①まず英単語(または英文)が表示する
    ②その英単語(または英文)を読み上げる
    ③その英単語(または英文)を消さずに、その下に日本語を表示
    ④その日本語を読み上げる
    ⑤ここで、英単語(または英文)と日本語が消える
    ⑥次の英単語(または英文)が表示する

    我儘を申しまして、すいませんが、よろしくお願い致します。

    No.3の回答に寄せられた補足コメントです。 補足日時:2016/06/11 18:33
  • うれしい

    WindFaller様、お世話になります。
    単語の後に、"。。。"を入れることにより、解決しました。
    少しこの状態で使ってみます。

    No.5の回答に寄せられた補足コメントです。 補足日時:2016/06/14 16:50

このQ&Aに関連する最新のQ&A

英語 視覚障害」に関するQ&A: 視覚障害者のことを英語でなんと言いますか?

A 回答 (5件)

こんにちは。



>これを、一気に、
>"abbreviation"
>と表示させ、
>同様に"短縮"
>と表示させることは出来ないでしょうか?

今回のは、私の考えたオプションだったからですが、途中で止まるのは、たぶん、Excelの仮想メモリとの関係だと思います。やっぱりまずかったのかなって思います。ただ、プログラムとして選択オプションとしては残したいとは思っていますが、暫定的に、私の希望は置いておき、DreamsComeFalse様のご希望のスタイルに従っていくことに決めました。

私のイメージには、
http://実践英語.com/speaking/instant_english_tool.html
このようなものがあります。ここは、ほとんど瞬時で出てくるのですが、私自身は、時間差が必要なのです。日本語の理解から英語を直す時に瞬時ということができません。その為もあってのことです。

>教えて頂いたコンテンツに、900語近い単語を登録して覚えようと考えています。

これは、最近、同じことを別所でも書いているのですが、どうやって覚えるかという根本的な理論の裏付けも必要ではないでしょうか。

大前提として
・英単語の記憶は繰り返しやるしかない
これにつきます。私がやり始めた頃は、だいたい5クールを終えれば覚えられましたが、それから年齢が上がると、10クールをやっても覚えられなくなってきました。(最初は、10年以上前からです)
1クールは、当時は、300語で、一日の量は20語。これを一通り覚えて、一日のノルマを終了することとします。全部を通して、1クール。順調に行けば、15日で1クールになるはずです。

英単語を覚えるときにしておくべきことは、
 反射的に意味が分かるように覚えておくことです。
 条件反射的にサッと出てくるようする。(ただし、日本語訳を言うことではありません。)
 それを、だんだんとスピードを挙げていくこと。そろばんのフラッシュカードと同じようにします。現行のデータを読み上げますから、速くありません。(サイレントモードで、フラッシュカード形式にしてもよいかと思います)
 
 私の経験では、一週間か10日単位で、100語程度を繰り返すのが、一番効率がよいです。覚えたものと覚えていないものをより分けていくのです。やらないものは忘れているか実験をしてみると、覚えたものは覚えているものだそうです。
 
 最終的には、100語を1秒~2秒程度で進めていきます。(英単語からの場合は、意味が分かることです)ここでほぼ完全になれば、その逆、日本語をみて英語は、声に出すことをします。そして、音声を聞きます。

私の覚え方は、学生さんの方法とは違って、単独で単語を覚えることはかなり少ないです。

まず、日本語で見る
--------------
多くの著名な演説者たちが年次[集会]の準備をしていた。
       ↓[STOP] -Userが、次に進ませる
Many famous speakers were preparing for their annual convention.
    ↓[STOP]-Userに、出来たかどうかを確認
convention
 ↓
集会

[次]
--------------
3と4は、順序は決まっていませんが、このようにします。
[出典:英検1級Pass単語]

改定部分は、ESCで割り込み終了を可能にしました。
----当面の修正-------
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
Sub SettingVoice2()
  Dim Voice As SpVoice
  Dim s1 As String
  Dim s2 As String
  Dim DispSh As Worksheet
  Dim DataSh As Worksheet
  On Error GoTo ErrHandler
  Application.EnableCancelKey = xlErrorHandler
  '表示シート1[Worksheets("Sheet1")]で使う
  Set DispSh = Worksheets("Sheet1")
  'データシート[Worksheets("Sheet2")]のA2 から、下に入れていく。
  Set DataSh = Worksheets("Sheet2")
  Set Voice = New SpVoice 'テキスト・スピーチ TTS インスタンス
  Const SPD As Long = 50 '次回の表示まで 1000= 1秒
  Dim bln As Boolean
  Dim sw As Boolean: sw = False '日英切り替えスイッチ  'True は日本語が先
  With DispSh
    .Range("C4, C6").ClearContents
    If bln = False Then
      With .Range("C4, C6").Font
        If .Size < 12 Then
          .Size = 16
          .Bold = True
          bln = True
        End If
      End With
    End If
  End With
  If sw Then
    Voice.Speak "さあ 英単語を覚えましょう"
  Else
    Voice.Speak "<xml><lang langid=""409"">learn the next words by heart</lang></xml>" '英語
  End If
  Application.ScreenUpdating = True
  With DataSh
    For j = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
      If sw Then
        s1 = .Cells(j, 2).Value:   s2 = .Cells(j, 1).Value
      Else
        s1 = .Cells(j, 1).Value:   s2 = .Cells(j, 2).Value
      End If
      '---upward--
      DispSh.Range("C4").Value = s1 '表示
      DoEvents
      Sleep 10 '暴走を止める安全装置
      If sw Then
        Voice.Speak s1 '日本語
      Else
        Voice.Speak "<xml><lang langid=""409"">" & s1 & "</lang></xml>" '英語
      End If
      Sleep SPD
      '----downward----
      DispSh.Range("C6").Value = s2 '表示
      DoEvents
      Sleep 10 '暴走を止める安全装置
      If sw Then
        Voice.Speak "<xml><lang langid=""409"">" & s2 & "</lang></xml>" '英語
      Else
        Voice.Speak s2 '日本語
      End If
      DispSh.Range("C4,C6").ClearContents
      Sleep SPD '次回表示までの時間
    Next j
  End With
  If sw Then
    Voice.Speak "続ければ結果が必ず出ます。"
  Else
    Voice.Speak "<xml><lang langid=""409"">We belive you will come over.</lang></xml>" '英語
  End If
ErrHandler:
  If Err.Number = 18 Then
    MsgBox "ユーザーの命令で中途で終了します。", vbExclamation
  ElseIf Err.Number <> 0 Then
    MsgBox Err.Number & ": " & Err.Description
  End If
  DispSh.Range("C4,C6").ClearContents
  Set Voice = Nothing
  Application.EnableCancelKey = xlInterrupt
End Sub
この回答への補足あり
    • good
    • 2
この回答へのお礼

毎々、ご丁寧なご回答、本当に有難う御座います。

>私自身は、時間差が必要なのです。日本語の理解から英語を直す時に瞬時ということができません。
>その為もあってのことです。

私もそうで御座います。
英語だけを表示させ、そのとき、しばらく日本語の意味を考えることによって、覚えていきたいです。

誠に、申し訳御座いません。
私の表現が悪かったです。

英語と日本語を同時に表示させるのではなく、

改善前
abbreviation(短縮)という英単語の場合、
①abbreviationと発音
②abbreviatioが表示(全部表示しないです)
③短縮と発音
④(abbreviatioの残りの)nが遅れて表示
⑤短が表示(全部表示しないです)
⑥(短の残りの)縮が遅れて表示
となりますので、

改善後
①abbreviationと発音
②abbreviationと表示(全部表示してほしいです)
③少し時間を置いて
④短縮と発音
⑤短縮と表示(全部表示してほしいです)
にしてほしいです。

何回も、お手数をお掛けして、誠に申し訳御座いませんが、何卒、よろしくお願い致します。

追伸
私のPCの能力の問題かもしれません。
EXCEL VBA 実行中、ずーと「待ち状態」のマークが表示してます。


>これは、最近、同じことを別所でも書いているのですが、どうやって覚えるかという根本的な理論の裏付けも必要ではないでしょうか。
コツをご教示頂き、有難う御座います。

私の英語力は、英検3級程度ですが、何とか、将来英語サイエンス論文を読みたいと思っています。
先日、英語に慣れる目的で、アガサ・クリスティー著「そして誰もいなくなった」(英語)にチャレンジしましたが、全く読めませんでした。
やはり文学は、表現が複雑で、使われている単語も多く、難しいです。
この失敗から、サイエンス英語だけに特化して取り組もうと考えています。

そこでまず、サイエンス関連の英単語を、900語覚える(教えて頂いたプログラムを利用)
次に、サイエンス関連の簡単な本(例えば、日経サイエンスの英語、日本語翻訳同時記載版)を読む
更に、サイエンス関連の英語教科書を読む
最後に英語サイエンス論文を読む
で、達成したいと考えています。

お礼日時:2016/06/13 11:48

すみません。


お礼を見落としてしまいました。すぐに手を加えました。
補足のほうは、特別な時のために取っておいてくださいね。
それから、「我儘を申しまして」なんていう気兼ねは、不要です。
それは、私も考えていたことですから、自分なりのアレンジをいくつか加えています。

私は、システムとして考えていますから、これが終われば、P-DICから抜き出し問題を作る、データ作りも考えなければなりません。私は、数千から万のデータを保有していますが、気に入らないものが大半です。それで、「学辞郎」をわざわざ手に入れました。これから、問題を作るのもなかなか大変です。P-Study System用というツールはあっても、私は、満足していませんでしたから。

今、私の英単語の語彙力は、Words and Tools のintermdiate ですと、10,000語をやっと越えるぐらいです。120語ありますから、もっとも量の多い単語テストです。
http://www.bhever.net/wordsandtools/index_lemma. …

http://testyourvocab.com/ こちらは、アテになりませんが、15,000レベルまで一応いきます。

> VBAを実行しました。

これがスタートですから、後は、できれば、逆にアドバイスしていただきたいと思います。

#3で書いたように、あまりデザインとか私は得意ではありません。
私自身としても、ある程度の格好、システムとして作りたいと思います。

>更に、大きな文字で、表示して頂きましたら、うれしいです。

私は、フォントを16にしています。これは、マクロでなくても良いと思いますが、臨時的にマクロに入れておきましょう。

こんどの改良点を少し説明すると、★で、表示スピードが多少変わります。
SPD は、スピードで、数が多くなるほど、遅くなります。
★★ swは、sw = True とすると、日本語が先になり、英語が後になって出てきます。

=""409""> となっているのが、米国です。

=""809""> となれば、英国です。

ただ、聞いてみると、日本語のクォリティが低いなって思います。
misakiさんがあればと思いますが、組み入れられないかもしれません。しかし、misakiさんがあれば、英語の方もクォリティを上げたくなります。いずれにしても、日本語のクォリティが上がればと思います。

データは、あくまでも、シートのセルにこだわりたいと思います。#3で書いたように、記録をする必要があるのではないかと思うからです。

ボタンを右クリックして、マクロの登録で、こちら「SettingVoice2」に変えます。以下で、少し楽しんでみてください。

'//
Sub SettingVoice2()
  Dim Voice As SpVoice
  Dim s1 As String, s2 As String
  Dim DispSh As Worksheet
  Dim DataSh As Worksheet
  '表示シート1[Worksheets("Sheet1")]で使う
  Set DispSh = Worksheets("Sheet1")
  'データシート[Worksheets("Sheet2")]のA2 から、下に入れていく。
  Set DataSh = Worksheets("Sheet2")
  Set Voice = New SpVoice 'テキスト・スピーチ TTS インスタンス
  Const SPD As Long = 50 '通常50~200まで ★
  Dim bln As Boolean
  Dim sw As Boolean: sw = False '日英切り替えスイッチ★★
  With DispSh
    .Range("C4, C6").ClearContents
    If bln = False Then
      With .Range("C4, C6").Font
        If .Size < 12 Then
          .Size = 16
          .Bold = True
          bln = True
        End If
      End With
    End If
  End With
  If sw Then
    Voice.Speak "さあ 英単語を覚えましょう"
  Else
    Voice.Speak "<xml><lang langid=""409"">learn the next words by heart</lang></xml>" '英語
  End If
  With DataSh
    For j = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
      If sw Then
      s1 = .Cells(j, 2).Value:   s2 = .Cells(j, 1).Value
      Else
      s1 = .Cells(j, 1).Value:   s2 = .Cells(j, 2).Value
      End If
      For i = 1 To Len(s1)
        Sleep SPD
        DispSh.Range("C4").Value = Mid(s1, 1, i)
        DoEvents
      Next i
      Application.ScreenUpdating = False
      If sw Then
        Voice.Speak s1 '日本語
      Else
        Voice.Speak "<xml><lang langid=""409"">" & s1 & "</lang></xml>" '英語
      End If
      Application.ScreenUpdating = True
      Sleep 1000
      For i = 1 To Len(s2)
        Sleep SPD
        DispSh.Range("C6").Value = Mid(s2, 1, i)
        DoEvents
      Next i
      Application.ScreenUpdating = False
      If sw Then
        Voice.Speak "<xml><lang langid=""409"">" & s2 & "</lang></xml>" '英語
      Else
        Voice.Speak s2 '日本語
      End If
      Application.ScreenUpdating = True
      Sleep 1000
      DispSh.Range("C4,C6").ClearContents
    Next j
  End With
  If sw Then
    Voice.Speak "おつかれさまでした。"
   Else
   Voice.Speak "<xml><lang langid=""409"">Thank you for listening</lang></xml>" '英語
   End If
  Set Voice = Nothing
End Sub
'//
    • good
    • 1
この回答へのお礼

ご丁寧なご回答有難う御座います。

> ボタンを右クリックして、マクロの登録で、こちら「SettingVoice2」に変えます。以下で、少し楽しんでみてください。

試しました。またまた素晴らしいです。ご修正、本当に有難う御座います。

> これがスタートですから、後は、できれば、逆にアドバイスしていただきたいと思います。

すいません。お言葉に甘え、もしよろしければ、1点だけ、ご改良頂きましたら幸いです。

sheet2に、900語近い単語を登録して、実行させて頂きました。
すると、例えば、
abbreviation(短縮)という英単語の場合、
"abbreviatio" まで、表示して、(日本語を話している途中に)残りの"n"が遅れて表示します。
同様に、"短"まで、表示して、残りの"縮"が遅れて表示します。

これを、一気に、
"abbreviation"
と表示させ、
同様に
"短縮"
と表示させることは出来ないでしょうか?

ご無理申しますが、よろしくお願い致します。

> 今、私の英単語の語彙力は、Words and Tools のintermdiate ですと、10,000語をやっと越えるぐらいです。120語ありますから、もっとも量の多い単語テストです。

すごいですね。私は多分1000語ぐらいしか語彙力がないです。
今後、教えて頂いたコンテンツに、900語近い単語を登録して覚えようと考えています。

> #3で書いたように、あまりデザインとか私は得意ではありません。
> 私自身としても、ある程度の格好、システムとして作りたいと思います。

(私も勝手ながら)デザインよりも機能性が高い方が有り難いです。

お礼日時:2016/06/11 21:07

まず、Microsoft Speech Platform(Ver.11) をインストールしてくださいね。

その後は、何でも協力はできます。

ただ、今一つ、レイアウトは、私は、壊滅的なので、なんとかしたいと思っています。ユーザーフォームに入れるかどうかは、少し迷います。

たぶん、「絶対覚える英単語1000」よりもクオリティは高いです。
これに、覚えたか覚えていないかを分けるボタンも必要ですね。
ボタンを押したら、繰り返しもできるようにできればしたいですね。

また、逆の日本語から英語の方も必要ですね。

それと、注意点がひとつあるのは、TTSエンジンは、文章を読ませる方は得意でも、単語レベルになると、あまりうまく行かないものもあります。固有名詞は不得意です。

それから、英単語の覚え方というのは、覚えたものを、だんだんと減らして、覚えられないものを繰り返していくという方法がよいとされています。そうすると、カウントが必要になってきます。

>自分なりの英単語コンテンツを作りたいです。

非力ですが、何かお手伝いできるかもしれません。
この回答への補足あり
    • good
    • 2

もし、すでに「Microsoft Speech Platform」を入れてあったら、そのままでも結構です。

なるべくPlatform Ver11.0 をお使いください。

Windows8 は、不要な場合もありますが、

http://mahoro-ba.net/e1542.html
「DownloadMssp_22.EXE」
[MSSP簡単インストーラー]
で行ったほうが全体を把握し確認し、安全に進められるようです。

日本語は当然として、英語・米語を含めて、入れておいてください。

インストーラーなしでも、構いません。
Microsoft Speech Platform - Runtime (Version 11)
https://www.microsoft.com/en-us/download/details …
これと、
MSSpeech_TTS_en-US_Helen.msi
MSSpeech_TTS_en-GB_Hazel.msi
MSSpeech_TTS_ja-JP_Haruka.msi
https://www.microsoft.com/en-us/download/details …
を元に、VBAを作りました。

MicrosoftSpeechSDK は開発をしないのなら、不要です。
*
なお、既にお使いの音声エンジンはMicrosoft Speech Platform(Ver.10) 以外は残しておいても大丈夫です。私は、SAPI5 のAT&T の音声エンジンを持っていますので、それをなしにすることはできません。#1で書いたように、性能では、まだ市販品のものが上位です。

今回は、Excel VBAを利用しています。

インストールが終わりましたら、VBEから、

ツール-参照設定-
■ Microsoft Speech Object Library  ←二つ出てきますから、下のファイル名を見ながら選んでください。

C:\Program Files\Common Files\Microsoft Shared\Speech\Platform..
これにチェックを入れてください。

'----------標準モジュール------------
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
Sub SettingVoice()
'シート1[Worksheets("Sheet1")]で使う
Dim Voice As SpVoice
Dim s As Variant
Set Voice = New SpVoice
Voice.Speak "<xml><lang langid=""409"">learn the next words by heart</lang></xml>"  '英語
With Worksheets("Sheet2")
For j = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
   s = .Cells(j, 1).Value
   Voice.Speak "<xml><lang langid=""409"">" & s & "</lang></xml>"  '英語
   Sleep 1000
   Worksheets("Sheet1").Range("C4").Value = s
   If s <> "" Then
   s = .Cells(j, 2).Value
    Voice.Speak s  '日本語
    Sleep 1000
    DoEvents
     Worksheets("Sheet1").Range("C4").Value = s
    Sleep 1000
     Worksheets("Sheet1").Range("C4").Value = ""
   End If
Next j
End With
    Voice.Speak "<xml><lang langid=""409"">Thank you for listening</lang></xml>"  '英語
   Set Voice = Nothing
End Sub

'-----------------------
Sheet2 データ、A列は英語、B列は日本語

    A              B
Sentence              日本語
I was born in November.     私は11月生まれだ。
Amy's birthday is in October.   エイミーの誕生日は10月だ。
Sunday              日曜日
Thursday             木曜日
Tuesday              火曜日
Wednesday            水曜日


Sheet1   フォームオブジェクトのボタンがあり、上記のコードを登録します。

-----------------------
感想としては、YouTube の「絶対覚える英単語1000」のクォリティよりは、日本語の品質は高いけれども、10年以上昔から知られている音声エンジンの「ミサキ(misaki)」よりは、遥かに劣ります。もちろん、misakiには、イントネーションのユーザー定義辞書を備えていますから、長年、視覚障がい者のために利用されてきました。
http://neospeech.com/ NeoSpeech Text-to-Speech misaki
個人的には、もうこれは、もうPublic Domainでフリーでもいいのではないかと、思ってしまうのです。

本プログラムについては。
おそらく、もう少し見栄えのよいものを、誰かが作るかと思います。
私は、例文なくして英単語は覚えられない主義です。
英検Pass単熟語(古本で安い)の例文集などを、本をバラして、OCRに入れてデータを取ってもよいのではないかと思います。

私が考えるのは、システムとして教材づくりのほうを、しばらく前から始めています。英辞郎の学習版、『学辞郎』をやっと手に入れて、そこからデータを取り出して組み入れようとしていますが、アルク社のSVL, SILをすべて抜き出しデータベース化して、他の単語リストに、その例文を割り当てるためのシステムを考えています。
「英語単語を読み上げるコンテンツを作る方法」の回答画像2
    • good
    • 1
この回答へのお礼

ご回答有難う御座います。

教えて頂きました通り、VBAを実行しました。
素晴らしいです。
英文まで、読めるとは、知りませんでした。英語の発音も問題ないようです。

誠に、申し訳御座いません。

現在のプログラムでは、
①まず英単語(または英文)を読み上げる
②英単語(または英文)が表示
③その英単語(または英文)が消える
④日本語を読み上げる
⑤日本語を表示
となります。

更に以下のようにはならないでしょうか?

①まず英単語(または英文)が表示
②その英単語(または英文)を読み上げる
③その英単語(または英文)を消さずに、その下に日本語を表示
④その日本語を読み上げる

更に、大きな文字で、表示して頂きましたら、うれしいです。

我儘を申しまして、すいませんが、よろしくお願い致します。

お礼日時:2016/06/11 16:41

こんばんは。



YouTube の「絶対覚える英単語1000」のクォリティよりは、高いものは作れるものの、かなり大事な問題があります。それは、日本語と英語を交互に入れ替えることです。YouTube を聞くと、同じ合成音声を使っているようには思えないので、それを他で喋らせることが出来ないかと考えています。

二つのオートメーション・オブジェクトを入れればよいような気がしますが、マクロでレジストリをいじることになると思います。

"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\
この部分があるはずです。このエンジンを切り替えるというのは、かなり冒険になってしまいますし、壊したくはありません。以前、壊したことがあって、修復するのに手間が掛かりました。最初からオートメーションを二つ作ればと考えるかもしれませんが、本体はひとつだけしかありませんから、負荷が強いのではないとか思っています。

それをどうするか、思案中です。
英語だけなら簡単です。

私は、早速以下を読ませるものを作ってしまいました。

例えば、
I was born in November.    November
Amy's birthday is in October.  October

英辞郎の姉妹版『学辞郎』のレベル1 を、PDIC(旧)から、例文を吐き出させることができます。

問題は、Speach Engine です。
日本語と英語を交互に言わせるとなると、別のエンジンを使ったほうが安全だと考えたからです。そんなに切り替わりが早いはずがありませんから。

私が気に入っているのは、ATT Natural Voices というパックです。ひとつ言語の音声は大体、4,500円ぐらいします。ATTやアカペラという所が作って、スピーチアプリの会社から販売されています。日本は、主に業務用がほとんどで、最近は違うようですが、今までは、視覚障害者用のものが手に入りました。

音声エンジン
http://www.naturalreaders.com/priceorder.html

それから、新しいスピーチエンジンの
Microsoft Speech Platform 10 および 11
これがどんな調子かも見てみないと分かりません。
http://mahoro-ba.net/e1542.html

以下のサイトで紹介されている所などで
これをIEでコントロールができればと思ったのですが、今のところうまくいきません。目下こんなところです。

http://matome.naver.jp/odai/2132467938117365501

http://www.naturalreaders.com/index.html

http://www.ai-j.jp/consumer/kantan3
    • good
    • 1

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qマクロの実行途中で「応答なし」が発生する その2

https://oshiete.goo.ne.jp/qa/9742741.html

の続きでございます。PCを初期化したら、教えてgooのIDとパスワードが不明になり、新しい名前で登場させて頂いております。(汗)

>C:\Windows\System32\Speech\Common\sapi.dll 2016/07/16 PM 5:25 Ver. 5.3.19915.00
確認しました。

現状は
C:\Windows\System32\Speech\Common\sapi.dll 2017/03/19 5:57 Ver. 5.3.20717.00
に変更されています。


>Const SPD As Long = 100 '通常50~200まで ★
>この数字を増やしてみるというのはいかがでしょうか。
残念ながら効果がないです。


>私の方は、Windows 10 にアップグレードした後に、PCが立ち上がらなくなり、OSの再インストールしたお陰で、この音声周りは、半年以上にもなるのに、まだ復旧していません。

Windows 10でちゃんと動いていたのですが、最近、Windows 10マイナーアップデートがあり、以降、「応答なし」が発生するようになりました。


>なお、前回、話は中途だった気がします。あまり細かなリクエストまでは到底背負いきれなかったからです。

私のこのプログラムの使い方は変わってきております。最初は単語だけで使用してました。その語、文で覚える方が効率的であることに気が付きました。そこで
DUO3.0→ALL IN ONE→日経サイエンスの記事

現在、英語で読む日経サイエンスの記事をsheet2に張り付けて使用していますが、下記のように長い文の場合、途中で「応答なし」が発生して一時的に消えます。



Eyeing a stranger, one of more than three million daily passengers on the Tube, he idly wondered:
What is the probability the stranger would emerge at, say, Wimbledon? How could you ever figure that out,
given that the person could take any number of routes


その車内で見知らぬ1人の乗客(ロンドン地下鉄は1日に300万人以上が利用する)を見ながら,ふと思った。
彼が,例えばウィンブルドン駅に現れる確率はどれくらいだろう? 何回乗り換えてもよいとした場合,
その確率はどうすれば計算できるだろう?

http://www.nikkei-science.com/?p=24349
より抜粋しました。


質問とは関係ないですが、日経サイエンスの記事は面白いです。いろんな可能性を考えるのがサイエンスですが、数学的に可能性があっても、
そんな研究をやって本当に役に立つのか?その研究は本当に正しい方向に向かっているのか?と思うものもあります。
上の記事は、ファインマンの方法に関する研究なので、成功したら、役に立つだろうと思います。

https://oshiete.goo.ne.jp/qa/9742741.html

の続きでございます。PCを初期化したら、教えてgooのIDとパスワードが不明になり、新しい名前で登場させて頂いております。(汗)

>C:\Windows\System32\Speech\Common\sapi.dll 2016/07/16 PM 5:25 Ver. 5.3.19915.00
確認しました。

現状は
C:\Windows\System32\Speech\Common\sapi.dll 2017/03/19 5:57 Ver. 5.3.20717.00
に変更されています。


>Const SPD As Long = 100 '通常50~200まで ★
>この数字を増やしてみるというのはいかがでしょ...続きを読む

Aベストアンサー

#1の回答者です。

>最初の行は、文字数200でも「応答なし」は発生しないのですが、途中の行から>文字数135以上になると「応答なし」が必ず発生するようになりました。
>「応答なし」は英文の文字数に関係するかもしれません。

その対処の仕方は二つほど、頭に描いてはいるのですが、実験を繰り返さないと、はっきりとしたことは言えません。暴走を止めるプログラムは、一応、今の現状がはっきりするまでは、そのままにしておいてください。特に、現段階では意味がありません。

足止めするつもりはありませんが、しばらく時間をください。

DUO3.0 は、リスニングにはちょっと厳しい内容です。今のノーマルモードでは少しスピードが速すぎます。

>日経サイエンスの記事は面白いです。
同感です。長い間適当な教材はないかと思っていました。英検準一級以上やIELTS(アカデミック)の教材にふさわしい内容です。それに、この記事を自動ダウンロードするプログラムも面白いと思います。

>英語で読む日経サイエンスの記事をsheet2に張り付けて使用していますが、下記のように長い文の場合・・・・

それならなおさらです。
https://www.naturalreaders.com/

https://www.naturalreaders.com/download.html
Free のアプリがあります。
読ませてみてください。

それで、現状のMSスピークエンジンでは、音が汚いなって思います。逆にいうと、それほど、AT&Tの音声は20年も前でも、それでも今のものよりも上なのですから、
そうとうに優れていたということになりそうです。Win10で動くのか分かりませんが、今、いくら探しても、前のもののディスクが見つかりませんし、もう20年近く前のものですから、新しく新調しようかなって考えています。

Naturalreader のサイトで聞くよりも、本物は遥かに音はクリアで、human voiceらしいです。ロボット音声には聞こえません。昔、Misakiさんいうのがあったのですが、時々関西弁が混じりこみました。いくつかの音声エンジンの会社があります。今のものは、もっと優れています。

#1の回答者です。

>最初の行は、文字数200でも「応答なし」は発生しないのですが、途中の行から>文字数135以上になると「応答なし」が必ず発生するようになりました。
>「応答なし」は英文の文字数に関係するかもしれません。

その対処の仕方は二つほど、頭に描いてはいるのですが、実験を繰り返さないと、はっきりとしたことは言えません。暴走を止めるプログラムは、一応、今の現状がはっきりするまでは、そのままにしておいてください。特に、現段階では意味がありません。

足止めするつもりはありませんが...続きを読む

Qエクセルでセルをダブルクリックしたらそのブックの別のシートに飛ぶ動作

エクセルでセルをダブルクリックしたらそのブックの別のシートに飛び
とんだ先のシートにダブルクリックしたところのセルと同じものを記入する
といったような動作はVBAでは可能でしょうか。
すみませんが教えて頂きたいです
よろしくお願いいたします

Aベストアンサー

別にマクロの品評会でもありませんが、こんなコードになります。
マクロ禁断のSelect を使った特殊な例です。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 Dim sh2 As Worksheet
 If Target.Value = "" Then Exit Sub
 Set sh2 = Worksheets("Sheet2") '目的のシート
 Cancel = True 'これは忘れないこと。おまじない
 Me.Select False
 sh2.Select False
 Target.Select
 Selection.Value = Selection.Value '* 
 Me.Select
End Sub

'数式の場合
 'Selection.FormulaLocal = Selection.FormulaLocal

Qエクセルの数式をコピーして行が変わってしまう、の質問。

前回の質問で回答を2件頂いたのですが、ご返事が遅くなりすみませんでした。
私があまり詳しくないので、上手く質問出来ず、回答もあまり理解出来なかったのですみませんです。
画像を付けてみました、シート1に1行目から12行目までの表を作り、それをコピーして作りました。
次にシート2に1行目から8行目までの表を作りシート1の1行目から12行目に記入した物がシート2の表に反映する様に作りましたが、シート2の表1行目から8行目をコピーして9行目を空けて10行目に貼り付けた時にシート2の10行目から17行目までに、シート1の14行目から25行目までのデータが来るようにしたいのですが、どの様にしたら良いでしょうか、具体的に教えて頂けませんでしょうか、宜しくお願いいたします。
本当に無知ですみません。

Aベストアンサー

こんにちは

ご存知とは思いますが、エクセルの参照式は、相対参照であればコピーした時に同じだけの移動したセルを参照するようになっています。
(通常はこうなってくれるのが便利ですので)

ご質問の例で言えば、例えばシート2のA1セルにシート1のA1セルを参照する式があったとします。
 =Sheet1!A1
これを、10行下のセルにコピーすると、当然ながら
 =Sheet1!A10
となります。
ご質問は、これをA14を参照するようになさりたいということと思います。
(画像がぼやけているのではっきりしませんが、A14ですよね?)


参照する位置関係には規則性があるので、それを利用することで参照するセル位置を計算して、ご質問のような参照式を作成することは可能です。
とは言うものの、式が複雑になりがちなので、量が多い場合は表の作り方を工夫することで、通常の参照形式を利用できるようにする方がよろしいように思います。
(後に、式の修正を行うような場合が発生しても簡単ですので)

一つの例として、シート2で1行空けているところを5行空けてしまえば、そのまま普通の参照式でコピーが可能になりますよね?
5行の空きが気になるのであれば、4行分は非表示にしてしまえば、見た目も現状と同じになると思います。(行番号だけは変わりますが…)


などと言っているだけでは回答にならないので、上記の『=Sheet1!A1』を例として、10行下で『=Sheet1!A14』を参照するような式の作り方の例をご参考までに・・・
 =INDIRECT("Sheet1!A"&INT((ROW() -1)/ 9)*13+1)
のような要領で式にしておけば、コピーしても「13行/セット」と「9行/セット」間の換算ができる参照式にすることができます。
実際の式がわかりませんが、単純な参照ではなくセル間の計算等を行っていたりしても、同じ要領で可能です。
(列が変わる場合も同様ですが、多分、今回は列は関係なさそうですね。)

こんにちは

ご存知とは思いますが、エクセルの参照式は、相対参照であればコピーした時に同じだけの移動したセルを参照するようになっています。
(通常はこうなってくれるのが便利ですので)

ご質問の例で言えば、例えばシート2のA1セルにシート1のA1セルを参照する式があったとします。
 =Sheet1!A1
これを、10行下のセルにコピーすると、当然ながら
 =Sheet1!A10
となります。
ご質問は、これをA14を参照するようになさりたいということと思います。
(画像がぼやけているのではっきりしませんが、A14です...続きを読む

QエクセルVBA ID行がもつ複数、単数の項目を別シートにID毎(重複)での単数項目で転記したいが

エクセルVBAをつかい
下記添付のようにID行がもつ複数項目(単数あり)データを
別シートにID毎(重複)での単数項目で転記したいが
具体的方法がネットで検索してもみつからず、教えていただきたく。
よろしくお願いします。

Aベストアンサー

こんにちは!

一例です。
元データはSheet1にあり、Sheet2に表示するとします。
標準モジュールにしてください。

Sub Sample1()
Dim i As Long, j As Long, myRow As Long
Dim lastRow As Long, wS As Worksheet
Set wS = Worksheets("Sheet2")
lastRow = wS.Cells(Rows.Count, "A").End(xlUp).Row
If lastRow > 1 Then
Range(wS.Cells(2, "A"), wS.Cells(lastRow, "D")).ClearContents
End If
myRow = 1
With Worksheets("Sheet1")
For i = 2 To .Cells(Rows.Count, "A").End(xlUp).Row
For j = 4 To .Cells(i, Columns.Count).End(xlToLeft).Column
If .Cells(i, j) <> "" Then '//←念のため//
myRow = myRow + 1
wS.Cells(myRow, "A") = .Cells(i, "A")
wS.Cells(myRow, "B").Resize(, 2).Value = .Cells(i, "B").Resize(, 2).Value
wS.Cells(myRow, "D") = .Cells(i, j)
End If
Next j
Next i
End With
End Sub

こんな感じではどうでしょうか?m(_ _)m

こんにちは!

一例です。
元データはSheet1にあり、Sheet2に表示するとします。
標準モジュールにしてください。

Sub Sample1()
Dim i As Long, j As Long, myRow As Long
Dim lastRow As Long, wS As Worksheet
Set wS = Worksheets("Sheet2")
lastRow = wS.Cells(Rows.Count, "A").End(xlUp).Row
If lastRow > 1 Then
Range(wS.Cells(2, "A"), wS.Cells(lastRow, "D")).ClearContents
End If
myRow = 1
With Worksh...続きを読む

QExcel オートコンプリート機能を応用したい

Excelで見積書のフォーマットを作成しています。
顧客数が非常に多く、正しい顧客名が入力できるように、そして選択しやすいように
データの入力規則のリストを活用しておりましたが、
顧客数が多いのでリストが小さく、選びづらくなってしまい、違い方法を探しています。

Excelの関数またはVBAなどで、オートコンプリート機能のように、いくつか文字を入力すると、
指定のリスト一覧の中から候補がいくつか出てきて、いずれかを選択すると、そのセルに入力できる。
というようなことができないでしょうか。
ご教示願います。

Aベストアンサー

こんなのはどうでしょう。
添付画像のように、A列に顧客名を並べます。
下記のマクロをSheetモジュールに張り付けます。
B1セルに、顧客名の一部を入力します。
すると・・・。
入力した情報で顧客名が一意になる場合は、その顧客名で決定されます。
一意にならない場合は、顧客名のリストが表示され、選択することができるようになります。

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$B$1" Then Exit Sub
If Target.Value = "" Then Exit Sub
Dim i As Long
Dim a As String
Dim s As String
Dim h As Long
For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
If Cells(i, "A").Value Like "*" & Target.Value & "*" Then
h = h + 1
a = a & s & Cells(i, "A").Value
s = ","
End If
Next i
If h = 1 Then
Application.EnableEvents = False
Target.Value = a
Application.EnableEvents = True
Exit Sub
End If
If h = 0 Then a = "該当する顧客名が存在しません!!"
With Target.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertInformation, _
Operator:=xlBetween, Formula1:=a
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.IMEMode = xlIMEModeNoControl
.ShowInput = True
.ShowError = False
End With
Target.Select
SendKeys "%{DOWN}"
End Sub

こんなのはどうでしょう。
添付画像のように、A列に顧客名を並べます。
下記のマクロをSheetモジュールに張り付けます。
B1セルに、顧客名の一部を入力します。
すると・・・。
入力した情報で顧客名が一意になる場合は、その顧客名で決定されます。
一意にならない場合は、顧客名のリストが表示され、選択することができるようになります。

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$B$1" Then Exit Sub
If Target.Value = "" Then Exit Sub
Dim i As Long
...続きを読む

Qユーザーフォームの入力規則について

エクセルで作成中のユーザーフォームのふりがなの項目に全角ひらがなのみ入力出来るように、VBAで制限したいのですが、どうすればよいでしょうか?

Aベストアンサー

テキストボックスのプロパティで
IMEMode -4- fmIMEModeHiragana
とした上で、以下の一つ、または二つ両方を入れてみてください。

'以下は、タブやEnter キーを押した後に、テキストボックスの中を調べます。
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
 If TextBox1.Value Like "*[!ぁ-ん]*" Then
  MsgBox "ひらがな以外が混じっています。", vbCritical
  Cancel = True
 End If
End Sub

'以下は半角英数は絶対に入れられないようにしています。
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode >= &H21 And KeyCode <= &HDF Then
    KeyCode = 0
  End If
End Sub


なお、ご存知かとは思いますが、ふりがなは、このようにして出します。
本来は、次候補などを出したい時は、ComboBox などを利用します。

Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim FuriganaResult As String
If TextBox2.Value <> "" Then
  FuriganaResult = StrConv(Application.GetPhonetic(TextBox2.Value), vbHiragana)
  If FuriganaResult <> "" Then
   TextBox1.Value = FuriganaResult
  End If
End If
End Sub

添付画像は、TextBox のIMEコントロールのプロパティを選んでいるところです。

テキストボックスのプロパティで
IMEMode -4- fmIMEModeHiragana
とした上で、以下の一つ、または二つ両方を入れてみてください。

'以下は、タブやEnter キーを押した後に、テキストボックスの中を調べます。
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
 If TextBox1.Value Like "*[!ぁ-ん]*" Then
  MsgBox "ひらがな以外が混じっています。", vbCritical
  Cancel = True
 End If
End Sub

'以下は半角英数は絶対に入れられないようにしています。
Private Sub TextBox1_KeyDow...続きを読む

QEXCEL VBA カンマ区切りの文字を分割したい

添付のような表があるのですが、IDの列にカンマ区切りの文字列が入っています。
これを識別①~⑤の列のセルにそれぞれ分割して入れたいです。
例えば名前「AAA」のIDは「281a,282a,287q,383c,234d」ですが、これをそれぞれカンマで区切って、同じAAAの行のセルで
識別①のところに「281a」
識別②のところに「282a」
識別③のところに「287q」
識別④のところに「383c」
識別⑤のところに「234d」
と自動代入したいです。(鍵かっこは要りません。)条件としては、IDがいくつ入っているかわからない点です。添付の表には、すべて5個ずつ入っていますが、変動します。
Splitとかでカンマで切って入れればよいのだろうと思うのですが、解決できないので、教えていただければ助かります。よろしくお願いいたします。

Aベストアンサー

こんばんは!

すでに回答は出ていますので、参考程度で・・・
画像通りの配置だとします。

Sub Sample1()
Dim i As Long, k As Long, myAry As Variant
For i = 4 To Cells(Rows.Count, "A").End(xlUp).Row
If InStr(Cells(i, "B"), ",") > 0 Then
myAry = Split(Cells(i, "B"), ",")
For k = 0 To UBound(myAry)
Cells(i, k + 4) = myAry(k)
Next k
End If
Next i
End Sub

こんな感じではどうでしょうか?m(_ _)m

Qexcel vba if文入れ子のスマートな記入方法は?

excel vba if文入れ子のスマートな記入方法を教えてください。

下記のような場合、処理Aを2回記入せずにすむ論理式があったら教えていただけないでしょうか?
処理Aが多い場合は、「call 処理A」として別に記入しています。
それでもどうしても2回記入しなくてはならないでしょうか?

【セルE1の値を判定して 数値「100」を入力する式】
Sub test()
Dim mymsg As Integer

If Range("E1") = 0 Or Range("E1") = "" Then
  Range("E1").Value = 100 '処理A
Else
 mymsg = MsgBox("値を消去して新しいデータを挿入します。", vbOKCancel)

 If mymsg = 1 Then
  Range("E1").Value = 100 '処理A
 Else
 ' 何もしない
  End If

End If
End Sub

Aベストアンサー

Exit Subを使って良いのであれば、test1。使えないなら、test2でどうでしょう?

Sub test1()
If Range("E1").Value <> "" And _
Range("E1").Value <> 0 Then
If MsgBox("値を消去して新しいデータを挿入します。", vbOKCancel) = vbCancel Then
Exit Sub
End If
End If
Range("E1").Value = 100 '処理A
End Sub

Sub test2()
Dim mymsg As Integer
mymsg = vbOK
If Range("E1").Value <> "" And _
Range("E1").Value <> 0 Then
mymsg = MsgBox("値を消去して新しいデータを挿入します。", vbOKCancel)
End If
If mymsg = vbOK Then
Range("E1").Value = 100 '処理A
End If
End Sub

Exit Subを使って良いのであれば、test1。使えないなら、test2でどうでしょう?

Sub test1()
If Range("E1").Value <> "" And _
Range("E1").Value <> 0 Then
If MsgBox("値を消去して新しいデータを挿入します。", vbOKCancel) = vbCancel Then
Exit Sub
End If
End If
Range("E1").Value = 100 '処理A
End Sub

Sub test2()
Dim mymsg As Integer
mymsg = vbOK
If Range("E1").Value <> "" And _
Range("E1").Value <> 0 Then
my...続きを読む

Qエクセルでの行の削除

エクセルである特定の文字 例えば A列で ”中止”となっていれば その行を一気に削除して上詰めにする方法はございますでしょうか?

Aベストアンサー

A列で並べ替えて、”中止”となっている行を「まとめて選択」したうえで行削除。

Q(EXCEL)CELLの色をカウントする。

エクセルの関数で、CELLの色パターンを数えたりできるのでしょうか。例.セルのパターンが赤色のものをカウントするなど。

Aベストアンサー

#1さんの方法が本道だと思いますが、
「なぜ、そのセルを赤にしたのか?」を判定条件にしたらCOUNTIF関数等でもカウントできませんか?


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報