[[20071018115854]] 『データに該当する語群を表記する方法』(tomos) >>BOT

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

 

『データに該当する語群を表記する方法』(tomos)
 スタッフのスケジュール管理表を作成したいのですが、
 外回りの際に時間ごとに訪問先の町名を入力した表【Sheet1】があります。
 そのデータを元に別シート【Sheet2】に各スタッフの簡易行動表を作りたいのです。
 具体的には、時間が表記されたセル(B列)の横のセル(C列)は
 その町名が該当する区の表記+セルに色をつけて分かりやすく表示するもので
 イメージは下のような感じです。

  【Sheet1】
  A  B  C  D
 1 名前 時間 町名
 2 吉田 10時 天神1
 3      11時 西新7
 4
 5 梶原 10時 中洲4
 6      11時 香椎台4

  【Sheet2】(Sheet1よりリンク等で自動的にこの状態で表示)
  A  B  C  D
 1 名前 時間  区
 2 吉田 10時 中央区
 3   11時 早良区
 4
 5 梶原 10時 博多区
 6      11時 東区

 素人なりに考えた方法(?)なのですが…
 Sheet2内に上の表と別の場所に市内の住所(町名)を区ごとに一覧を作り
 その区ごと住所(町名)一覧の住所から、
 Sheet1のC列でのそれぞれの訪問先町名が該当する区をSheet2のC列にて表示。

 更にその表示しているC列のセルを『区』ごとにそれぞれ色を分けて表示する…
 というようなやり方ができるのかな…と考えたのですが、やり方が分かりません。

 どなたか教えていただける方がいらっしゃいましたらよろしくお願いいたします。


 VLOOKUP関数はどうでしょうか?(ROUGE)
http://www.excel.studio-kazu.jp/lib/e1tw/e1tw.html

 町名の重複がありそうなので町名だけでは難しいかな?
 >『区』ごとにそれぞれ色を分けて表示する
福岡市は7区だから、条件付き書式使用は無理なのでVBAかな。
(Excel2007なら可能)
[[20050115131721]]『条件式書式を6つやりたいんですが・・・』(sirouto)
(TT)

 お返事ありがとうございます!!
 なんだか難しそうですね〜…

 (ROUGE)さま
 ありがとうございます。リンク先を参考に自分のやりたいことを当てはめてやってみます!

 (TT)さま
 区ごとに分けるのですが、近隣の市町村も含めて表示したいのですがリンク先のやり方で
 6つ以上の色分けも可能なのでしょうか?
 (今、見てみたのですが、初心者なもので分からなくてすみません。。。)

 私がど素人なものでして、アドバイス頂いた これらを拝見してすぐに
 「分かった!!」というレベルではないので少しずつ確認しながら理解しようと思います。

 それでも出来なければまたご相談させていただきます。
 よろしくお願いいたします!(tomos)

 区名別の色分けですが、Excel 2002以降で、[編集]-[置換]機能で、書式付置換できるので、それを利用するというのも手です。
 色分けを毎回メニューから実行するのが億劫なら、色分け置換の手順をマクロ記録してこれを再利用すればいいでしょう。
 (まーまあ)

 (まーまあ)さま
 ありがとうございます。

 置換という機能があるんですね〜当然知りませんでした。。。
 >毎回メニューから…
 と言われているように、これはデータを更新するごとに各「区」ごとに色を設定していく
 という作業を行う…ということですよね?

 ありがとうございます。こちらも参考にさせていただきます!(tomos)


 早速すみません。。。
 (TT)さまからのリンク 
