[[20100824022156]] 『マクロのやり方』(ゆき) ページの最後に飛ぶ

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

 

『マクロのやり方』(ゆき)

[[20100821224618]]

 でせっかく 教えて頂いたのですが 大変申し訳ありません
 最初出来ていたと思ったのですが 一行だけで調べていまして 今2行目3行目と 打込んでいったら 
 その時その時に ALTとF8 を押して 実行 を押さないと 色が変わらないんです。すみません(^_^;)
 それと D3:D102 とE3:E102 は 山田建設とか 田中建設とかいう文字を
 隣のシートBから抽出してくるのですが その隣のシートBの 田中建設とかを一旦入力して
 色の変わる方のシートAの 色が一旦変わるのですが、
 シートBの 山田建設というのを 消して、他の会社名にすると 
 シートAの方の 色の変わるセルは 色が 最初に付いてしまった色から 変わりません。 
 すみません よく私は打ち間違え とかをするので 何度 会社名を変えても
 色が その都度 変わるようになるものでしょうか?
 大変すみません 私のマクロの設定の仕方?とか やり方が 変なのだと思います
 すみませんが 宜しくお願い致します m(__)m


 こんにちは。
 
[[20100526142441]]『セルに入る文字によって セルの色を変えたい』(素人)

 こちらと同じように、入力した時点で色付けしたいということですね。
(解決したと書かれていたので、静観してました)

 >私のマクロの設定の仕方?とか やり方が 変なのだと思います
いいえ、そもそもマクロの起動方法には、手動と自動の2種類あり、
・Mookさんの書かれたコードは手動で、
 (マクロの名前は、YukiPaint のように任意)
・『セルに入る文字によって セルの色を変えたい』で提示されたコードは自動
 (マクロの名前は、Workbook_SheetChange のように既定)
だったのです。
(正確には、自動というより、何かのExcel操作(※)に連動してマクロが起動するということですけど。
 ※イベントと呼ばれ、セルに入力する、選択範囲を変える、シートを開くなどがあります)
なので、ご質問される時点で、どのような方法でマクロを起動したいかを書いておくとよかったですね。

 ところで、今回もセル入力によってマクロ起動する場合、1つ懸念があって、同じイベント
(この場合、セル入力)について、複数のマクロは書けない、のです。

 つまり、今回のブックが、『セルに入る文字によって セルの色を変えたい』で提示されたコードが
書かれているブックと同じなら、そのコード自体を変更しないといけないのです。
(別のブックなら新たに追加すればいいだけですけど)

 今回のブックと、『セルに入る文字によって セルの色を変えたい』のブックは同じでしょうか?

 (コタ)

(ゆき)コタさん ありがとうございます。見てくださって嬉しいです。
 実は コタさんの言われるとおりです。前コタさんが教えて下さったマクロを入れて 
 同じように作ってみたのですが やはり 難しかったです (^_^;) MOOKさんにも
 せっかく 教えて頂いたのに 私の知識不足で 申し訳ない限りです(^_^;)

 今入っているのは 以前教えて頂いたもので

 '色付けマクロ(シート保護追加)
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim colr As Integer
    '↓複数セルをまとめて変更したら終了
    If Target.Count > 1 Then Exit Sub
    '↓D1セル以外の変更なら終了
    If Target.Address <> "$D$1" Then Exit Sub
    '↓D1セルの値によって色を指定
    Select Case Target.Value
        Case "山田建設"
            colr = 10 '緑
        Case "近藤建設"
            colr = 5 '青
        ' 設定を増やすときは、↓の2行を☆行の上にコピペして、
        ' 会社名と数値を変更する
        Case "田中建設"
            colr = 7 '桃
        Case "橋本工務店"
            colr = 9 '茶
        Case "浜建築"
            colr = 29 '紫
        Case "谷建築"
            colr = 46 '橙
        Case "工賃"
            colr = 16 '灰
        Case "大組"
            colr = 11 '畳
        Case "たたみ"
            colr = 12 '畳
        Case "谷建築工房"
            colr = 3 '赤
        Case ""
            colr = xlNone '色なし
        '☆
        '↓上記以外の入力またはブランクのとき
        Case Else
            colr = 41 '水色
    End Select
    '↓色付け直前にシート保護を解除(2010/7/22追加)
    Sh.Unprotect
    '↓D1セルのパターンを指定値に変更
    Target.Interior.ColorIndex = colr
    '↓開いているシートのタグ色を指定値に変更
    Sh.Tab.ColorIndex = colr
    '↓色付け直後にシート保護を設定(2010/7/22追加)
    Sh.Protect
End Sub

 です。それで 今回はシートAのD3:D102 に入った会社名で D3:D102 とE3:E102
 の両方の色を 変えたいです。
 いつも ありがとうございます 見てくださって ありがとうございます(*^_^*)
 宜しくお願い致します (*^_^*)


 > 今入っているのは 以前教えて頂いたもので
