[[20170610143112]] 『決まっている数字より下と、右側に自動で色を付け』(りりちゃん☆彡) ページの最後に飛ぶ

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

 

『決まっている数字より下と、右側に自動で色を付けたい。』(りりちゃん☆彡)

皆様、こんにちは。
りりちゃん☆彡です。
いつもお世話になっております。

決まっている数字よりも下と、表の右側の最後のセルまでを色を自動で
付けたいのですが、やり方が分からなくて困ってしまってます。

どなたか教えてもらえませんでしょうか。

1.表は下記の通りです。実際は右側にもっともっと長いです。

A列       B列      C列   D列
日付      会社名    承認番号 住所
2017/6/17 △○株式会社 RR5369 ○○県○○市1234
2017/6/16 ○×事務所 RR5365 ○○県○○市1235
2017/6/15 □○株式会社 RR5361 ○○県○○市1236
2017/6/14 △○株式会社 RR5357 ○○県○○市1237
2017/6/13 ○×事務所 RR5353 ○○県○○市1238
2017/6/12 □○株式会社 RR5349 ○○県○○市1239
2017/6/11 △○株式会社 RR5345 ○○県○○市1240
2017/6/10 ○×事務所 RR5341 ○○県○○市1241

2.この表はにっう数を重ねるごとに、どんどんデーターが上側の方に
蓄積されてしまいます。そこで、決まった承認番号以下を
色付けしたいです。

希望1

C列の4行目 RR5361 から下を色付け、表の向かって右側に色付けしたいです。

超初心者の為本にあったコードで試してみたらまあまあ上手くいきましたが
セルを固定する方法でしか分からなくて行き詰まってしまいました。

決まった承認番号以下で、決まった承認番号の向かって右側と、左側も
色を付ける場合はどうゆうふうにすればいいでしょうか??

お忙しい所申し訳ありませんが教えてください。
りり☆彡が本で見付けたコードは下記の通りです。

Sub 色を付ける()

    With Range("A4", Range("A4").End(xlDown))

        With .Font
        .ThemeColor = xlThemeColorLight2
        End With

        With .Interior
        .ThemeColor = xlThemeColorDark2
        .TintAndShade = 0.4
        End With

    End With

End Sub

< 使用 Excel:Excel2010、使用 OS:Windows8 >


 >RR5361 から下を色付け、表の向かって右側に色付けしたいです。
 何の右側なのわかりづらいけど。
 C列に検索値があって、かつ最終行ではないという条件なら。

 Sub test()
    Dim x
    With Cells(1).CurrentRegion.Columns("c:d")
        .Font.ColorIndex = xlAutomatic
        .Interior.ColorIndex = xlNone
        x = Application.Match("RR5361", .Columns("a"), 0)
        If IsNumeric(x) Then
            If x < .Rows.Count Then
                With .Rows(x + 1 & ":" & .Rows(.Rows.Count).Row)
                    .Font.ThemeColor = xlThemeColorLight2
                    With .Interior
                        .ThemeColor = xlThemeColorDark2
                        .TintAndShade = 0.4
                    End With
                End With
            End If
        End If
    End With
End Sub
(seiya) 2017/06/10(土) 15:20

(seiya)様

こんばんわ。
りりちゃん☆彡です。
初めまして。この度はどうもありがとうございました。

