質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

338閲覧

PowerPointのVBAでセルの色を変えていきたい

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2023/05/12 01:31

編集2023/05/15 01:10

実現したいこと

PowerPointのテーブルでコマンドボタンを押したら、そのセルの色を判断して次の色に変わるというボタンを作成しています。

選択セルが1つの時は上手くいくのですが、選択セルが2つになったら、2回ループされて「RGB(0,204,0)」の色になってしまいます。
解決方法をご教授頂けると助かります。

※選択しているセルは全て「RGB(255,0,0)」とします
※セルを3つ選択してたら、3回ループされます

該当のソースコード

Sub colorchange Dim oSh As Shape Dim oTbl As Table Dim X As Integer Dim Y As Integer With ActiveWindow.Selection.ShapeRange Set oTbl = .Table For Y = 1 To oTbl.Rows.Count For X = 1 To oTbl.Columns.Count If oTbl.Cell(Y, X).Selected Then With oTbl.Cell(Y, X).Shape If .Fill.ForeColor.RGB = RGB(255,0,0) Then .Fill.ForeColor.RGB = RGB(0,0,255) ElseIf .Fill.ForeColor.RGB = RGB(0,0,255) Then .Fill.ForeColor.RGB = RGB(0,204,0) ElseIf .Fill.ForeColor.RGB = RGB(0,204,0) Then .Fill.ForeColor.RGB = RGB(255,255,0) ElseIf .Fill.ForeColor.RGB = RGB(255,255,0) Then .Fill.ForeColor.RGB = RGB(204,0,255) Else .Fill.ForeColor.RGB = RGB(255,0,0) End If End With End If Next Next End With End Sub

試したこと

Ifの部分をCaseにしてみたのですが、結果が変わらないのでその前のForの部分に問題があるのかなと思ったのですが、どのようにすれば良いのか分からず行き詰まってます。

コード自体は色々なサイトを参考にして作成しています。
エラー確認のコードはchatGPTにて作成しました。エラー解消のコードもそもそものやりたいコード作成もchatGPTに質問したのですが、Excelのコードが混じったりとなかなか上手くいかず行き詰まっている所です。

エラー確認のコード

Sub colorchange1 Dim oSh As Shape Dim oTbl As Table Dim X As Integer Dim Y As Integer Dim oColor As Long Dim newColor As Long With ActiveWindow.Selection.ShapeRange Set oTbl = .Table For Y = 1 To oTbl.Rows.Count For X = 1 To oTbl.Columns.Count If oTbl.Cell(Y, X).Selected Then With oTbl.Cell(Y, X).Shape oColor = .Fill.ForeColor.RGB If oColor = RGB(255,0,0) Then newColor = RGB(0,0,255) ElseIf oColor = RGB(0,0,255) Then newColor = RGB(0,204,0) ElseIf oColor = RGB(0,204,0) Then newColor = RGB(255,255,0) ElseIf oColor = RGB(255,255,0) Then newColor = RGB(204,0,255) Else newColor = RGB(255,0,0) End If If oColor <> newColor Then .Fill.ForeColor.RGB = newColor MsgBox "セル("& Y & "," & X & ")の色を変更しました" End If End With End If Next Next End With End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2023/05/12 05:15

状況がよくわかりません。 > 選択セルが2つになったら、2回ループされて「RGB(0,204,0)」の色になってしまいます。 異なる色のセル2を2つ選択して実行すると、それぞれ次の色になるべきが、2セルとも同色になってしまうと言うことでしょうか? > 2回ループされて これの具体的な現象(どんな現象をみてそういう印象を持ったか)は何でしょうか? > セルを3つ選択してたら、3回ループされます は、このコードと関係ないことを言ってますか? このコードはテーブルの全セルについてループしてますけど。3×4のテーブルなら12回。
退会済みユーザー

退会済みユーザー

2023/05/15 00:51

分かりにくく申し訳ございません。 >異なる色のセル2を2つ選択して実行すると、それぞれ次の色になるべきが、2セルとも同色になってしまうと言うことでしょうか? 記載させていただいた通り、セルはの色は2セルとも同色のRGB(255,0,0)です。コマンドボタン1回クリックでRGB(0,0,255)にしたい所、RGB(0,204,0)になってしまいます。 >これの具体的な現象(どんな現象をみてそういう印象を持ったか)は何でしょうか? 補足に試したコードを追記します。メッセージBOXが計4回出たため2回ループされているのかなと思ってます。 >セルを3つ選択してたら、3回ループされます は、このコードと関係ないことを言ってますか? このコードで3セルを選択して実行すると、RGB(0,0,255)にしたい所、RGB(255,255,0)になってしまいます。 今回、コード内のRGBが全て違うテイストですが、実際は同系色で濃→薄になるようなRGBのコードが入ってます。 PowerPointの資料全体を見ながら、色を調整する為にこのボタンを作成しています。 拙い説明で申し訳ございません。
guest

回答1

0

ベストアンサー

質問内容が変わってしまったようなので、前のことは忘れます。

セルはの色は2セルとも同色のRGB(255,0,0)です。コマンドボタン1回クリックでRGB(0,0,255)にしたい所、RGB(0,204,0)になってしまいます。

そうはなりませんので、実行の仕方がおかしいかと思います。
RGB(255,0,0)のセル2つを選んだ上で、VBEから colorchange を実行してみて、RGB(0,0,255) になることを確認しましょう。

「N個のセルが選択されていたらN回繰り返す」という処理は質問文掲載のコードには無いので、それ以外の部分で「N個のセルが選択されていたらN回繰り返す」ということが起こっているのは明らかです。

投稿2023/05/15 05:31

otn

総合スコア84503

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2023/05/15 08:12

変えたつもりは無かったのですが、どの色にしたいという部分が抜けていた点申し訳ないです。 別でコマンドボタンを作成して、全く同じコードを入れたら考えている通りに動いたので、otnさんが仰ってる様に、別の箇所で余計なコードが入ってるみたいです。 このコードの呼び出し元のコードを見直してみます! ありがとうございます。
otn

2023/05/15 16:26

> 「N個のセルが選択されていたらN回繰り返す」という処理は質問文掲載のコードには無いので、 というのは、おそらく、私が指摘するまでもなく、認識済みかと思います。 にも関わらず何故他の箇所を調べてなかったのか?を振り返っておきましょう。 「どこかに間違いがある」&「ここには無い」から導かれるのは「 間違いはここ以外のどこかにある」です。 自分のやったことのどこかに原因があるはずなので、やったことを全部再チェックすれば良いだけです。 とはいえ、「自分が間違いを起こし得る全てのことのリストアップ」が出来ればすでに初心者では無いですが。
退会済みユーザー

退会済みユーザー

2023/05/16 00:08

ご丁寧にありがとうございます。 該当のコードに問題があるとばかり考え、視野が狭くなっていました。 VBAに限らずですが、問題が起こった際のリストアップをまずは目標に今後コード作成していきます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問