[[20070523133717]] 『別のシートと見比べて色を塗る』(めい) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『別のシートと見比べて色を塗る』(めい)

 たびたびこんにちはぁあ!
 し、仕事の話です(;^д^)ゝ
[[20050725110942]]『在庫場所の空〜塗りつぶし〜』(初心者18) さんのところで見つけたのですがぁあ、あたしもやってみましたぁ。

 sheet1=納期遅延

 	"a"	  "b"	     "c"	     "d"	"e"	"f"	"g"
"1"							
"2"	No.	商品コード	商品名	     担当者	生産予定	生産日	納期日
"3"	1	S00101010-1	海物語	     少女A	5月20日		5月23日
"4"	2	S00101010-2	海物語in沖縄	少女A	5月20日	5月21日	5月23日
"5"	3	S00101010-3	黄門ちゃま	少女A	5月20日		5月23日
"6"	4	S00101010-4	北斗の拳	     少女A	5月20日		5月23日
"7"	5	S00101010-5	秘宝伝	     少女A	5月20日	5月21日	5月23日
"8"	6	S00101010-6	押忍!番長	     少女A	5月20日	5月21日	5月23日
"9"	7	S00101010-7	クランキーコンドル	少女A	5月20日	5月21日	5月23日
"10"	8	S00101010-8	大花火	     少女A	5月20日	5月21日	5月23日
"11"	9		     アラジンA	少女A	5月20日		5月23日
"12"	10	S00101010-10	GOGOジャグラー	少女A	5月20日		5月23日

 sheet2=最新版
          "a"	  "b"	     "c"	     "d"	"e"	"f"	"g"
