電子書籍の厳選無料作品が豊富!

エクセル2000で以下のような百人一首のマクロを作ったのですが
マクロをボタンに登録すると上の句と下の句の更新が後回しになります
VBEを開いたままマクロを実行すると上の句下の句を更新したあとに
解答用のinputboxがちゃんと先に出てきます。
何か解決方法はありますか?
マクロを作ったのは初めてに近いです
あとマクロコードを2行にするのが出きるときと出来ない時があるのは
何故でしょう。同じように _ アンダーバーを入れて改行してるのですが
エラーになります。改行して良い所と悪い所があるのですか
教えて欲しいです。


Sub 百人一首一番から二十番()
Dim hyakuSh As Worksheet
Dim mySh As Worksheet
Set mySh = Worksheets("百人一首クイズ")
Set hyakuSh = Worksheets("百人一首")
Dim myRow As Integer
Randomize
myRow = Int((21 - 2 + 1) * Rnd + 2)
Dim kaminoku As String
Dim kaminoku2 As String
Dim kaminoku3 As String
Dim simonoku As String
Dim simonoku1 As String
Dim sakusha As String

kaminoku = hyakuSh.Cells(myRow, 3).Value
kaminoku2 = hyakuSh.Cells(myRow, 4).Value
kaminoku3 = hyakuSh.Cells(myRow, 5).Value
shimonoku = hyakuSh.Cells(myRow, 6).Value
shimonoku1 = hyakuSh.Cells(myRow, 7).Value
sakusha = hyakuSh.Cells(myRow, 8).Value
mySh.Activate
mySh.Shapes("Text Box 2").Select
Selection.Characters.Text = kaminoku & Chr(10) & kaminoku2 & Chr(10) & kaminoku3
Dim MyTBox As Integer


Dim smRow As Integer
Dim smRow2 As Integer
Dim smRow3 As Integer
Dim smRow4 As Integer
Dim smRow5 As Integer
Dim i As Integer

mySh.Shapes(2).Select
Randomize
smRow5 = Int((51 - 2 + 1) * Rnd + 2)

Selection.Characters.Text = hyakuSh.Cells(smRow5, 6).Value & Chr(10) & hyakuSh.Cells(smRow5, 7).Value & Chr(10) & hyakuSh.Cells(smRow5, 8).Value
mySh.Shapes(3).Select
Randomize
smRow = Int((51 - 2 + 1) * Rnd + 2)

Selection.Characters.Text = hyakuSh.Cells(smRow, 6).Value & Chr(10) & hyakuSh.Cells(smRow, 7).Value & Chr(10) & hyakuSh.Cells(smRow, 8).Value
mySh.Shapes(4).Select
Randomize
smRow2 = Int((51 - 2 + 1) * Rnd + 2)

Selection.Characters.Text = hyakuSh.Cells(smRow2, 6).Value & Chr(10) & hyakuSh.Cells(smRow2, 7).Value & Chr(10) & hyakuSh.Cells(smRow2, 8).Value
mySh.Shapes(5).Select
Randomize
smRow3 = Int((51 - 2 + 1) * Rnd + 2)

Selection.Characters.Text = hyakuSh.Cells(smRow3, 6).Value & Chr(10) & hyakuSh.Cells(smRow3, 7).Value & Chr(10) & hyakuSh.Cells(smRow3, 8).Value
mySh.Shapes(6).Select
Randomize
smRow4 = Int((51 - 2 + 1) * Rnd + 2)

Selection.Characters.Text = hyakuSh.Cells(smRow4, 6).Value & Chr(10) & hyakuSh.Cells(smRow4, 7).Value & Chr(10) & hyakuSh.Cells(smRow4, 8).Value

Randomize
MyTBox = Int((6 - 2 + 1) * Rnd + 2)

mySh.Shapes(MyTBox).Select
Selection.Characters.Text = shimonoku & Chr(10) & shimonoku1 & Chr(10) & sakusha
mySh.Shapes("Text Box 2").Select
Dim Ans As Integer

*以下の部分が先に出てきて答えを入れないと上のコードが実行されない*

****ここ一行で書いてあるので見にくい部分*******
Ans = InputBox(hyakuSh.Cells(myRow, 3).Value & hyakuSh.Cells(myRow, 4).Value & hyakuSh.Cells(myRow, 5).Value & Chr(10) & Chr(10) & "下の句を番号で答えなさい", Title:="百人一首", Xpos:=7500, Ypos:=2500)
*********************************
If Ans = MyTBox Then
MsgBox " 正解!!! V(・ o ・)V "

Else
MsgBox ("間違いです!!!!!!!!" & Chr(10) & Chr(10) & hyakuSh.Cells(myRow, 6).Value & hyakuSh.Cells(myRow, 7).Value & Chr(10) & Chr(10) & sakusha & "です")
End If

End Sub

A 回答 (6件)

InputBox関数の前に画面更新をするように


Application.ScreenUpdating = True
を入れてみればどうなるでしょうか。
    • good
    • 0
この回答へのお礼

お礼が遅くなりました
早速Application.ScreenUpdating = True入れてみました
ばっちりです。動くようになりました。目からうろこです(ToT)/
ありがとうございます。