先程やってみたら、色がつきました〜!!!
やったぁありがとうございました〜(*´▽`*)

これ、今までわざわざ番号を探して色付けしていました(涙)
何とか、ならないかな〜って思って、一生懸命本で調べたけど、
本ではセルをしていしる形でのって居て、そこから希望の番号より下ってどうやればなるのかな。。
ってところで全然分からなくなっちゃって、ここに相談しました。

本当にどうもありがとうございましたっ!!

お忙しい所、、申し訳ないのですが、今後の勉強の為に、作っていただいたマクロの意味を少し
教えてほしいのですが。。りりなりに一生懸命考えて解釈したのですが、難しくてちんぷんかんぷんで。。
お時間のある時でいいので( ;∀;)
よろしければ教えてくださいっm(__)m

Sub test()

    Dim x
    With Cells(1).CurrentRegion.Columns("c:d")                     'C列〜D列までの入力されているセルを対象にします。
        .Font.ColorIndex = xlAutomatic                              'フォントの色は、通常の色
        .Interior.ColorIndex = xlNone                               '背景は行わない
        x = Application.Match("RR5361", .Columns("a"), 0)           'a列から「RR5361」を検索しxに代入する。
        If IsNumeric(x) Then                                        '変数が、「RR5361」だったら
            If x < .Rows.Count Then                                 '分からないので教えてほしいです。。
                With .Rows(x + 1 & ":" & .Rows(.Rows.Count).Row)    '変数に+1した下方向と、:の  ここまでしか分からないので教えてください(..)
                    .Font.ThemeColor = xlThemeColorLight2           'フォントは通常
                    With .Interior                                  '背景を
                        .ThemeColor = xlThemeColorDark2             'グレー
                        .TintAndShade = 0.4                         'グレーの0.4%色
                    End With
                End With
            End If
        End If
    End With
End Sub
(りりちゃん☆彡) 2017/06/10(土) 22:28

 1) >        x = Application.Match("RR5361", .Columns("a"), 0)           'a列から「RR5361」を検索しxに代入する。

     これは、参照しているセル範囲の相対列を参照しています。

     Cells(1).CurrentRegion
     これは ActiveSheet.Cells(1).CurrentRegionのことで、
     ActiveSheetの左上端セルがA1ですので
     ActiveSheet.Range("A1").CurrentRegionのことです。

     CurrentRegionとは任意のセル(この場合A1)を含む空白行・列で区切られたセル範囲です。

     Cells(1).CurrentRegion.Columns("c:d")は上記セル範囲に対するC:D列を参照しています。

     例えば、A列が空白でデータがB列から始まっているような場合は
     Range("B1").CurrentRegion.Columns("c:d")のシート上の列は一列ずれてD:E列が対象になります。

    With Cells(1).CurrentRegion.Columns("c:d")
    で、対象範囲のC:D列を参照していて、それに対する Columns("a") 又は.Columns(1)は、C列になり,.Columns("b")又は.Columns(2) はD列になります。

    ということで、
    >'a列から「RR5361」を検索しxに代入する。
    は "参照範囲の第一列(この場合C列)から...." というのが正解です。

 2) With .Rows(x + 1 & ":" & .Rows(.Rows.Count).Row)

    .Rows(.Rows.Count).Rowを分解します。
    Cells(1).CurrentRegionの.Rows.Countは、その範囲の行数を取得でいます。(.Columns.Countで列数)

    .Rows(Index)でその範囲内の指定した行位置を取得できます。

    例えば、10行あったとします。
    .Rows(.Rows.Count) = .Rows(10) ということで、範囲内での最終行を参照します。
    最後の.Rowで行番号を取得します。

    今回の質問条件では、開始行が一行目ですので参照行・列共にシート上の行・列と一致しますが
    もしセル範囲が違った場合、このように記述することで、最初のセル範囲指定に対応したコードになります。

 細かく分解して書けば良いのでしょうが、ちょっと面倒なのでこのような書き方をしています。

 回答に対して、お礼の返信だけで終わってしまうスレもありますが、わからない部分は質問をしてご自分の理解を深めてください。
 質問が無ければ、すべて理解をしてと判断するしかありませんので。

 不明な点があれば、質問してください。

(seiya) 2017/06/11(日) 09:08


(seiya)様
こんばんわ。りりちゃん☆彡です。
いつもお世話になっております。
お忙しい所かいせつくださり(人''▽`)ありがとう☆ございましたっ。

1)の

 x = Application.Match("RR5361", .Columns("a"), 0)      
 は "参照範囲の第一列(この場合C列)から...." というのが正解です。
そうだったんですね。。良く分かったようなわからないような。。
やっぱり難しいです(*_*;
でも、こんなに説明できるなんてスゴイ!!さすがですっ。

2)の

 With .Rows(x + 1 & ":" & .Rows(.Rows.Count).Row)
  は、表の右側がどのくらいの長さになるか分からないから、
