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

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

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

Q&A

解決済

1回答

561閲覧

マクロ登録 2列塗り潰しを広範囲

Chocolate777

総合スコア1

0グッド

0クリップ

投稿2020/08/06 02:51

編集2020/08/07 06:44

<使用ソフト>
エクセル バージョン 1808(10730.20438)

<実現したい事>
顧客に対する郵便レター発送管理(発送は4回)

1)GY11に1と入力するとGY11とGZ11が黄色く塗り潰される
2)同様にGY12に1を入力するとG12とGZ12が塗りつぶされるの同条件をGY900まで反映させたい。

詳細)
一人の顧客に対して、4回の期限に分けて郵便レターを発送するのですが、
〇「期限日」が表示されたセルが、GZ、HB、HD、HF
〇「作業」となずけて、作業したら1を入力するセルが、GY、HA、HC、HE

発送作業をしたら、期限日のセル(GZ11)の左隣のセル(GY11)に1を入力し、
1と期限日のセルが両方黄色く塗潰されることで、対応したと一目で見てわかるようにしたいです。
ちなみに、GYもGZも先月のデータをVLOOKUPでリンクさせており、
先月対応した顧客はすでにGY列に1が表示されており、
今月新規で増えた顧客のGY列は空白です。
欲を言えば、VLOOKUPでリンクした先月対応し、1が表示されてるセルも黄色をリンクさせたかったのですが、
リサーチしたら、それは機能上できないとわかり、断念した次第です。

また、作業セルをもけている理由は検索機能も作りたいからです。
4回のレターというのが、もとになる期日から
180日目、360日目、540日目、570日目
となります。
発送対象者の場合、発送リスト180日目のボタンを押すと
対象者が表示され、郵送作業を行います。
また、対応漏れ防止用に
対応漏れリストとし、各期限日に対して過ぎている&1が未入力を
条件として検索できるようにしています。

<試したこと>
このコードで1)はできたのですが、2)がわからないです(T-T)

Sub Example()

ThisWorkbook.Woksheets(1).Range(“A1”).Select

With ThisWorkbook.Woksheets(1).Range(“A1:B1”)
.Format Conditions.Delete
.Format Conditions.Add Type:=xIExpression, Formula1:=“=$A$1=1”
.Format Conditions(1).Interior.ColorIndex = 27

基礎的なご質問かと思いますが、ご教授頂けると幸いです。
宜しくお願い致します。

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

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

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

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

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

radames1000

2020/08/07 07:17

VBAの質問ですので、タグに「VBA」を追加していただけると嬉しいです。
meg_

2020/08/17 16:35

> 2)がわからないです(T-T) 他のセルにも 1)同様に設定すれば良いのではないですか?
mattuwan

2020/08/18 02:08 編集

>同条件をGY900まで反映させたい。 列を丸ごと条件付き書式を設定しておけば、何回もメンテナンスする必要ないと思いますが、 なぜ、マクロ化したいのでしょうか? >欲を言えば、VLOOKUPでリンクした先月対応し、1が表示されてるセルも黄色をリンクさせたかったのですが、リサーチしたら、それは機能上できないとわかり、断念した次第です。 出来ないことはない気がしますが、何をどうしているかがよくわかりません。 数式と数式で得られた結果の例があれば、こちらで試行錯誤ができるかもしれません。
guest

回答1

0

ベストアンサー

これでいかがでしょうか。

VBA

1ThisWorkbook.Worksheets(1).Range("A1").Select 2 3With ThisWorkbook.Worksheets(1).Range("A1:B900") 4 .FormatConditions.Delete 5 .FormatConditions.Add Type:=xlExpression, Formula1:="=$A1=1" 6 .FormatConditions(1).Interior.ColorIndex = 27 7End With

投稿2020/08/06 03:01

radames1000

総合スコア1925

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

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

DreamTheater

2020/08/06 04:08 編集

A列の1~900行目のセルそれぞれに1が入力されたら、自身と同一行のB列セルを塗りつぶすことが質問者の意図なら正しい答えだと思います。 Chocolate777さん 質問文の「実現したいこと」の書き方が不十分です。 「A1セルに1と入力されたら、A1:B900全てを塗りつぶしたい」という解釈もできますよ。 まあそれなら、radames1000さんご提示コードの "=$A1=1"を"=$A$1=1"に変更するだけですが。
radames1000