http://www.excel.studio-kazu.jp/cgi-bin/kazuwiki2.cgi?mycmd=read&mypage=[[20050115131721]]
 ですが、これはA列を対象にしているとあります。これを複数列対象にするには
 どのようにしたらよろしいでしょうか?
 ※例えばC列、G列、E列、I列、K列、M列においてこのような条件式を機能させるということです。
 どなたか教えていただければ、よろしくお願いいたします。(tomos)

 Worksheet_Changeイベントプロシジャに

 Dim c As Range
 If Intersect(Target, Range("C:C,E:E,G:G,I:I,K:K,M:M")) Is Nothing Then Exit Sub
 For Each c In Intersect(Target, Range("C:C,E:E,G:G,I:I,K:K,M:M"))
  Select Case c.Value
  Case ・・・
  Case ・・・
  ・
  ・
  ・
  End Select
 Next

 といった塩梅で作ってあげればよろしいかと思います。。。
 (ROUGE)

 (ROUGE)さま ありがとうございます!!
 複数列を対象に条件式を機能できました!!(tomos)


 何度も申し訳ありません。
 現在、先日こちらでアドバイス頂いて、自分なりに作成中なのですが、

 @別のエクセルにスタッフのスケジュールデータがあります。
 Aそのデータをリンクで【町名+番地】をSheet1に転送します。
 BSheet2のA列に【町名+番地】、B列に【区・(市外の場合は)市町村名】の一覧を作成。
  ※Sheet2のこの一覧は恐らく1500〜2000行くらいは行きそうな気がします。。。

 Sheet1を使いたい書式にする予定でここに、前回まで皆様にアドバイスいただきました
 VLOOKUP関数やhttp://www.excel.studio-kazu.jp/cgi-bin/kazuwiki2.cgi?mycmd=read&mypage=[[20050115131721]]を参考にしてコード表示を入れていこうとやっています。。。

 Sheet1は

     A     B        C       D      …    AH  
 1    
 2     スタッフ  スタッフ    スタッフ   …  スタッフ
 3 時間    区・市町村 区・市町村  区・市町村 …  区・市町村
 4         町名+番地  町名+番地   町名+番地  …  町名+番地
 5 時間  区・市町村  区・市町村  区・市町村 …  区・市町村
 6     町名+番地   町名+番地   町名+番地  …   町名+番地

 A列は時間が表示されていて、
 B4、C6などの「町名+番地」は別エクセル・スケジュールデータから
 転送されるリンク。
 B2、AH5などの「区・市町村」には =VLOOKUP(C4,Sheet2!A1:B1600,2,FALSE)
 をいれて、Sheet2の一覧から区・市町村が表示されるようにしています。

 現在これらを試作で作ってみているのですが、
 (1)別エクセルで町名+番地データを入力しなおすとリンク先の方の
    町名+番地名および区・市町村名はちゃんと変わるのですがSheetのコード表示で設定した
    セルの色に自動的に変わりません。
    指定したセルをダブルクリックしてEnterを押すと変わるのですが。。。

 (2)あとコード表示でセルの色が変わるようにセルの列を指定しているのですが、
      指定する列が多すぎて(?)機能しないようなのです。

 Sheet1のコード表示ですが
 Private Sub Worksheet_Change(ByVal Target As Range)
 '変数宣言
 Dim colr As Integer
 Dim c As Range
 If Intersect(Target, Range("B:B,C:C,D:D,E:E,F:F,G:G,H:H,I:I,J:J,K:K,L:L,M:M,N:N,O:O,P:P,Q:Q,R:R,S:S,T:T,U:U,V:V.W:W,X:X,Y:Y,Z:Z,AA:AA,AB:AB,AC:AC,AD:AD,AE:AE,AF:AF,AG:AG,AH:AH")) Is Nothing Then Exit Sub
 For Each c In Intersect(Target, Range("B:B,C:C,D:D,E:E,F:F,G:G,H:H,I:I,J:J,K:K,L:L,M:M,N:N,O:O,P:P,Q:Q,R:R,S:S,T:T,U:U,V:V.W:W,X:X,Y:Y,Z:Z,AA:AA,AB:AB,AC:AC,AD:AD,AE:AE,AF:AF,AG:AG,AH:AH"))
  Select Case c.Value
                Case "中央区"
                    colr = 3  '
                Case "東区"
                    colr = 5 '々
                Case "博多区"
                    colr = 6  '々
                Case "早良区"
                    colr = 4 '々
                Case "南区"
                    colr = 8 '々
                Case "城南区"
                    colr = 7 '々
                Case "西区"
                    colr = 15  '
                Case "那珂川町"
                    colr = 17 '々
                Case "春日市"
                    colr = 19  '々
                Case "飯塚市"
                    colr = 22 '々
                Case "宇美町"
                    colr = 27 '々
                Case "篠栗町"
                    colr = 44 '々
                Case "志免町"
                    colr = 40 '々
                Case "前原市"
                    colr = 50  '々
                Case "大宰府市"
                    colr = 43 '々
                Case "筑紫野市"
                    colr = 12 '々
                Case "粕屋町"
                    colr = 20 '々
                Case Else
                    colr = xlNone
            End Select
            c.Interior.ColorIndex = colr
    Next c
End Sub

 としているのですがAHまでの指定にするとエラー(?)※デバックが何とか・・・という表示が
 出てできません。。。
 A〜S列くらいの指定にするとセルの色が変わるようですが、指定列が多すぎるからでしょうか?

 長々と書きすぎて意味が分かりにくいかもしれませんが、ご助言いただける方いらっしゃいましたら
 お力を貸してください。よろしくお願いいたします。(TOMOS)

 とりあえず、
 Range("B:B,C:C,D:D,E:E,F:F,G:G,H:H,I:I,J:J,K:K,L:L,M:M,N:N,O:O,P:P,Q:Q,R:R,S:S,T:T,U:U,V:V.W:W,X:X,Y:Y,Z:Z,AA:AA,AB:AB,AC:AC,AD:AD,AE:AE,AF:AF,AG:AG,AH:AH")
 ↓
 Range("B:AH")
 にしたらどうなりますか?
 (ROUGE)

 (ROUGE)さま ありがとうございます!!

 ("B:AH")にしたらB列〜AH列までの指定にできるようになりました。
 あと、(1)の方のリンク先のデータが変わったときのセルの色が自動で変えたい部分は
 変わらないままです。。。これはどうしようもないんでしょうか…(TOMOS)

 Changeイベントで処理している関係上、どうしようもないですね。
 別仕様にする必要があります。
 (ROUGE)

 どうしようもないですか…
 別の方法を考えるか、毎回コツコツセルごとにクリックして色を変えていくしかない…
 ということですね。。。
 困ってしまいました。。。(TOMOS)


 別仕様にすれば大丈夫だと思いますよb