こういう風に書けば、横の方の入力されている最後のセルを自動選択して色を付けてくださいってなる感じですか??

う。。またあっていないかもしれないけど。。
なんとなくしか理解できないりりでゴメンナサイ。。
なんとなくだけど、、1)の方が全然つかめないです(涙)
2)の方はなんとなく分かった気もするけど。。でも私が考えだすことはできなそうです。。
いつか考え出せるようになりたいです。そのためにもっともっと勉強しなくっちゃ(^-^;

質問をしてくれていいって言ってもらえて本当に嬉しいです。
本を読んだりして一生懸命頑張ってはいるけど、わからないことだらけで。。
でも、頑張ります(*^^*)

今回の件、本当にどうもありがとうございましたっ<(_ _)>

また、色々とここでご相談することもあると思います。
また私の名前を見かけたら、その時はどうぞよろしくお願い致します。

りり☆彡より。

(りりちゃん☆彡) 2017/06/11(日) 22:18


 範囲の取得の仕方を順を追って説明します。
 ここがきちんと取得できないと、複雑怪奇なコードになりかねませんので、

 Step debug して検証してください。

 Sub test()
    Dim x
    With Range("A1").CurrentRegion
        MsgBox "Range(""A1"").CurrentRegion のアドレスは" & vbLf & .Address & "です。"
        With .Columns("c:d")
            MsgBox "Range(""A1"").CurrentRegion の .Columns(""C:D"")は" & vbLf & .Address & "です。"
            .Font.ColorIndex = xlAutomatic
            .Interior.ColorIndex = xlNone
            MsgBox "Range(""A1"").CurrentRegion の .Columns(""C:D"")の .Columns(""A"")は" & vbLf & .Columns("A").Address & "になります。"
            x = Application.Match("RR5361", .Columns("a"), 0)
            MsgBox """RR5361""の" & .Columns("A").Address & "での行位置は" & x & "です。"
            If IsNumeric(x) Then
                If x < .Rows.Count Then
                    With .Rows(x + 1 & ":" & .Rows(.Rows.Count).Row)
                        MsgBox "色付けの対象範囲は " & .Address & " になります。"
                        .Font.ThemeColor = xlThemeColorLight2
                        With .Interior
                            .ThemeColor = xlThemeColorDark2
                            .TintAndShade = 0.4
                        End With
                    End With
                End If
            End If
        End With
    End With
End Sub

 参考になるかわかりませんが、セル範囲の取得方法で

 Range("A1").Range("B1:C3") なんて形もあります。Range("A1")を起点にしたB1:C3を取得します。(B1:C3)
 Columns("C").Columns("D").Range("F1:G5")は Columns("C")から4列右側即ちF列を起点としたF1:G5を取得します。(K1:L5)
 Rows("5:10").Columns("C:D") は C5:D5を取得します。

 ややこしいですが、このような書き方も知っていると後々役に立つことがあると思います。
(seiya) 2017/06/11(日) 23:25

(seiya)様

こんばんわ。いつもお世話になっております。
りり☆彡です。
お忙しいのに、取得している値を目で見れるように書いて下さったんですね!!
ありがとうございました!!

さっきやってみて。。
う〜ん。。昨日教わったことの続きですね。りりが理解できていなかったところ。。

seiya様が、おっしゃっているように、この先のりりにきっと役に立つ事だと思うので
ぜひ、マスターしたいですっ。なのでもう何日かくださいっ。
良〜く理解したいんですっ(*^^*)

でも。。ちょっとだけ不安です。(..)理解できるのかな。りりに。
あんまり自信ないけど、また質問させてほしいです!!
少々お待ちくださいませっ。

PS.Step debug って、F8でいっこづつ黄色くしてみればいいんですよね(^_-)-☆りり本で習いました♪
(りりちゃん☆彡) 2017/06/12(月) 21:52


コメント返信:

[ 一覧(最新更新順) ]


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