2020/08/06 04:11

>DreamTheaterさん フォローありがとうございます!
radames1000

2020/08/07 00:57

Chocolate777さん 回答はご覧になったと思いますが、まだ疑問点や問題点がありますか?
Chocolate777

2020/08/07 06:14

返信お待たせいたしました! ご丁寧なご連絡と、ご回答をいただきありがとうございます!(^0^) また、DraemThaterさんもありがとうございます!(^0^) こちらを使用するのも、VBAも初心者で、質問の言葉足らずで大変失礼いたしました。 はい、DreamThaterさんのおっしゃる通りで、 例としてA1に1を入力したら、A1とB1が黄色に塗られ A2以降も同様にA2に1を入れるとB2が黄色くなるとしたいです。 なお、頂いたコードを新規のシートで行ってみると実行できるのですが 実行させたいデータが入っているシートで実行すると1004のエラーが出ました。 頂いたコードのセルを書き換えたのですが、それがいけなかったのでしょうか。 もともと実現したいことを改めて記載します。 <実現したいこと> 顧客に対する郵便レター発送管理(発送は3回) 一人の顧客に対して、4回の期限に分けて郵便レターを発送するのですが、 〇「期限日」が表示されたセルが、GZ、HB、HD、HF 〇「作業」となずけて、作業したら1を入力するセルが、GY、HA、HC、HE 発送作業をしたら、期限日のセル(GZ11)の左隣のセル(GY11)に1を入力し、1と期限日のセルが両方黄色く塗潰されることで、対応したと一目で見てわかるようにしたいです。 ちなみに、GYもGZも先月のデータをVLOOKUPでリンクさせており、 先月対応した顧客はすでにGY列に1が表示されており、 今月新規で増えた顧客のGY列は空白です。 欲を言えば、VLOOKUPでリンクした先月対応し、1が表示されてるセルも黄色をリンクさせたかったのですが、 リサーチしたら、それは機能上できないとわかり、断念した次第です。 以上なのですが、この書き方でお分かりになりますでしょうか? お忙しいことと思いますので、お手すきの際に回答いただければ幸いです。 この書き方でもわかりにくいようでしたら、再度、まとめます! よろしくお願い致します。m( _ _ )m
Chocolate777

2020/08/07 06:16

すみません、発送は4回です!
Chocolate777

2020/08/07 06:23

追記) そもそも、なぜ、作業セルをもけているかと申しますと、 検索機能も作りたいからです。 4回のレターというのが、もとになる期日から 180日目、360日目、540日目、570日目 となります。 発送対象者の場合、発送リスト180日目のボタンを押すと 対象者が表示され、郵送作業を行います。 また、対応漏れ防止用に 対応漏れリストとし、各期限日に対して過ぎている&1が未入力を 条件として検索できるようにしています。
radames1000

2020/08/07 06:27

もしよろしければ、ご自身で修正されたコードや今回記載された<実現したいこと>などを質問欄に追記していただけませんか?他の方もその方が確認しやすいと思いますし、1004エラーが気になります。
Chocolate777

2020/08/07 06:44 編集

早速ご連絡いただきありがとうございます! こちらになります。 Sub 黄色検証() ' ' 黄色検証 Macro ' ' ThisWorkbook.Worksheets(1).Range("GY11").Select With ThisWorkbook.Worksheets(1).Range("GY11:GZ900") .FormatConditions.Delete .FormatConditions.Add Type:=xlExpression, Formula1:="=$GY11=1" .FormatConditions(1).Interior.ColorIndex = 27 End With End Sub
Chocolate777

2020/08/07 06:36

質問欄への追記承知しました!
radames1000

2020/08/07 06:46

"=$GY1=1"は"=$GY11=1"が正しいと思います。修正してみて再度エラーが出ないかご確認ください。 VLOOKUPの結果が数値の「1」であれば色は変わるのですが、文字列の「1」だと変わりません。 そのあたりも合わせて確認してみていただけますか?
Chocolate777

2020/08/07 07:05

承知しました!ありがとうございました!
Chocolate777

2020/08/07 07:11

