Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2517 / 13645 ツリー ←次へ | 前へ→

【67549】4つ以上の条件付書式のマクロ設定 AAA 10/12/13(月) 8:27 質問[未読]
【67550】Re:4つ以上の条件付書式のマクロ設定 sasa 10/12/13(月) 8:41 回答[未読]
【67553】Re:4つ以上の条件付書式のマクロ設定 AAA 10/12/13(月) 10:38 お礼[未読]
【67551】Re:4つ以上の条件付書式のマクロ設定 Hirofumi 10/12/13(月) 9:42 回答[未読]
【67552】Re:4つ以上の条件付書式のマクロ設定 AAA 10/12/13(月) 10:37 お礼[未読]
【67554】Re:4つ以上の条件付書式のマクロ設定 Hirofumi 10/12/13(月) 10:52 発言[未読]
【67555】Re:4つ以上の条件付書式のマクロ設定 AAA 10/12/13(月) 11:52 質問[未読]
【67556】Re:4つ以上の条件付書式のマクロ設定 Hirofumi 10/12/13(月) 14:34 回答[未読]
【67558】Re:4つ以上の条件付書式のマクロ設定 Hirofumi 10/12/13(月) 14:47 回答[未読]
【67559】Re:4つ以上の条件付書式のマクロ設定 Hirofumi 10/12/13(月) 15:48 回答[未読]
【67562】Re:4つ以上の条件付書式のマクロ設定 AAA 10/12/13(月) 20:07 お礼[未読]
【67563】Re:4つ以上の条件付書式のマクロ設定 Hirofumi 10/12/13(月) 20:39 回答[未読]
【67564】Re:4つ以上の条件付書式のマクロ設定 AAA 10/12/13(月) 20:59 お礼[未読]
【67566】Re:4つ以上の条件付書式のマクロ設定 Hirofumi 10/12/13(月) 21:07 回答[未読]
【67565】Re:4つ以上の条件付書式のマクロ設定 Hirofumi 10/12/13(月) 21:05 回答[未読]
【67560】Re:4つ以上の条件付書式のマクロ設定 AAA 10/12/13(月) 15:56 質問[未読]
【67561】Re:4つ以上の条件付書式のマクロ設定 Hirofumi 10/12/13(月) 16:50 回答[未読]

【67549】4つ以上の条件付書式のマクロ設定
質問  AAA  - 10/12/13(月) 8:27 -

引用なし
パスワード
   いつもお世話になってます。
4つ以上の条件付書式のマクロの設定について教えて下さい。
C列、F列、I列のセルに
「あ」が入力されたら、赤
「い」が入力されたら、青
「う」が入力されたら、黄
「え」が入力されたら、グレー
「お」が入力されたら、緑
「か」が入力されたら、茶
が入ったらC列、F列、I列のセルに色を付けたいのですが、
C列の変更のマクロの式は出来たのですが、F列、I列も同じ指定をしたいのですが、
マクロ初心者なのでどこにどういった式を入れたらよいのか分かりません・・・。
初歩的な質問で申し訳有りませんがよろしくお願いします。


Private Sub Worksheet_Change(ByVal Target As Range)
 Dim myColor As Variant

  If Target.Count <> 1 Then Exit Sub
  If Target.Column <> 3 Then Exit Sub

  Application.EnableEvents = False
  Select Case Target.Value
    Case "白"
      myColor = 3 '赤
    Case "あ"
      myColor = 5 '青
    Case "い"
      myColorl = 6 '黄
    Case "う"
      myColor = 15 'グレー
    Case "え"
      myColor = 43 '緑
    Case "お"
      myColor = 30 '茶
    Case Else
      myColor = xlNone
  End Select
  Cells(Target.Row, 3).Resize(1, 1).Interior.ColorIndex = myColor
  Application.EnableEvents = True
End Sub

後、上記の式で Case "い"
      myColorl = 6 '黄
だけ色が付かないのですが、どうしてでしょうか?
他の式は全部反応します。

よろしくお願いします。

【67550】Re:4つ以上の条件付書式のマクロ設定
回答  sasa  - 10/12/13(月) 8:41 -

引用なし
パスワード
   ▼AAA さん:
>後、上記の式で Case "い"
>      myColorl = 6 '黄
>だけ色が付かないのですが、どうしてでしょうか?
>他の式は全部反応します。

このようなミスを防ぐためにも、モジュールの先頭に
Option Explicit
をいれましょう。

【67551】Re:4つ以上の条件付書式のマクロ設定
回答  Hirofumi  - 10/12/13(月) 9:42 -

引用なし
パスワード
   >後、上記の式で Case "い"
>      myColorl = 6 '黄
>だけ色が付かないのですが、どうしてでしょうか?

      myColor = 6 '黄

別な方法で

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

  Dim i As Long
  Dim vntItem As Variant
  Dim vntColor As Variant
  Dim vntValue As Variant

  With Target
    If .Count <> 1 Then Exit Sub
    If Not (.Column = 3 Or .Column = 6 Or .Column = 9) Then Exit Sub
    vntValue = .Value
  End With

  '"白","あ","い","う","え","お"
  vntItem = Array("白", "あ", "い", "う", "え", "お")
  '"赤"、"青"、"黄"、"グレー"、"緑"、"茶"、"無し"
  vntColor = Array(3, 5, 6, 15, 43, 30, xlNone)

  For i = 0 To UBound(vntItem)
    If vntValue = vntItem(i) Then
      Exit For
    End If
  Next i

  Target.Interior.ColorIndex = vntColor(i)

End Sub

【67552】Re:4つ以上の条件付書式のマクロ設定
お礼  AAA  - 10/12/13(月) 10:37 -

引用なし
パスワード
   ▼Hirofumi さん:

ありがとうございました。
こういうやり方もあるんですね!!勉強になりました。

これを参考にいろいろやってみます。

【67553】Re:4つ以上の条件付書式のマクロ設定
お礼  AAA  - 10/12/13(月) 10:38 -

引用なし
パスワード
   ▼sasa さん:

ご指示ありがとうございました。

【67554】Re:4つ以上の条件付書式のマクロ設定
発言  Hirofumi  - 10/12/13(月) 10:52 -

引用なし
パスワード
   後、今回C、F、I列の3列なので

    If Not (.Column = 3 Or .Column = 6 Or .Column = 9) Then Exit Sub

と書きましたが、列数が多い場合(例えば、C、F、I、L、O列の5列なら)

    '列が15列を超え、若しくは剰余が0以外の場合(詰まり、3の倍数で無いなら)
    If Not (.Column <= 15 And .Column Mod 3 = 0) Then Exit Sub

としても善いかも?

【67555】Re:4つ以上の条件付書式のマクロ設定
質問  AAA  - 10/12/13(月) 11:52 -

引用なし
パスワード
   ▼Hirofumi さん:

列数はC列、F列、I列だけなので一応このままで行こうと思います。
補足の方までありがとうございます。

もう1つ質問なんですが、先程の式で大丈夫だったんですが、
実は、シート2に元となるデータが並んでまして、管理No.で並び替えをして
シート1のフォーマットに、=でリンクさせてます(管理No.が追加される可能性がある為φ2-4.とかφ2-5.とか)


シート1の状態
A    B   C    D    E    F    G    H   I
管理No. 穴径  色  管理No.  穴径   色   管理No.  穴径  色
φ2-1. 2.00  白  φ4-2.  4.40  ピンク  φ10-1.  10.00  黄色
φ2-3. 2.40  緑  φ4-3.  4.80   青   φ10-2.  10.50  緑

     
シート2の状態
 A    B    C
管理No.  穴径   色
φ2-1.   2.00  白
φ2-2.   2.40  ピンク
φ2-3.   2.50  緑


リンクさせているせいなのかシート1に先程の式を追記したところ更新しないと色がつきません。
シート1の方に直接追加すると先程の式は成り立ちます。
シート2を更新すると自動的にシート1も更新できないのでしょうか?

【67556】Re:4つ以上の条件付書式のマクロ設定
回答  Hirofumi  - 10/12/13(月) 14:34 -

引用なし
パスワード
   >リンクさせているせいなのかシート1に先程の式を追記したところ更新しないと色がつきません。
>シート1の方に直接追加すると先程の式は成り立ちます。