やはり、同じブックでしたか。
それでは変更にあたって、いくつか確認しますね。

 ・今入っているマクロは、全てのシートについて、
   D1セル(とシートタブ)だけ色を付けるもの・・・これを処理Aと呼びます
 です。今回追加するのは、
   D3:D102 とE3:E102全てに対して色を付ける・・・これを処理Bと呼びます
 のですが、これは特定のシートについてのみ行うのでしょうか。
 もしそうであれば、特定シートについて以下を教えてください。
 (1)名前は?
 (2)処理Aは行わない?
 (3)シート保護は行う?

 ・色付けのルール(どの会社名にどの色をつけるか)は、今のマクロと同じでよい?
 (逆に変えると分かりづらいですよね)

 ・D3:D102に入力やコピーするとき、まとめて複数行うこともよくある?
 (今のマクロはセル1つにしか対応していない)

 (コタ)

(ゆき)コタさん ありがとうございます。
 同じブックではなく 見積書として[[20100719154733]] で教えて頂いたものです。
 この見積一覧表シートを 152行だったのを 102行に直しました。
 150枚のシートから見積一覧表シートに くるようにしていました。
 それで 150枚は多かったので 100枚に直し、見積一覧表シートの行数も
 152行から 102行に直しました。
 それと見積一覧表の、D列とか 他 何列かを追加したりしました。

 それで、前教えて頂いたマクロを、使ってみようとしまして、100枚のシートのD1に 
 会社名を入れたら 文字の色と、シートの見出しの色が変わるようになるかと入れてみましたら、なりました。自分でもびっくりしました。
 コタさんのおかげです m(__)m

 それで 今回は 見積一覧表の方の DとEに 会社名が入りますが 
 よく考えてみたら E列だけの色が変わればよかったです。Dは色が変わらなくても 良かったです。すみません

 それとシート保護は 最初からこの見積一覧表は かまったら駄目と思って
 シート全体に ロックをかけました
 それと色付けのルールは 上と同じがいいです。

 >D3:D102に入力やコピーするとき、まとめて複数行うこともよくある?
 (今のマクロはセル1つにしか対応していない)

 これは シート100枚を 続けて3枚とか5枚とか 打つときもあるので
 複数がDとE列に 入ることは あります
 コタさん どうも ありがとうございます (*^_^*)
 いつもお世話になります ありがとうございます(*^_^*)

 ・関連スレ
[[20100821224618]] 『会社別に色をつけたい』(ゆき)
[[20100719154733]] 『会社別に抽出したいのですが』(素人) 
[[20100526142441]] 『セルに入る文字によって セルの色を変えたい』(素人)

 > 同じブックではなく 見積書として[[20100719154733]] で教えて頂いたものです
おっと、別のブックでしたか。

 >今回は 見積一覧表の方の DとEに 会社名が入りますが
ということだと、セル入力によってマクロを起動する方法は、使いづらいですね。
では、見積一覧表シートを開いたときに、まとめて色付けしましょう。
そうすれば、「シート100枚を 続けて3枚とか5枚とか」打っても問題ないですし、
今入っているマクロは、変更不要になります。

 ↓のマクロを、今入っているのと同じ場所(上でも下でも可)にコピペしてから、
Excelのシートに戻って、見積一覧表シートを開きなおしてみてください。
(Dictionaryの使い方は、Mookさんのコードを参考にさせていただきました)

 ○【ThisWorkbook】モジュール
 ↓ここから
 '見積一覧表色付けマクロ
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim dic As Object
Dim v As Variant
Dim i As Long
    '↓見積一覧表以外を開いたら終了
    If Sh.Name <> "見積一覧表" Then Exit Sub

    Set dic = CreateObject("Scripting.Dictionary")
    ' 設定を増やすときは、↓の行をコピペして、
    ' 会社名と数値を変更する
    dic.Add "山田建設", 10 '緑
    dic.Add "近藤建設", 5 '青
    dic.Add "田中建設", 7 '桃
    dic.Add "橋本工務店", 9 '茶
    dic.Add "浜建築", 29 '紫
    dic.Add "谷建築", 46 '橙
    dic.Add "工賃", 16 '灰
    dic.Add "大組", 11 '濃青
    dic.Add "たたみ", 12 '濃黄
    dic.Add "谷建築工房", 3 '赤

    '↓会社名のある範囲(D列)※ここは必ず1行目から
    v = Sh.Range("D1:D102").Value
    '↓色付け直前にシート保護を解除
    Sh.Unprotect
    '↓E列のパターンを指定値に変更
    For i = 3 To 102 '3〜102行目
        With Sh.Cells(i, "E").Interior
            If v(i, 1) = "" Then
                '↓ブランクのとき
                .ColorIndex = xlNone '色なし
            ElseIf dic.exists(v(i, 1)) Then
                '↓上で設定した会社名のとき
                .ColorIndex = dic(v(i, 1)) '各色
            Else
                '↓上記以外のとき
                .ColorIndex = 41 '水色
            End If
        End With
    Next
    '↓色付け直後にシート保護を設定
    Sh.Protect
    Set dic = Nothing
End Sub
 ↑ここまで

 (コタ)

(ゆき)
 コタさん 凄いです 出来ました!!良かったですーー★
 本当にありがとうございます。 いつもいつも 感謝致しております(*^_^*)
 素人の私に いつも判りやすく教えて頂いて 本当に感謝で一杯です。
 どうも ありがとうございます m(__)m
 又 どうか宜しくお願い致します m(__)m

コメント返信:

[ 一覧(最新更新順) ]


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