VBコードでバックカラーの変更がうまくできない??NO3

このQ&Aのポイント
  • VBコードを使用して、指定した要素のバックカラーを変更する処理がうまくいかない場合の対処方法を教えてください。
  • バックカラーを変更する処理がエラーを引き起こしてしまう場合、適切な条件文とコードを使用することで問題を解決することができます。
  • 関連URL:http://oshiete1.goo.ne.jp/kotaeru.php3?qid=418248, http://oshiete1.goo.ne.jp/kotaeru.php3?qid=418250
回答を見る
  • ベストアンサー

うまくできない??NO3

If Index = 1 Or 6 Or 11 Or 16 Or 21 Then If P1(1).BackColor = vbRed Then P1(1).BackColor = vbBlue Else P1(1).BackColor = vbRed End If If P1(6).BackColor = vbRed Then P1(6).BackColor = vbBlue Else P1(6).BackColor = vbRed End If If P1(11).BackColor = vbRed Then P1(11).BackColor = vbBlue Else P1(11).BackColor = vbRed End If If P1(16).BackColor = vbRed Then P1(16).BackColor = vbBlue Else P1(16).BackColor = vbRed End If If P1(21).BackColor = vbRed Then P1(21).BackColor = vbBlue Else P1(21).BackColor = vbRed End If '-------------------------------------------------------------------- ElseIf Index = 2 Or 7 Or 12 Or 17 Or 22 Then ~~~省略 ElseIf Index = 5 Or 10 Or 15 Or 20 Or 25 Then If P1(5).BackColor = vbRed Then P1(5).BackColor = vbBlue Else P1(5).BackColor = vbRed End If If P1(10).BackColor = vbRed Then P1(10).BackColor = vbBlue Else P1(10).BackColor = vbRed End If If P1(15).BackColor = vbRed Then P1(15).BackColor = vbBlue Else P1(15).BackColor = vbRed End If If P1(20).BackColor = vbRed Then P1(20).BackColor = vbBlue Else P1(20).BackColor = vbRed End If If P1(25).BackColor = vbRed Then P1(25).BackColor = vbBlue Else P1(25).BackColor = vbRed End If End If '--------------------------------------------------------------------- End Sub ※みにくくてすいません リンクを張るのは禁止らしいので・・・できないですね・・・ 関連URL:http://oshiete1.goo.ne.jp/kotaeru.php3?qid=418248 関連URL:http://oshiete1.goo.ne.jp/kotaeru.php3?qid=418250

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

#1で回答した者です。 daisuke-123さんのプログラムで If Index = 1 Or 2 Or 3 Or 4 Or 5 Then という書き方では、Index = 1 又は 2 又は 3・・・ であって、Index = 1 or Index = 2 or Index = 3 ではありません(たぶん) ですから、どのピクチャーをクリックしてもこの条件を満たしてしまいます。 この場合、 If Index = 1 or Index = 2 or・・・・ Then と書くか、 '横反転 Select Case Index   Case 1 To 5    '1~5の場合の処理   Case 6 To 10    '以下省略 End Select '縦反転 Select Case Index   Case 1,6,11,16,21    '1,6,11,16,21の場合の処理   以下省略 End Select のように書けばよいと思います。 #1でも書きましたが、 このままでは、クリックしたピクチャーは2度反転しますので 2度反転しないようにしなければいけません。 縦反転の中に If Index = 1 Or Index = 6 Or Index = 11 Or Index = 16 Or Index = 21 Then   If Index <> 1 Then     If P1(1).BackColor = vbRed Then       P1(1).BackColor = vbBlue     Else       P1(1).BackColor = vbRed     End If   End If   If Index <> 6 Then     If P1(6).BackColor = vbRed Then       P1(6).BackColor = vbBlue     Else       P1(6).BackColor = vbRed     End If   End If   '以下略 のようにすべての場所に「クリックしたピクチャーでなければ」という条件を入れます。 #1のプログラムは、1つ1つ書かないでいいように、For...Nextでまわしています。 プログラムでわからない所があれば、補足してください。 2度書きすみません。

daisuke-123
質問者

お礼

If Index = 1 or Index = 2 or・・・・ Then > と書き直すとうまくできました。  ご回答ありがとうございました。

その他の回答 (1)

回答No.1

