Excel VBA質問箱 IV

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

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


10813 / 13646 ツリー ←次へ | 前へ→

【19769】EXCELのシート間における色の抽出に関して nana 04/11/16(火) 16:53 質問[未読]
【19775】Re:EXCELのシート間における色の抽出に関し... Kein 04/11/16(火) 17:59 回答[未読]
【19780】Re:EXCELのシート間における色の抽出に関し... nana 04/11/16(火) 22:53 発言[未読]
【19782】Re:EXCELのシート間における色の抽出に関し... Kein 04/11/16(火) 23:38 発言[未読]
【19783】Re:EXCELのシート間における色の抽出に関し... Kein 04/11/16(火) 23:41 回答[未読]

【19769】EXCELのシート間における色の抽出に関して
質問  nana  - 04/11/16(火) 16:53 -

引用なし
パスワード
   こんにちは。VBA初心者のものです。どなたかお力を貸して頂ければと思います。
EXCELのシート間における色の抽出に関してですが、


〔シート1〕
    A   B     ←列
1    A   りんご(赤)
2    B   みかん
3    C   なし (青)
4    D   ぶどう
5    E    かき
6    F    キャベツ(緑)
7    G    きゅうり
8    H    とまと



〔シート2〕
    A    B         C    ←列
1    A   埼玉県    なし★←青くなる
2    B   静岡県    みかん
3    C   静岡県    みかん
4    D   埼玉県    キャベツ★←緑になる
6    F    埼玉県    キャベツ(←色がつかない)
7    G    千葉県    キャベツ(←色がつかない)
8    H    山梨県       なし★←青くなる        
9    H    山梨県       なし(←色がつかない)    
10    H    青森県       りんご★←赤くなる    
11    H    青森県       りんご(←色がつかない)
11    H    山梨県    なし★←青くなる
11    H    千葉県    なし(←色がつかない)        



例のようなデータがあってシート1のB列のりんご・なし・キャベツにそれぞれ色がついていて
シート2のC列に同じ文字列のものにはシート1を参照して色をつけ、
さらにA列からC列にも色をつけるマクロを作成したいのですが、
以下のマクロだと★印のところしか色がつかないのです。
同じ文字列の2番目以降は色がつかないのですがどこか間違っているところがあれば指摘をお願いします。
マクロを教えてください。

Sub サンプル()

  Dim Sh As Worksheet
  Dim C As Range
  Dim Ck As Variant
  Dim Col As Long

  Set Sh = Sheets("sheet1")
  For Each C In Sheets("sheet2").Range("B1:B8")
   Col = C.Font.ColorIndex
   Ck = Application.Match(C.Value, Sh.Range("C:C"), 0)
   If Not IsError(Ck) Then
     Sh.Cells(Ck, 1).Font.ColorIndex = Col
     Sh.Cells(Ck, 2).Font.ColorIndex = Col
     Sh.Cells(Ck, 3).Font.ColorIndex = Col
   End If
  Next
  Set Sh = Nothing
End Sub

【19775】Re:EXCELのシート間における色の抽出に関...
回答  Kein  - 04/11/16(火) 17:59 -

引用なし
パスワード
   こんな感じかな ?

Sub Test()
  Dim Sh1 As Worksheet, Sh2 As Worksheet
  Dim C As Range, FR As Range
  Dim Ad As String

  Set Sh1 = Worksheets("Sheet1")
  Set Sh2 = Worksheets("Sheet2")
  For Each C In Sh1.Range("B1", Sh1.Range("B65536").End(xlUp))
   If C.Interior.ColorIndex = xlColorIndexNone Then GoTo NLine
   Set FR = Sh2.Range("C:C").Find(C.Value, , xlValues)
   If FR Is Nothing Then GoTo NLine
   Ad = FR.Address
   Do
     Set FR = Sh2.Range("C:C").FindNext(FR)
     FR.Interior.ColorIndex = C.Interior.ColorIndex
   Loop Until FR.Address = Ad
   Set FR = Nothing
NLine:
  Next
  Set Sh1 = Nothing: Set Sh2 = Nothing
End Sub   

【19780】Re:EXCELのシート間における色の抽出に関...
発言  nana  - 04/11/16(火) 22:53 -

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

ご丁寧な解答有り難うございます。
初心者の私には少し難しいのですが*_*

For Each C In Sh1.Range("B1", Sh1.Range("B65536").End(xlUp))
>   If C.Interior.ColorIndex = xlColorIndexNone Then GoTo NLine
>   Set FR = Sh2.Range("C:C").Find(C.Value, , xlValues)

この文の意味を教えて頂けますか
よろしくお願いします

【19782】Re:EXCELのシート間における色の抽出に関...
発言  Kein  - 04/11/16(火) 23:38 -

引用なし
パスワード
   For Each C In Sh1.Range("B1", Sh1.Range("B65536").End(xlUp))
'シート1のB1から入力されている最終行までをループ

If C.Interior.ColorIndex = xlColorIndexNone Then GoTo NLine
'もしセルに色が着いていなければ、何もせず次のセルへ移動。
'GoTo ラベル と書くと、ラベルのあるところへ制御が移ります。

Set FR = Sh2.Range("C:C").Find(C.Value, , xlValues)
'シート2のC列で、ループ中のセルの値を検索する。

という意味です。


【19783】Re:EXCELのシート間における色の抽出に関...
回答  Kein  - 04/11/16(火) 23:41 -

引用なし
パスワード
   あー・・よく見ると、セルの色でなく文字の色なんですね・・。
それだとこうなります。

Sub Test()
  Dim Sh1 As Worksheet, Sh2 As Worksheet
  Dim C As Range, FR As Range
  Dim Ad As String

  Set Sh1 = Worksheets("Sheet1")
  Set Sh2 = Worksheets("Sheet2")
  For Each C In Sh1.Range("B1", Sh1.Range("B65536").End(xlUp))
   If C.Font.ColorIndex = xlColorIndexAutoMatic Then GoTo NLine
   Set FR = Sh2.Range("C:C").Find(C.Value, , xlValues)
   If FR Is Nothing Then GoTo NLine
   Ad = FR.Address
   Do
     Set FR = Sh2.Range("C:C").FindNext(FR)
     FR.Font.ColorIndex = C.Font.ColorIndex
   Loop Until FR.Address = Ad
   Set FR = Nothing
NLine:
  Next
  Set Sh1 = Nothing: Set Sh2 = Nothing
End Sub

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