更新と言うのが善く解りません?
元のマクロでも同じだと思いますが?
C、F、I列の1つのセルの内容が変化した時(入力、削除等)、其のセルだけしかBackColorが代わら無いのは
当然ですよね?
「Private Sub Worksheet_Change(ByVal Target As Range)」で

  Target.Interior.ColorIndex = vntColor(i)

と成っていますので?
どの様にしたいのでしょうか?

>シート2を更新すると自動的にシート1も更新できないのでしょうか?

場合に因って出来ないかもしれませんが?
基本的には出来そうですね?

但し、ColorIndexの番号の問題が出てきます
例えば、シート2のC列に色が付いているから其処からColorIndexの番号を取得するでは
遅く成って使い物に成らない様な気がします

例えば、シート2のD列にC列の色に対応するColorIndexの番号を入れて有れば
それほど遅く成らら無いかもしれませんが?
この場合、シート2のD列に変更が有った場合、シート1の全てのC、F、I列の色を変更する事も出来ると思いますが?
この場合も処理速度が或る程度掛かるかも解りません?

【67558】Re:4つ以上の条件付書式のマクロ設定
回答  Hirofumi  - 10/12/13(月) 14:47 -

引用なし
パスワード
   後、

>実は、シート2に元となるデータが並んでまして、管理No.で並び替えをして
>シート1のフォーマットに、=でリンクさせてます(管理No.が追加される可能性がある為φ2-4.とかφ2-5.とか)

これも、具体的に何を如何行っているのですか?

【67559】Re:4つ以上の条件付書式のマクロ設定
回答  Hirofumi  - 10/12/13(月) 15:48 -

引用なし
パスワード
   今一状況が把握できませんが?
試しに、こんなのでは?
シート2C列のセルのColorIndexを使いますので
シート2C列は、C列の文字に対応するBackColorにして置いて下さい

シート1のシートモジュールは以下のコードを記入します

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

  Dim i As Long
  Dim vntFound As Variant
  Dim vntValue As Variant
  Dim rngList As Range

  With Target
    If .Count <> 1 Then Exit Sub
    If Not (.Column = 3 Or .Column = 6 Or .Column = 9) Then Exit Sub
    vntValue = .Value
  End With

  With Worksheets("Sheet2")
    Set rngList = .Range(.Cells(2, "C"), .Cells(Rows.Count, "C").End(xlUp))
    vntFound = Application.Match(vntValue, rngList, 0)
    If Not IsError(vntFound) Then
      Target.Interior.ColorIndex _
          = rngList.Item(vntFound, 1).Interior.ColorIndex
    Else
      Target.Interior.ColorIndex = xlNone
    End If
  End With

  Set rngList = Nothing
  
End Sub

シート2のシートモジュールには以下を記述します

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

  Dim i As Long
  Dim j As Long
  Dim lngRows As Long
  Dim vntFound As Variant
  Dim rngList As Range
  
  With Target
    If .Count > 1 Then
      Exit Sub
    End If
    If .Column <> 3 Then
      Exit Sub
    End If
    If IsEmpty(.Value) Then
      Exit Sub
    End If
  End With
  
  With Me
    Set rngList = .Range(.Cells(2, "C"), .Cells(Rows.Count, "C").End(xlUp))
  End With

  With Worksheets("Sheet1")
    lngRows = .UsedRange.Rows.Count
    For i = 3 To 9 Step 3
      For j = 2 To lngRows
        vntFound = Application.Match(.Cells(j, i).Value, rngList, 0)
        If Not IsError(vntFound) Then
          .Cells(j, i).Interior.ColorIndex _
            = rngList.Item(vntFound, 1).Interior.ColorIndex
        Else
          .Cells(j, i).Interior.ColorIndex = xlNone
        End If
      Next j
    Next i
  End With
        
  Set rngList = Nothing
  
End Sub

シート2のC列の値(色名)が変更に成ると
シート1のC、F、I列の色を変更します、因って非常に時間が掛かるかも解りません?

【67560】Re:4つ以上の条件付書式のマクロ設定
質問  AAA  - 10/12/13(月) 15:56 -

引用なし
パスワード
   ▼Hirofumi さん:

1.シート2に以下のデータを追記していきます。
  A    B    C
