Excel(VBA)で、表から色付きのセルを別シートに貼り付け、管理する方法
表から色付きのセルを別シートで管理する。
下記のマクロでは、表の中から黄色の列の値だけを別シートに貼り付けます。
・表のA列が黄色の列を別シートに貼り付ける。
Sub test1()
Dim Sh1 As Worksheet
Dim Sh2 As Worksheet
Dim LastRow As Long
Dim i As Long
Dim j As Long
j = 2
'以下シート名は自分のシート名に変更すること
Set Sh1 = ThisWorkbook.Sheets("参照元")
Set Sh2 = ThisWorkbook.Sheets("貼り付け先")
'最終行を取得
LastRow = Sh1.Cells(Rows.Count, 1).End(xlUp).Row
'セルをループして黄色だったら、貼り付け先へ転記
For i = 1 To LastRow
'A行が「65535」(黄色)だった場合、別シートにその要素を貼り付ける。
If Sh1.Cells(i, 1).Interior.Color = 65535 Then
Sh1.Range("A" & i & ":F" & i).Copy
Sh2.Range("A" & j).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
j = j + 1
End If
Next i
Set Sh1 = Nothing
Set Sh2 = Nothing
End Sub
参照シート OR 貼り付け先のシートを変えたい
データの参照シートを変えたい場合は、
上記のマクロの「Set Sh1 = ThisWorkbook.Sheets("参照元")」の「参照元」を
自身の参照したいシート先名に変更。
貼り付け先のシートを変えたい場合は、
上記のマクロの「Set Sh2 = ThisWorkbook.Sheets("貼り付け先")」の「貼り付け先」を
自身の貼り付けたいシート先名に変更。
判定する色を変えたい
上記のマクロでは、判定する色を「65535」(黄色)で指定しています。
判定する色を変えたい場合は、特定の色に変更しないといけません。
下記に一部記します。
背景色 | Long型の値 | ColorIndex列挙型の値 | RGB値 |
---|---|---|---|
赤 | 255 | 3 | 255, 0, 0 |
グレー | 12632256 | 16 | 128, 128, 128 |
青 | 16711680 | 5 | 0, 0, 255 |
黄 | 65535 | 6 | 255, 255, 0 |
緑 | 32768 | 4 | 0, 255, 0 |
白 | 16777215 | 2 | 255, 255, 255 |
また上の表にない場合は、下記のコードを実行すると取得できます。
・A1セルの背景色を表示する
Dim myColor As Long
myColor = Range("A1").Interior.Color
MsgBox "A1セルの背景色は " & myColor & " です。"
例えば、A1セルの背景色が赤の場合は、メッセージボックスに「A1セルの背景色は 255 です。」と表示されます。
カスタムカラーで条件を指定したい
カスタムカラーの色を指定するには、少し工夫が必要です。
・A1セルの背景色を表示する
If Sh1.Cells(i, 5).Interior.Color = RGB(128, 0, 128) Then
というのも、上記のようにカスタムカラーのRGB()値を指定するからです。
下記は、RGB値を取得するマクロの一例です。
・A1セルのRGB値を表示する
Dim redValue As Integer
Dim greenValue As Integer
Dim blueValue As Integer
redValue = Range("A1").Interior.Color Mod 256
greenValue = Range("A1").Interior.Color \ 256 Mod 256
blueValue = Range("A1").Interior.Color \ 65536 Mod 256
MsgBox "A1セルの背景色のRGB値は (" & redValue & ", " & greenValue & ", " & blueValue & ") です。"
上記のコードを実行すると、A1セルの背景色のRGB値が表示されます。
判定する列を変えたい
上のマクロでは、判定するセルはA行にしています。
変更したい場合は、「If Sh1.Cells(i, 1).Interior.・・・」の「Cells()」を
下記のように変更しましょう。
B列を判定したい。「If Sh1.Cells(i, 2).Interior.・・・」
C列を判定したい。「If Sh1.Cells(i, 3).Interior.・・・」
D列を判定したい。「If Sh1.Cells(i, 4).Interior.・・・」
コメント
0 件のコメント :
コメントを投稿