重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

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

Sheet1のうち,セルの色がRGB(192, 0, 0)のもののみSheet2の同じ行列の場所に貼り付けたいのですが以下のコードで合っているでしょうか.ご指摘をお願い致します.(セルの色がRGB(192, 0, 0)のもの以外は貼り付けないようにしたいです)
今持っているExcel2013ではエラー等はでないものの,成功しません.

標準モジュール

Sub ボタンクリック2()

Dim c, d, e, myMultipleRange As Range
Set c = Range("o3", "z32")
Set d = Range("AC3", "AN32")
Set e = Range("AQ3", "BB32")
Set myMultipleRange = Union(c, d, e)

With Sheets("Sheet1")
Dim z
For Each z In myMultipleRange
If InStr(z.Interior.Color, RGB(192, 0, 0)) > 0 Then

Worksheets("Sheet1").myMultipleRange.Copy Worksheets("Sheet2").myMultipleRange

End If
Next z
End With
End Sub

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

  • If z.DisplayFormat.Interior.Color = RGB(192, 0, 0) Thenのところまででとりあえずセルの選択まではうまくいっています.
    これがコピーされていないのか,貼り付けがうまくいっていないのかわかりませんがエラーは出ていないのに貼り付けがうまくいっていません
    あと,RGB(192, 0, 0)のセルはVBAの標準モジュールでセルの色を変えているもので,条件付き書式ではないです.
    よろしくお願いします.

      補足日時:2020/08/30 14:30
  • 皆さんご回答ありがとうございました.
    いろいろ調べましたら,「範囲を指定して背景色を取得することはできません」とのことで,
    エラーは表示されないもののコピー&ペーストされないようです.
    お手数をおかけして申し訳ありませんでした

      補足日時:2020/08/30 14:59

A 回答 (6件)

ん~初級者の限界かな。

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

皆さんご回答ありがとうございました.
いろいろ調べましたら,「範囲を指定して背景色を取得することはできません」とのことで,
エラーは表示されないもののコピー&ペーストされないようです.
お手数をおかけして申し訳ありませんでした

お礼日時:2020/08/30 14:59

既に回答は出ていますが。



自身で塗りつぶしたのとばかり思ってましたが、もしかして『条件付き書式の背景色』でしたか?
    • good
    • 0
この回答へのお礼

先ほど検証して成功したものです.

一回セルがRGB(192,0,0)のものの値だけに*など任意の文字を追加します.
範囲全体を貼り付けます
*を含まないものはReplaceですべてデータを消します
*を含むものは*をReplaceで削除して,データだけ残りました

ちょっと面倒ですができました.

myMultipleRangeのこと,教えていただいてとても助かりました.

お礼日時:2020/08/30 15:56

こんにちは、横から失礼します。


回答ではありませんが、
>セルの色がRGB(192, 0, 0)のもののみSheet2の同じ行列の場所に貼り付けたいのですが
素直に解釈するとセル単位でコピペだと思うのですが

> InStr(z.Interior.Color, RGB(192, 0, 0)) > 0 を見ると1つでもあればと思わせるコードですね。
さらに、範囲が分かれている事を見るとエリア内に1つでもRGB(192, 0, 0)があれば、そのエリアをコピペ、、とも想像してしまいます。
おそらく考えすぎと思いますが、、、
本題
もしかすると、、If z.DisplayFormat.Interior.Color = RGB(192, 0, 0) Then かもと思いました。
    • good
    • 0
この回答へのお礼

皆さんご回答ありがとうございました.
いろいろ調べましたら,「範囲を指定して背景色を取得することはできません」とのことで,
エラーは表示されないもののコピー&ペーストされないようです.
お手数をおかけして申し訳ありませんでした

お礼日時:2020/08/30 14:59

現在アクティブになっているシートがSheet1ではないとか?



なら、

Sub ボタンクリック2_test2()

Dim c as range , d as range , e as range , myMultipleRange As Range

With Sheets("Sheet1")
Set c = .Range("o3", "z32")
Set d = .Range("AC3", "AN32")
Set e = .Range("AQ3", "BB32")
Set myMultipleRange = Union(c, d, e)

Dim z as range
For Each z In myMultipleRange
If z.Interior.Color = RGB(192, 0, 0) Then

z.Copy Worksheets("Sheet2").range(z.address)

End If
Next z
End With
End Sub

かな?
    • good
    • 2
この回答へのお礼

度々すみません。
動作確認したら,最後の条件に合うセルまで検索したみたいなのですが,
肝心のコピーがされません...どうしたらよいでしょうか??

お礼日時:2020/08/30 13:56

あ”。


でもコピペ元と先が常に同じなのはおかしくない?

もしかして

>.myMultipleRange.Copy Worksheets("Sheet2").range(myMultipleRange.address)

z.Copy Worksheets("Sheet2").range(z.address)

とか?
    • good
    • 0
この回答へのお礼

にわか知識でやったらいろいろ足りないものがあったみたいで...
ただ,今動作確認したのですが,sheet1のmyMultipleRangeをVBAが見たようなのですが(範囲が選択されていたので)
コピー自体がされてませんでした.どうしてでしょうか??

お礼日時:2020/08/30 12:57

Sub ボタンクリック2_test()



'Dim c, d, e, myMultipleRange As Range VBでは使えるけどVBAではこのような宣言は出来ません

Dim c as range , d as range , e as range , myMultipleRange As Range
Set c = Range("o3", "z32")
Set d = Range("AC3", "AN32")
Set e = Range("AQ3", "BB32")
Set myMultipleRange = Union(c, d, e)

With Sheets("Sheet1")
Dim z as range
For Each z In myMultipleRange
If z.Interior.Color = RGB(192, 0, 0) Then

.myMultipleRange.Copy Worksheets("Sheet2").range(myMultipleRange.address)

End If
Next z
End With
End Sub
    • good
    • 0

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