2 管理No.  穴径  色
3 φ2-1.   2.00  白
4 φ2-2.   2.40  ピンク
5 φ2-3.   2.50  緑


2.シート1に下記の式でC2のデータをリンクさせます。

シート1のA8に=Sheet1!A3
シート1のB8に=Sheet2!B3
シート1のC8に=Sheet2!C3



シート1のA8に=Sheet1!A38
シート1のB8に=Sheet2!B38
シート1のC8に=Sheet2!C38

シート2のA39〜C39以降はD,E,Fの列に反映
シート2のA75〜C75以降はG,H,Iの列に上記の式で反映されていきます。


更新しないと色がつきません。の理由は、
上記の式がシート1に入っているせいなのか不明なのですが、セルの色が変更されなく、そこのセルを1こずつクリックしていったら色が変わる状態なので、
シート2に色が追加、変更されれば自動的にシート1の色名が入っている箇所を更新できないかなと思いまして・・・

分かりにくい文章になって申し訳有りません・・・

【67561】Re:4つ以上の条件付書式のマクロ設定
回答  Hirofumi  - 10/12/13(月) 16:50 -

引用なし
パスワード
   一応、タタキダイとして、コードをUpしましたので
試して下さい

>更新しないと色がつきません。の理由は、
>上記の式がシート1に入っているせいなのか不明なのですが、セルの色が変更されなく、そこのセルを1こずつクリックしていったら色が変わる状態なので、

シート1のC、F、Iが変更されなければマクロは動きませんので当然かと?

【67562】Re:4つ以上の条件付書式のマクロ設定
お礼  AAA  - 10/12/13(月) 20:07 -

引用なし
パスワード
   ▼Hirofumi さん:

シート2C列のセルのColorIndexを使いますので
シート2C列は、C列の文字に対応するBackColorにして置いて下さいの意味としてはシート2のC列にカラーNo.を入れたらよいのですよね?

まだVBAを理解してないのでこの式を解読しながらやってみます。

【67563】Re:4つ以上の条件付書式のマクロ設定
回答  Hirofumi  - 10/12/13(月) 20:39 -

引用なし
パスワード
   ▼AAA さん:
>▼Hirofumi さん:
>
>シート2C列のセルのColorIndexを使いますので
>シート2C列は、C列の文字に対応するBackColorにして置いて下さいの意味としてはシート2のC列にカラーNo.を入れたらよいのですよね?
>
>まだVBAを理解してないのでこの式を解読しながらやってみます。

違います、C列のセルに色名に該当する色を付けて下さいと言う事です
色名も必要なのでそのままにして下さい

【67564】Re:4つ以上の条件付書式のマクロ設定
お礼  AAA  - 10/12/13(月) 20:59 -

引用なし
パスワード
   ▼Hirofumi さん:

色名を記入するんですね!!ありがとうございます。
後、最初に教えて頂いた式は不要ってことですか?

【67565】Re:4つ以上の条件付書式のマクロ設定
回答  Hirofumi  - 10/12/13(月) 21:05 -

引用なし
パスワード
   一応、シート2のシートモジュールに記述するコードの概要を説明して置きます

シート2のC列にのセルの色を変更して、色名を入れる
(此れが、シート2のマクロを実行する引き金に成ります)と
シート1のC列、F列、I列を順に全て見て行って、そのセルの値(色名)を
シート2のC列から探します、もし有った場合、見つけたセルのColorIndexを取得し
シート1のC列、F列、I列の色を変更します、また無い場合はxlNoneに変更します
★シート2のC列に色名を入れるとシート1の全てを変更しますので気を付けて下さい
 時間が掛かると思います

また、シート1のモジュールのコードに就いての概要は、

シート1のC列、F列、I列の色名を変更すると、これが引き金になり
変更した色名をシート2のC列から探し、もし有った場合、そのセルだけその色に
変更します

【67566】Re:4つ以上の条件付書式のマクロ設定
回答  Hirofumi  - 10/12/13(月) 21:07 -

引用なし
パスワード
   ▼AAA さん:
>▼Hirofumi さん:
>
>色名を記入するんですね!!ありがとうございます。
>後、最初に教えて頂いた式は不要ってことですか?

両方とも使えば善いと思いますが?

2517 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free