"1"							
"2"	No.	商品コード	商品名	     担当者	生産予定	生産日	納期日
"3"	1	S00101010-1	海物語	     少女A	5月20日		5月23日
"4"	2	S00101010-3	黄門ちゃま	少女A	5月20日		5月23日
"5"	3	S00101010-4	北斗の拳	     少女A	5月20日		5月23日
"6"	4		     アラジンA	少女A	5月20日		5月23日
"7"	5	S00101010-10	GOGOジャグラー	少女A	5月20日		5月23日

 最新版の商品名と納期遅延のシートで、同一名の行をピンクに塗りたいのにはぁ、

 Dim c As Range
 Dim MyStr As String
 Dim i As Long
  Sheets("納期遅延").Cells.Interior.ColorIndex = xlNone
  With Sheets("最新版")
      For i = 3 To .Range("c65536").End(xlUp).Row
          MyStr = .Cells(i, 1).Value
          Set c = Sheets("納期遅延").Cells.Find(MyStr, , xlValues, xlWhole, xlByRows, xlNext, True)
          If Not C Is Nothing Then
              c.Interior.ColorIndex = ● ←色の番号わからなぃ
          End If
      Next
  End With
   Set c = Nothing
 End Sub

 結果...

 こういうことですかぁ?!
 なんとなぁーく、納期遅延のシートのc列で、最新版にある5機種の名前のところが塗られていましたぁ。

 うーん..cの商品名で対象したいのですぅ。塗りつぶしたいのは表全部の行だからぁ、A-G列をピンクにしたい。

 まずは実践だだだ!って作ってみたんですがぁあ..
 なんかぁ、1行目まで塗られちゃってるんですぅ..(・з・)
 1行目の色はいらなくしたいですぅう。
  他にこういったコード式ありますかぁ..?

 めい
 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

 簡潔に質問しますぅ。

 1:c列の色塗りを範囲を広げてa-g列まで塗りつぶせるようにするコード
 2:照合する列は、各シートのc列にするコード

 知りたいのは上記のみですぅ。
 無理なら無理で諦めるのですがぁ...(;-ω-)

 めい

 よくわかりませんが、
 1は、該当する列を取得して Offset プロパティとResize プロパティ等で範囲を広げたりするのはいかがでしょう?
 2は、どういう意味でしょうか?わかりません。。。
 現在は、A列を見ているものをC列で判断させたいってことでしょうか?
 そうであれば、
 >MyStr = .Cells(i, 1).Value
                   ~~~
 ここを変更させればいいだけでしょうかね〜
 
 (キリキ)(〃⌒o⌒)b


 キリキさぁん。
 ありがとうございますぅ。

 1:offsetですねぇ!上記のコードですと、c列だけが塗られていましたぁ。
 c列を基準値にすると、offset( , -2),( , 4).Interior.ColorIndex = 38ということになりますかぁ??

 2:sheet1の納期遅延とsheet2の最新版の表が共通しているので
 両方のシートのc列を対象に照合しあって
 ダブっている行に色を塗りたいという意味でして..日本語難しいぃい(☆ω☆)
 a列見てましたかぁ...。c列にしたかったのでぇ、(i, 3)?に変えます。

 Dim c As Range
 Dim MyStr As String
 Dim i As Long
   Sheets("納期遅延").Cells.Interior.ColorIndex = xlNone
   With Sheets("最新版")
       For i = 3 To .Range("c65536").End(xlUp).Row
           MyStr = .Cells(i, 3).Value
           Set c = Sheets("納期遅延").Cells.Find(MyStr, , xlValues, xlWhole, xlByRows, xlNext, True)
           If Not c Is Nothing Then
               range.cells(c.offset( , -2),c.offset( , 4)).Interior.ColorIndex = 38
           End If
       Next
   End With
    Set c = Nothing
 End Sub

 うごかにゃい...orz
 めい

 事前に色塗り範囲を設定してあげてしまうとか...

 Dim c As Range
 Dim MyStr As String
 Dim i As Long
      Sheets("納期遅延").Range("a:g").Interior.ColorIndex = xlNone
      With Sheets("最新版")
           For i = 3 To .Range("c" & Rows.Count).End(xlUp).Row
                MyStr = .Cells(i,3).Value
                With Sheets("納期遅延").Range("a:g")
                     Set c = .Columns(1).Find(myStr,,,xlWhole)
                     If Not c Is Nothing Then c.EntireRow.Interior.ColorIndex = 38
                End With
           Next
      End With

 (seiya)

 seiyaさぁん。
 ありがとうございますぅう。

 書き換えて動かしてみたところ、行全体がピンクになってしまいましたぁあ...orz
 そして、c列と同じものだけではなく、照合されていないのかなぁ..c列にある文字列全てに反映されてしまってますぅ。
 あたしの書き換え方がおかしいんでしょうねぇ...orz

 読み返してみて..日本語おっかしいと思いましたぁ..。

 整理します。
 1.最新版シートにある商品(c列をみる)が、納期遅延シートにあった場合
   納期遅延シートの表のa-g列をピンクにする。
   この場合、納期遅延シートには、3,5,6,11,12行だけが塗られるが正しい。

 2.当初のコードのままだと、c列の商品名だけに色がついていたのを
   前後a,b列とd-g列までのばす。

 For iのiは、行を示すのでよろしいのでしょうかぁ..??
 あたしが勘違いしているぅ??
 Columnsは、(3)に修正するのですぅ??あれ?cをsetしているから(1)列目ってことの意味でよかったのですぅ??

 めい

 Columns(3) ですね、

 それと、
 If Not c Is Nothing Then .Rows(c.Row).Interior.ColorIndex = 38
 にしてみてください。
 (seiya)


 seiyaさぁん。
 修正ありがとうございますぅう!
 納期遅延シートに、A-G列が綺麗に塗られましたぁあ♪
 あと一つ確認というかぁ、質問させてくださぁい...orz

 Sub 遅延してるyp()
 Dim c As Range
 Dim MyStr As String
 Dim i As Long
      Sheets("納期遅延").Range("a:g").Interior.ColorIndex = xlNone
      With Sheets("最新版")
           For i = 3 To .Range("c" & Rows.Count).End(xlUp).Row
                MyStr = .Cells(i, 3).Value
                With Sheets("納期遅延").Range("a:g")
                     Set c = .Columns(3).Find(MyStr, , , xlWhole)
                     If Not c Is Nothing Then .Rows(c.Row).Interior.ColorIndex = 38

                End With
           Next
      End With

 End Sub

 >>For i = 3 To .Range("c" & Rows.Count).End(xlUp).Row
  MyStr = .Cells(i, 3).Value

 これは、最新版のc列(いわゆる商品名をターゲット?)で、
 Cells(i, 3).Valueは、
    ↑ ↑
  3行目の3列目を意味してるであってますかぁあ??

 色を塗るのに、命令したい変数としては
 a3〜g12までの表中で、納期遅延c3:c12と最新版のc3:c7でおんなじ商品がみっかったら、
 納期遅延のほぅに、色を塗る(色は塗られてるけどぅ、照合?していないっぽ)。

 コードの変える箇所、間違ってますかぁ...??

 めい


 1) その通りです。
 2) With で Sheets("遅延").Range("a:g") を参照させましたよね?
    それは .Rows(c.Row) を使用するためのものです。

    Set c = .Columns(3).Find(......) a:g の3列目、即ちC列を検索
    c.Row は検索されたセルの行Indexですので
    Range("a:g").Rows(c.Row) でRange("a" & c.Row & ":g" & c.Row) の範囲を取得できます。
    With statement で一定の範囲を参照してあげれば、その範囲内の記述が簡素化できます。

 こんなところでしょうか?
 (seiya)

 seiyaさぁん。
 解りやすいご説明ありがとうございましたぁああ!

 Range("a:g").Rows(c.Row) でRange("a" & c.Row & ":g" & c.Row)  こんなにも集約できるのですねぇえ...。すばらしぃい。

 照合されていなかったのは、勘違いのようでしたぁあ...orzすみません...違うブック開きながらマクロ実行してたから、反映されずに色が塗られたみたいですぅ。意味不明(;^ω^)
 ただ、2行目が塗りつぶされるのはどこかに範囲対象の何かがあるのでしょうかぁ..。
 コードを見る限りで、2行目を範囲しているのが見当たらないのに..変な現象が起きますぅ...orz

 For i = 3 To .Range("c3" & Rows.Count).End(xlUp).Row とすると定義エラーがでましたぁ。
 forで3行目を指定しているからFor i = 3 To .Range("c" & Rows.Count).End(xlUp).Row のままでいいとは思っているのですがぁ...。
 ↑は、c列の3行目-最終行を範囲指定しているでいいですよねぇ...??

 お昼休みに7,000円負けてきためい


 With Sheets("遅延").Range("a:g")
 は列を指定しただけで、行はすべて含まれますので、2行目に検索対象セルがあれば
 引っかかってしまいますね。

 With Sheets("遅延").Range("a3:g" & Rows.Count)
 に変更すれば、3 - 65536 が対象になります。
 そうすると、 .Rows(c.Row) を変更する必要があります。
 .Rows(c.Row) はあくまでも A:G (A1:G65536) を対象としていたので、c.Rowを
 そのままで使用できましたが、A3:G65536 に対する .Rows の Index を指定しな
 ければなりません。(.Rows(1) は A3:G3 になる)
 この辺は少しややこしいかもしれませんが...
 .Rows(c.Row - .Row + 1) に変更してください。
 こうしておけば、A3:G65536, A100:G65536 とかに変更が生じたときにも対応できます。

 7000円? Pachinxx?
 (seiya)

 seiyaさぁん。
 にゃるほど...。
 ややこしぃですねぇ..頭がぱにくるかもなので2行目は見てみないフリしますぅ。(ヲイ)
 もう少し勉強してから変更してみることにしまっす。
 やりたいことの違いで、コードもエライ変わってくるのですねぇえ...。

 少しずつ意味が解ってきてめちゃ嬉しいですよぅ!
 ありがとうございましたぁあ♪
 BOOKを増やして使うのも、今後便利そうなのでそのへんのマクロも考えて書いてみますぅ。

 7,000円はぁ...SLOTなのですぅ($ω$)

 めい

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.