今、卒業研究でVBを使ってのタイピングゲームソフトを作成してます。
5行の文字列をひとまとめにして連続してタイピングさせたい。
(1行目が終わったら2行目。2行目が終わったら3行目・・・5行目まで)

そこでみなさんにお聞きしたいのですが、
配列を使ってのタイピングは可能なのでしょうか??

よろしくお願いします。

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

A 回答 (3件)

では簡単な例を説明してみます。


フォームのkeypressのイベントでどのキーが押されたかは分かります。
押された回数をカウントすれば基本的にタイプ数は分かります。
"例えば"は(tatoeba)で問題ないのですが"ふ"の場合(hu/fu)でもいいですし"だった"は(datta/daltuta/daxtuta)でもいいのですよね。これがローマ字入力の判定の難しさだと思います。
"例えば"のチェックルーチン(めっちゃいい加減版)エンターキーは不要と判断しました。
なお、bが文字を打った回数。cが文字数という事で参考にして下さい。

Dim wk(5) As String
Dim a As Integer
Dim b As Integer
Dim c As Integer

Private Sub Form_KeyPress(KeyAscii As Integer)
Dim chk As String

chk = LCase(Chr(KeyAscii))

If Mid(wk(0), a, 1) = chk Then
a = a + 1
End If

b = b + 1

If a > c Then
MsgBox "ok"
End If

End Sub
Private Sub Form_Load()
wk(0) = "tatoeba"
a = 1
b = 0
c = Len(wk(0))

End Sub
    • good
    • 0
この回答へのお礼

さっそくありがとうございます。
しかもプログラム付で・・・。

プログラムはある程度は理解しているものの
初めてみる関数ばかりで、苦戦中です。
しばらくこの参考プログラムを先生に聞いて理解してみます。

また、新たに質問させてもらうと思いますが
その時はよろしくお願いします。

お礼日時:2001/11/06 12:24

質問の意味をいまいち理解してませんが・・・



判定を行うタイミングが、このソフトの鍵となると思います。
複数行あろうとなかろうと一緒です。
複数行ある文章もようは改行コード(定数:vbCrlf)を含んだ一行と置き換えることができます。

簡単な比較ロジックは
1.テキストボックスのChangeイベントを認識
2.入力文字と入力文字数を得る
3.正解例の頭からその文字数文を得る
4.それらを比較
です。

しかし、文章の入力を終えてからの判定は並大抵ではありません。
一度判定ロジックを組んだ経験があるのですが、結局かなりの駄作になってしまいました。
例えば、余計な文字が1文字入ったら、どうするのかというだけで様々なパターンが想像つきます。
それ以外に2行目と3行目が入れ違いになっていた場合にも、複数の処理に分かれます。
これらを全て兼ね備えたプログラムは、人工知能開発ぐらいのレベルになると思います。。。
ですので、あまり入力し終えてからの判定はお奨めできません。


一度、市販されてるタイピングソフトではなく、フリーでダウンロードできるタイピングのソフトを見て研究してみては?

はずしてたなら、ごめんなさい。

参考URL:http://www.vector.co.jp/vpack/pickup/win/edu/com …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
私たちが作成しようとしているソフトは下記のyanmaaさんのお礼に記した通りです。

判定のタイミングとしてはローマ字、1文字ずつ判定させるつもりでいます。
表示は1行をローマ字で表示させて、先頭から順にタイピングです。
一致していればその文字が消え、次の文字のタイプという感じです。
その際、1行終わるまでにタイプした数と誤った入力をカウントさせたいのです。

とりあえず、教えていただいたURLでDLしてみて研究してみます。
また、よろしくお願いします。

お礼日時:2001/11/05 12:14

プログラムを作るのが卒業研究なら基本的なプログラミング技能を有していると判断します。



例えば
そこで
みなさんに
お聞き
したいのですが

というタイピングを出題するとして

どのようにキータイプさせ、どのような判定を下すのでしょうか?

OKなら次の行、違うなら元の行ですね。

後は自分で考えて何処までやって何処が分からないのか説明してからにしてね。
    • good
    • 0
この回答へのお礼

回答をありがとうございます。
yanmaaさんの言われるプログラム技能は有しています。

私たちが作っているタイピングプログラムは

例えば
そこで
みなさんに
お聞き
したいのですが

の5行で例えると
1.『例えば』を日本語表示とローマ字表示する。
  例    例えば
     tatoeba
2.「t」からタイプ開始 → Enterキーを押すと1行終了
  その際、先頭の文字とキーボードからタイピングした文字が同じなら同時にローマ字を一文字ずつ消していく。
  なおかつ、Enterキーを押すまでに「タイプした数」と「誤った数」をカウントする。
3.これを5回繰り返す。

というのを考えています。
こういうプログラムをVBで作成するのは可能でしょうか?

お礼日時:2001/11/05 12:00

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

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

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

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

Q「Alt+Enter」で折り返した文字列。1行目は何文字? 2行目は何文字?

セルの中に、「ALt+Enter」で複数行に折り返している文字列があって、
1行目は何文字で、折り返した2行目は何文字、3行目は何文字…
とカウントさせたいのですが…???
無理???
できましたら、具体的に記述して教えてください。

Aベストアンサー

こんな書き方もあるということで・・・
対象セルを1つ選択して下記マクロを実行します。

Sub MojisuCount()
Dim moji As String '選択セルの内容
Dim rw As Integer '行カウンタ
Dim pot As Integer 'Instrで調べた改行コードの位置