間違っていたらすみません。 たぶん、クリックした場所が、2度反転されているのではないでしょうか。 以下にプログラムを作ってみましたので、参考にしてください。 Private Sub P1_Click(Index As Integer)   Dim wrow As Integer   Dim wcol As Integer   Dim i As Integer   wrow = Int((Index - 1) / 5) * 5 + 1   wcol = (Index - 1) Mod 5 + 1   '横列反転   For i = wrow To wrow + 4     If P1(i).BackColor = vbRed Then       P1(i).BackColor = vbBlue     Else       P1(i).BackColor = vbRed     End If   Next i   '縦列反転   For i = wcol To 20 + wcol Step 5     If (i <> Index) Then 'クリックしたピクチャーの2度反転防止       If P1(i).BackColor = vbRed Then         P1(i).BackColor = vbBlue       Else         P1(i).BackColor = vbRed       End If     End If   Next i End Sub おかしな所は、補足してくだされば修正します。

関連するQ&A

  • うまくできない??NO2

    Private Sub P1_Click(Index As Integer) If Index = 1 Or 2 Or 3 Or 4 Or 5 Then If P1(1).BackColor = vbRed Then P1(1).BackColor = vbBlue Else P1(1).BackColor = vbRed End If If P1(2).BackColor = vbRed Then P1(2).BackColor = vbBlue Else P1(2).BackColor = vbRed End If If P1(3).BackColor = vbRed Then P1(3).BackColor = vbBlue Else P1(3).BackColor = vbRed End If If P1(4).BackColor = vbRed Then P1(4).BackColor = vbBlue Else P1(4).BackColor = vbRed End If If P1(5).BackColor = vbRed Then P1(5).BackColor = vbBlue Else P1(5).BackColor = vbRed End If '------------------------------------------------------------------- ElseIf Index = 6 Or 7 Or 8 Or 9 Or 10 Then ~~~~~ 省略 ElseIf Index = 21 Or 22 Or 23 Or 24 Or 25 Then If P1(21).BackColor = vbRed Then P1(21).BackColor = vbBlue Else P1(21).BackColor = vbRed End If If P1(22).BackColor = vbRed Then P1(22).BackColor = vbBlue Else P1(22).BackColor = vbRed End If If P1(23).BackColor = vbRed Then P1(23).BackColor = vbBlue Else P1(23).BackColor = vbRed End If If P1(24).BackColor = vbRed Then P1(24).BackColor = vbBlue Else P1(24).BackColor = vbRed End If If P1(25).BackColor = vbRed Then P1(25).BackColor = vbBlue Else P1(25).BackColor = vbRed End If End If '------------------------------------------------------------------ 続く・・・ 関連URL:http://oshiete1.goo.ne.jp/kotaeru.php3?qid=418248

  • うまくできない??NO1

    ピクチャーを1~25までクローンで貼り付けています (P1に変えました) したいのは5*5のますがあります クリックするとたてと横がひっくり返る(色が変わる)ようなプログラムを作りたいのです。 がうまくできないのです。なにが間違っているのでしょうか? Private Sub Form_Load() Randomize For i = 1 To 25 co = Int(Rnd * 2) + 1 If co = 1 Then P1(i).BackColor = vbRed Else P1(i).BackColor = vbBlue End If Next i End Sub 続く・・・

  • vb初心者。急いでます!

    修論に取り組む院生です。 vb2010で簡単なソフトを作成中なのですが、以下のようなコードが何度も出てくるため、なんとか短くしたいんです。 型変換や色指定部分の工夫などが考えられると思うのですが、なかなか上手くいかず焦っています。 Dim a213,a214,c212,c213,c214 As Double If a213 < 1 Then ha13.BackColor = Color.FromArgb(160, 140, 255) ElseIf a213 < 20 Then ha13.BackColor = Color.FromArgb(120, 160, 255) ElseIf a213 < 40 Then ha13.BackColor = Color.FromArgb(100, 200, 150) ElseIf a213 < 60 Then ha13.BackColor = Color.FromArgb(255, 255, 70) ElseIf a213 < 80 Then ha13.BackColor = Color.FromArgb(255, 170, 0) Else ha13.BackColor = Color.FromArgb(255, 80, 100) End If If a214 < 1 Then ha14.BackColor = Color.FromArgb(160, 140, 255) ElseIf a214 < 20 Then ha13.BackColor = Color.FromArgb(120, 160, 255) ElseIf a214 < 40 Then ha14.BackColor = Color.FromArgb(100, 200, 150) ElseIf a214 < 60 Then ha14.BackColor = Color.FromArgb(255, 255, 70) ElseIf a214 < 80 Then ha14.BackColor = Color.FromArgb(255, 170, 0) Else ha14.BackColor = Color.FromArgb(255, 80, 100) End If If c212 < 1 Then hc12.BackColor = Color.FromArgb(160, 140, 255) ElseIf c212 < 20 Then hc12.BackColor = Color.FromArgb(120, 160, 255) ElseIf c212 < 40 Then hc12.BackColor = Color.FromArgb(100, 200, 150) ElseIf c212 < 60 Then hc12.BackColor = Color.FromArgb(255, 255, 70) ElseIf c212 < 80 Then hc12.BackColor = Color.FromArgb(255, 170, 0) Else hc12.BackColor = Color.FromArgb(255, 80, 100) End If If c213 < 1 Then hc13.BackColor = Color.FromArgb(160, 140, 255) ElseIf c213 < 20 Then hc13.BackColor = Color.FromArgb(120, 160, 255) ElseIf c213 < 40 Then hc13.BackColor = Color.FromArgb(100, 200, 150) ElseIf c213 < 60 Then hc13.BackColor = Color.FromArgb(255, 255, 70) ElseIf c213 < 80 Then hc13.BackColor = Color.FromArgb(255, 170, 0) Else hc13.BackColor = Color.FromArgb(255, 80, 100) End If If c214 < 1 Then hc14.BackColor = Color.FromArgb(160, 140, 255) ElseIf c214 < 20 Then hc14.BackColor = Color.FromArgb(120, 160, 255) ElseIf c214 < 40 Then hc14.BackColor = Color.FromArgb(100, 200, 150) ElseIf c214 < 60 Then hc14.BackColor = Color.FromArgb(255, 255, 70) ElseIf c214 < 80 Then hc14.BackColor = Color.FromArgb(255, 170, 0) Else hc14.BackColor = Color.FromArgb(255, 80, 100) End If 初めにhが付くものはpicturebox名です。 条件に応じてpictureboxの色を変えるコードで、色は全部で6色で固定です。 このあたりももっと工夫できる気がしてはいるのですが・・・ 時間がないので、とりあえずは期限までに面倒な手順でもソフトを完成させようと思っていますが、さすがに量が多いのでこちらも時間的に危ういです。。 いいアイディアをお持ちの方、よろしくお願いします!!!

  • Accessレポートで1行おきに色を変える

    Private Sub 詳細_Print(Cancel As Integer, PrintCount As Integer) FontCount = FontCount + 1 If FontCount Mod 2 = 1 Then Me.Section(0).BackColor = 16777215 Else Me.Section(0).BackColor = 16777164 End If End Sub としてみました。 ですが何らかわりなく… 試しに Private Sub 詳細_Print(Cancel As Integer, PrintCount As Integer) FontCount = FontCount + 1 If FontCount Mod 2 = 1 Then Me.Section(0).BackColor = 16777215 Else Me.Section(0).BackColor = 16777164 End If MsgBox FontCount End Sub としてみたところずーっと「1」が表示され、変数がかわってないようです。 いったいどこがダメなのでしょうか? 確か以前できたはずなのに…(><)

  • VBAでif文にorを使う場合の仕様

    http://www.relief.jp/itnote/archives/vba-if-or.php このページにも書かれてあるのですが、 Sub textss() aaa = 2 If aaa = 0 Or 1 Then bbb = 1 ElseIf aaa = 2 Then bbb = 2 End If ccc = bbb End Sub を実行すると cccには2が代入されそうなのですが、実際には1が代入されてしまいます。 If aaa = 0 Or aaa = 1 Then と入力する必要があります。 それでは、 If aaa = 0 Or 1 Then とした時、プログラムではどういう処理がなされているのでしょうか?

  • ボールが壁に当たって跳ね返るプログラムを・・

    スタートボタンを押すと一個のボールが現れ、 picture1の中を動き回り、壁に当たると跳ね返る、 スクリーンセイバーのようなプログラムを作って いるのですが「ボールが壁に当たって跳ね返る」 部分がどうしても上手くいきません。この部分を どなたか教えてください。お願いしますm(_ _)m (見やすいように線を引きました。最後の方が「跳ね返りの部分です。それ以外の部分は、文の長さ制限にひっかかるため省いてあるところがあります。) Private Sub Command1_Click() x = Int(Rnd * 3900) y = Int(Rnd * 3900) r = 100 c = vbRed Timer1.Enabled = True Timer1.Interval = 200 Picture1.Circle (x, y), r, vbRed End Sub ----------------------------------------- Private Sub Timer1_Timer() Picture1.FillColor = Picture1.BackColor Picture1.Circle (x, y), r, Picture1.BackColor dx = 100 dy = dx x = x + dx If x < 0 Then x = 0 And dx = 0 - dx If x > Picture1.Width Then x = Picture1.Width And dx = 0 - dx End If End If y = y + dy If y < 0 Then y = 0 And dy = 0 - dy If y > Picture1.Height Then y = Picture1.Height And dy = 0 - dy End If End If Picture1.FillColor = vbRed Picture1.Circle (x, y), r, vbRed End Sub

  • 乱数の利用

    僕の通う中学校では、乱数を利用してプログラムを作成することになりました。そしてプログラムを作りましたがステートメントがないと出てきます。どう解決すればよいでしょうか?これがプログラムです。 Dim a,b,c,d,e,f,g a=msgbox("幸せですか?",4) if a=6 then const b="運勢" randomize b=int(rnd*10) select case b case 0,1,2 c=messagebox("吉でした。彼女はいますか?",4) if c=6 then msgbox"90%",,b elseif c=7 then msgbox"60%",,b end if case 3,4,5 d=msgbox("凶でした。友達はいますか?",4) if d=6 then msgbox"60%",,b elseif d=7 then msgbox"20%",,b end if case 6,7 e=msgbox("末吉でした。",4) if e=6 then msgbox"60%",,b elseif e=7 then msgbox"40%",,b end if case 8 f=msgbox("大凶でした。夢はありますか?",4) if f=6 then msgbox"30%",,b elseif f=7 then msgbox"10%",,b end if case else msgbox"100%",,b end if elseif a=7 msgbox"0%" end select

  • マクロ A1のセルの値を見て、B1に値を入力したい。

    エクセルのマクロでA1の値が1ならばB1にaを、2・3・4ならばbを、5ならばCを、それ以外は「該当無し」と入れたいのですが下のマクロではうまく行きません。ぜひご指導ください。 Sub If Left(Cells(1, 1).Value, 1) = 1 Then Cells(2,1).Text = "a" ElseIf Left(Cells(1,1).Value, 1) = 2 Or _ Left(Cells(1,1).Value, 1) = 3 Or _ Left(Cells(1,1).Value, 1) = 4 Then Cells(2,1).Text = "b" ElseIf Left(Cells(z, 37).Value, 1) = 5 Then Cells(2,1).Text = "c" Else: Cells(z, 40).Text = "該当無し" End If End Sub

  • 下記質問Vol.3です

    If intSr = 1 Then intRes = MsgBox("追加してもO.K.ですか?", vbYesNo + vbQuestion) If intRes = vbYes Then With cmd .ActiveConnection = cn .CommandType = adCmdText .CommandText = strSQL .Execute End With Call 状態変化(2) End If Else intRes2 = MsgBox("更新しても良いですか?", vbYesNo + vbQuestion) If intRes2 = vbYes Then With cmd .ActiveConnection = cn .CommandType = adCmdText .CommandText = strSQL2 .Execute End With Call 状態変化(2) End If End If End Sub よろしくお願いします。 関連URL:http://www.okweb.ne.jp/kotaeru.php3?q=160999 http://www.okweb.ne.jp/kotaeru.php3?q=161003

  • VBA ダブルクリックで行に色をつける方法

    VBAでダブルクリックしたセルを含む行に色をつけたいです。 セルに色をつけるマクロは書いた(下記)のですが、これを行全体に色付けしたいのですが、 うまくいきません。 どなたかご教授ください。 Private Sub Worksheet_BeforeDoubleClick _ (ByVal Target As Range, Cancel As Boolean) If Not Application.Intersect _ (Target, Range("A3").CurrentRegion) _ Is Nothing Then With Target.Interior If .Color = vbRed Then .Color = xlNone Else .Color = vbRed End If End With Cancel = True End If End Sub よろしくお願いします。

専門家に質問してみよう