お礼日時:2008/12/03 09:45

>あとマクロコードを2行にするのが出きるときと出来ない時があるのは何故でしょう。


>同じように _ アンダーバーを入れて改行してるのですがエラーになります。
スペースとアンダーバー 改行が正解
    • good
    • 0

こんばんは。



>マクロをボタンに登録すると上の句と下の句の更新が後回しになります
>解答用のinputboxがちゃんと先に出てきます。
>何か解決方法はありますか?

私としては、たぶん、オートシェイプのTextBox が問題かなって思います。
確かに、Excel 2003 でも挙動がおかしいです。原因はテキストメモリとGメモリとは、直接、つながっていないからだと思います。

残念ながら、質問で出ているコードでは、途中からオブジェクトをIndex を使ってしまっているので、正しい名称は分からないものの、出来れば、コントロールツールのテキストボックスとかラベルとかにしたほうが、反応は良いかもしれません。

現状のマクロコードでは、最初に、テキストボックス(Index が確実に1~6あるとします)のテキストをクリアしたらどうでしょうか?

For i = 1 To 6
 mySh.Shapes(i).TextFrame.Characters.Text = ""
Next i
    • good
    • 0
この回答へのお礼

お礼が遅くなり大変申し訳なく思っています
回答ありがとうございました
もうすこし勉強します

お礼日時:2008/12/03 10:11

整理してみました。



Sub test百人一首一番から二十番()
  Dim hyakuSh As Worksheet
  Dim mySh As Worksheet
  Dim kaminoku As String
  Dim simonoku As String
  Dim myRow As Integer
  Dim MyTBox As Integer
  Dim smRow As Integer
  Dim Ans As Integer
  Dim i As Integer
  
  Set mySh = Worksheets("百人一首クイズ")
  Set hyakuSh = Worksheets("百人一首")
  mySh.Activate
  
  Randomize
  myRow = Int((21 - 2 + 1) * Rnd + 2)
  For i = 1 To 3
    kaminoku = kaminoku & Chr(10) & hyakuSh.Cells(myRow, i + 2).Value
    simonoku = simonoku & Chr(10) & hyakuSh.Cells(myRow, i + 5).Value
  Next i
  mySh.Shapes(1).TextFrame.Characters.Text = Replace(kaminoku, Chr(10), "", 1, 1)
  For i = 1 To 5
    Randomize
    smRow = Int((51 - 2 + 1) * Rnd + 2)
    mySh.Shapes(i + 1).TextFrame.Characters.Text = _
      hyakuSh.Cells(smRow, 6).Value & Chr(10) & _
      hyakuSh.Cells(smRow, 7).Value & Chr(10) & _
      hyakuSh.Cells(smRow, 8).Value
  Next i
  Randomize
  MyTBox = Int((6 - 2 + 1) * Rnd + 2)
  mySh.Shapes(MyTBox).TextFrame.Characters.Text = Replace(simonoku, Chr(10), "", 1, 1)
  
  Application.ScreenUpdating = True

  On Error Resume Next
  Ans = InputBox(Replace(kaminoku, Chr(10), "", 1, 1) & Chr(10) & Chr(10) & _
    "下の句を番号で答えなさい", Title:="百人一首", Xpos:=7500, Ypos:=2500)
  On Error GoTo 0

  If Ans = 0 Or Ans < 2 Or Ans > 6 Then
    MsgBox "2~6 の数字を入力してください。"
  ElseIf Ans = MyTBox Then
    MsgBox "正解!!! V(・ o ・)V"
  Else
    MsgBox ("間違いです!!!!!!!!" & Chr(10) & Chr(10) & _
      Replace(simonoku, Chr(10), "", 1, 1) & Chr(10) & Chr(10) & "です")
  End If

  Set mySh = Nothing
  Set hyakuSh = Nothing
End Sub
    • good
    • 0
この回答へのお礼

このままボタンに登録してもちゃんと動作しました
とりあえず作ってみて後で整理しようと思ってたのですが
一気に解決です。
お正月にちゃんと間に合いそうです
ありがとうございます

お礼日時:2008/12/03 10:01

Shapeの2~6は、下記のように、For~Nextできないでしょうか。



For i = 1 To 5
  Randomize
  smRow = Int((51 - 2 + 1) * Rnd + 2)
  mySh.Shapes(i + 1).TextFrame.Characters.Text = _
    hyakuSh.Cells(smRow, 6).Value & Chr(10) & _
    hyakuSh.Cells(smRow, 7).Value & Chr(10) & _
    hyakuSh.Cells(smRow, 8).Value
Next i
    • good
    • 0

>あとマクロコードを2行にするのが出きるときと出来ない時があるのは


何故でしょう。
>同じように _ アンダーバーを入れて改行してるのですがエラーになります。
具体例を上げていただけないでしょうか。
    • good
    • 0
この回答へのお礼

すみません
自分でもどこでなるのか把握しきれてないようです
もうすこしマクロをこなして具体的にここと言える時に
また質問させてください
ありがとうございました

お礼日時:2008/12/03 10:18

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