moji = Selection & vbLf '選択セルの文字の最後に改行を付加(判定を不要にする)
pot = InStr(moji, vbLf) '改行コードの位置は?
While pot > 0 'なくなるまで続ける
rw = rw + 1 '行を進める
MsgBox rw & "行目は " & pot - 1 & " 文字です"
moji = Mid(moji, pot + 1) '改行文字の次からを新たな検索対象にする

pot = InStr(moji, vbLf) '改行コードの位置は?
Wend
End Sub

こんな書き方もあるということで・・・
対象セルを1つ選択して下記マクロを実行します。

Sub MojisuCount()
Dim moji As String '選択セルの内容
Dim rw As Integer '行カウンタ
Dim pot As Integer 'Instrで調べた改行コードの位置

moji = Selection & vbLf '選択セルの文字の最後に改行を付加(判定を不要にする)
pot = InStr(moji, vbLf) '改行コードの位置は?
While pot > 0 'なくなるまで続ける
rw = rw + 1 '行を進め...続きを読む

QVBA 配列計算について 配列の入力に配列の使用

配列に複数のセル値の合計値を設定したいと思っています。
求める合計値は複数あるため、出力も配列となります。
そこで下記のようにプログラムを考えたのですが、全て同じ値の配列として出力されてしまいます。
VBAではC言語のように配列の古い値に足していくことはできないのでしょうか?

(sum()は0で初期化) (10個飛ばしのデータの合計値を算出)
For i = 0 To 10
For j = 0 To 5
sum(i)= sum(i) + Worksheets(sheetname).Cells(10, 3).Offset(j * 10, 0).Value
Next i
Next j

出力配列例 全て同じ値になってしまいます・・・
1.254
1.254
1.254
・・・

回避方法もしくはうまい計算方法などありませんでしょうか

Aベストアンサー

なにを計算したいんでしょうか?

このコードでは、どのSum(i)にも、
Cells(10,3).Value + Cells(20,3).Value + ・・・・ + Cells(60,3).Value
の値が入るから、同じになるのは当然です。

i ごとにSum(i)を変えたいのなら、
Worksheets(sheetname).Cells(10, 3).Offset(j * 10, 0).Value
の中のどこかに i が入ってないと・・・・

Q配列での文字列の連続処理

 VBAなので低レベルすぎてここで質問する内容ではないかもしれませんが

     Dim 元データ As Variant
Dim 文字数 As Variant

元データ = Range("D1:D3087")
For i = 1 To 3087

’元データに格納されている文字列をこの間で操作したい
     任意の文字を抜き取ってセルに貼り付ける

文字数 = Len(元データ)

MsgBox 文字数

Next i

上記で 元データ に D1:D3087 の文字列を格納し文字列から必要な部分を抜き出しセルに書き込みたいのですが、エラーで止まります D1:D3087 の1行目は麻B060516-MSE300です。

文字列を操作できないのは元データがstringじゃないので無理っぽいかんじがするのですが配列に取り込むにはvariantじゃないといけないみたいなので、良い方法があればご教示いただけると幸いです。

 VBAなので低レベルすぎてここで質問する内容ではないかもしれませんが

     Dim 元データ As Variant
Dim 文字数 As Variant

元データ = Range("D1:D3087")
For i = 1 To 3087

’元データに格納されている文字列をこの間で操作したい
     任意の文字を抜き取ってセルに貼り付ける

文字数 = Len(元データ)

MsgBox 文字数

Next i

上記で 元データ に D1:D3087 の文字...続きを読む

Aベストアンサー

やりたいのはこういう事かな?

文字数 = Len(元データ)

文字数 = Len(元データ(i, 1))

Q5行目からのCSVデータを作りたい

いつもお世話になります。

とあるシステムにデータを入力して、CSVファイルを作成して別システムにインポートしているのですが、そのファイルフォーマットがデータが5行目から始まる形のものなのです。とある事情からそれをエクセルで作成しなければならず、CSVで保存したものを開くと空白行を無視して1行目から始まってしまいます。

1から4行目までを空白にしてCSVを作成する方法をご教授ください。

Aベストアンサー

A1セルに「'」だけを入力しておきます。

この状態でCSV保存すれば、空白行分の改行が出力されます。
(「'」は文字列入力の識別子ですが、実際の文字列がないので空白セルと解釈されデータとしては出力されません。)

エクセルのCSV保存は、場合によって空白セル分の「,」が連続出力されたりしますが、これは問題にならないと考えてよいのですよね?

Qカスタムコントロール作ってます(VB.NET)。VB.Net にVB.6のActiveX作成時にあったプロパティページ作成ができないようですが

タイトルどうりです。VBNETのカスタムコントロールでデザインモードにおけるフォームつまりプロパティページやビジュアルにプロパティボックスから設定できるようにしたいのですが、どうしたらできるでしょうか?VB6ではできたのですが、(Activexコントロール)。

よろしくお願いします。

Aベストアンサー

通常のプロパティと同じように、プロパティ ウィンドウに項目を表示して設定できるようにする必要があります。
具体的には、
1. カスタム コントロールのクラスに外部公開する Property プロシージャを作成して、内部で値を保存できるようにする。
2. そのプロパティの宣言部分で、プロパティ ウィンドウに表示するように指示する属性値を設定する。

こんな感じです。

参考URL:http://www.atmarkit.co.jp/fdotnet/winexp/winexp02/winexp02_01.html


人気Q&Aランキング

おすすめ情報