Activateイベントにされてはどうでしょうか?
 (ROUGE)
'----
Private Sub Worksheet_Activate()
    Dim colr As Integer
    Dim c As Range
    For Each c In Range("B1", Range("AH" & Rows.Count).End(xlUp))
        Select Case c.Value
            Case "中央区": colr = 3 '
            Case "東区": colr = 5 '々
            Case "博多区": colr = 6 '々
            Case "早良区": colr = 4 '々
            Case "南区": colr = 8 '々
            Case "城南区": colr = 7 '々
            Case "西区": colr = 15 '
            Case "那珂川町": colr = 17 '々
            Case "春日市": colr = 19 '々
            Case "飯塚市": colr = 22 '々
            Case "宇美町": colr = 27 '々
            Case "篠栗町": colr = 44 '々
            Case "志免町": colr = 40 '々
            Case "前原市": colr = 50 '々
            Case "大宰府市": colr = 43 '々
            Case "筑紫野市": colr = 12 '々
            Case "粕屋町": colr = 20 '々
            Case Else: colr = xlNone
        End Select
        c.Interior.ColorIndex = colr
    Next c
End Sub

 (ROUGE)さま 何度も救いの手をありがとうございます。
 何しろ、上のコード表示の内容の意味も分かってない ど素人でして…
 上の「Activateイベント」というものにして
 まず自分でもう一度時間がかかりそうですがやってみます。
 恐らくそれで「できた!」とはならないと思いますので…
 またそのときは是非宜しくお願いいたします。。。(TOMOS)


 またツマヅイテしまいました。。。
 (ROUGE)さまのアドバイスで
 Sheetのコード表示で条件を満たすセルの色を自動的に変えることに関しては
 別のSheetを一度クリックして、その後にコード表示をしているSheetを再度クリックすると
 カーソルが「砂時計」に変わりしばらくしたら対象のセルの色が変わるようになりました!

 で、このSheetに作成している表が当初と少し変わって
 A〜AH列までだったのをA〜BC列までの表に変更しました。
 そこで(ROUGE)さまからいただいたアドバイスのコード表示を、意味も分からないまま
 自分なりに変更して以下のようにしてみました。

 Private Sub Worksheet_Activate()
    Dim colr As Integer
    Dim c As Range
    For Each c In Range("B1", Range("BC" & Rows.Count).End(xlUp))
        Select Case c.Value
            Case "中央区": colr = 3 '
            Case "東区": colr = 5 '々
            Case "博多区": colr = 6 '々
            Case "早良区": colr = 4 '々
            Case "南区": colr = 8 '々
            Case "城南区": colr = 7 '々
            Case "西区": colr = 15 '
            Case "那珂川町": colr = 17 '々
            Case "春日市": colr = 19 '々
            Case "飯塚市": colr = 22 '々
            Case "宇美町": colr = 27 '々
            Case "篠栗町": colr = 44 '々
            Case "志免町": colr = 40 '々
            Case "前原市": colr = 50 '々
            Case "大宰府市": colr = 43 '々
            Case "筑紫野市": colr = 12 '々
            Case "粕屋町": colr = 20 '々
            Case Else: colr = xlNone
        End Select
        c.Interior.ColorIndex = colr
    Next c
End Sub

 上記の様に変更して作ってみてるのですが、そうすると
 A1〜BC21までのセルは条件を満たすと色が変わるのですが・・・
 A22〜BC38までのセルは色が変わりません。

 これはコード表示に何か足りないものがあるからでしょうか?
 それと、色を変えたいときに一度別Sheetに移り、再度このSheetに戻らないと
 色が変わらないのは、元々そのような仕組みなのでしょうか?

 分からないことばかりで申し訳ないのですがお力を貸してくださる方、宜しくお願いいたします。(TOMOS)

 Range("B1", Range("BC" & Rows.Count).End(xlUp))
 ↓
 Intersect(Me.UsedRange, Range("B:BC"))

 にされてはどうでしょうか?
 (ROUGE)

 (ROUGE)さま 毎回、毎回、本当にありがとうございます!
 できそうです!毎回すみません!(TOMOS) 

コメント返信:

[ 一覧(最新更新順) ]


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