お世話様です。 修正し、試してみましたが 実行時エラー1004 RngeクラスのSelectメソッドが失敗しました と表示されました。 修正コートはこちらになります。 Sub 黄色検証() ' ' 黄色検証 Macro ' ' ThisWorkbook.Worksheets(1).Range("GY11").Select With ThisWorkbook.Worksheets(1).Range("GY11:GZ900") .FormatConditions.Delete .FormatConditions.Add Type:=xlExpression, Formula1:="=$GY11=1" .FormatConditions(1).Interior.ColorIndex = 27 End With End Sub
radames1000

2020/08/07 07:16

Selectはそのシートがアクティブになっていないと使えません。 Worksheets(1).Select をSelectの前に入れればエラーが出なくなると思います、が そもそもセレクトは必要でしょうか? 条件付き書式の設定だけであればセルをSelectをしなくても大丈夫なんです。
Chocolate777

2020/08/07 07:30 編集

なるほどですね! いいえ、そもそもGY11がセレクトされてなくても問題ございません。再度試します!ありがとうございます!
Chocolate777

2020/08/07 07:33

度々すみません。 こういうことで宜しいのでしょうか? 初心者ですみません。。。 Sub 黄色検証() ' ' 黄色検証 Macro ' ' With ThisWorkbook.Worksheets(1).Range("GY11:GZ900") .FormatConditions.Delete .FormatConditions.Add Type:=xlExpression, Formula1:="=$GY11=1" .FormatConditions(1).Interior.ColorIndex = 27 End With End Sub
radames1000

2020/08/07 07:48

問題ないと思いますよ!
Chocolate777

2020/08/07 08:01

お世話様です。 上記のコードでエラーは出なくなりましたが 1を入力しても塗りつぶしがされなくなりました。
radames1000

2020/08/07 08:06

下記二点はいかがでしょう。 ・Worksheets(1)なので一番左のシートに設定していますが、確認したシートは正しいですか? ・ワークシート1のセルGY11で条件付き書式の「ルールの設定」を開いてください。どのように表示されていますか?
Chocolate777

2020/08/07 08:21

お世話様です。 承知致しました! なお、時間になってしまったため、週明けに試します。ご協力いただきありがとうございまいした☆
Chocolate777

2020/08/11 02:40

お世話様です。先日はいろいろとありがとうございました。 >Worksheets(1)なので一番左のシートに設定していますが すみません。。こちらがうまく理解できておりません。 そのブックに複数のワークシートがあり、Aという名前のシートで作業を行いたい場合は どのようにコードを足したらよいでしょうか? また、ルールの設定ひらきましたら、ルールが設定されてない状態でした。 初心者ですみませんが、お手すきの際にご確認頂ければ幸いです。
per_

2020/08/17 04:36 編集

横からの回答で恐縮です。 Worksheets(1)の 1 というのは、そのブックの左からのシートの順番を示しています。 左から2番目のシートなら2、5番目のシートなら5です。 (https://docs.microsoft.com/ja-jp/office/vba/excel/concepts/workbooks-and-worksheets/refer-to-sheets-by-index-number) シートの名前で判別したいのであれば Worksheets("A") のように、カッコの中にシート名を入力するとうまくいくかと思います。 Worksheets(1) のコードのまま実行したのであれば、そのブックの一番左のシート内の GY11:GZ900セル にルールが設定されているはずです。
radames1000

2020/08/18 00:05

per_さん、コメントありがとうございます。 Chocolate777さん、per_さんコメントの内容を落とし込んでみてくださいね。 現段階では最初の質問内容は解決されていると思いますので、 追加質問の場合は新規で質問をおこされるといいと思います。
Chocolate777

2020/08/20 05:48

per_さん、radames1000さん、お世話様です。無事に解決しました!回答のお手間とお時間をいただき誠にありがとうございました!
Chocolate777

2020/08/20 05:54

アクティブにするというアドバイスで最終的に下記コードにしたら運用できました! Sub そのセルに値を入力するとその右隣りも塗潰されるのが指定範囲行まで() ' ' そのセルに値を入力するとその右隣りも塗潰されるのが指定範囲行まで Macro ' ' ActiveSheet.Range("GY11:GZ11").Select With ActiveSheet.Range("GY11:GZ900") .FormatConditions.Delete .FormatConditions.Add Type:=xlExpression, Formula1:="=$GY11=1" .FormatConditions(1).Interior.ColorIndex = 27 End With End Sub
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問