2017-05-25 28 views
0

シート内の列から値と条件付き書式をコピーしてwsHHに貼り付けようとしています。ただし、次のコードは2番目のシートに書式設定をコピーしません。すべての値は通常貼り付けられますが、書式設定は行われません。私は条件付きではないwsHRに書式を追加しました。条件付き書式が貼り付けられることを確認する具体的な方法はありますか?VBA:.PasteSpecialは条件付き書式設定を貼り付けません

全て wsHRからの値をに貼り付けられているので、私は、第二シート、 wsHHに同じ条件付き書式設定規則を使用することができない
Private Sub CommandButton1_Click() 


'Set variables 
Dim LastRow As Long 
Dim wsHR As Worksheet 
Dim wsHH As Worksheet 
Dim y As Integer 

'Set row value 
y = 4 

'Set heavy chain raw data worksheet 
Set wsHR = ThisWorkbook.Worksheets(4) 
'Set heavy chain hits worksheet 
Set wsHH = ThisWorkbook.Worksheets(6) 

'Optimizes Speed 
Application.ScreenUpdating = False 
Application.EnableEvents = False 
Application.Calculation = xlCalculationManual 

'Finds last row 
With wsHR 
    LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row 
End With 

'Iterates through rows in column A, and copies the row into proper sheet depending on "X" in PBS/KREBS 
For i = 4 To LastRow 
    'Checks for "X" in PBS 
    If VarType(wsHR.Range("AD" & i)) = 8 Then 
     If wsHR.Range("AD" & i).Value = "X" Or wsHR.Range("AE" & i).Value = "X" Then 
      With wsHH 
       wsHR.Range("A" & i).Copy 
       .Range("A" & y).PasteSpecial Paste:=xlPasteFormats 
       .Range("A" & y).PasteSpecial Paste:=xlPasteValues 
       'Range before PBS/KREBS 
       .Range("B" & y & ":AC" & y).Value = wsHR.Range("B" & i & ":AC" & i).Value 
       'Adds space to keep formulas for PBS/KREBS 
       'Range after PBS/KREBS 
       .Range("AG" & y & ":AW" & y).Value = wsHR.Range("AG" & i & ":AW" & i).Value 
      End With 
      y = y + 1 
     End If 
    End If 
Next i 

'Message Box when tasks are completed 
MsgBox "Complete" 

'Reset Macro Optimization Settings 
Application.EnableEvents = True 
Application.Calculation = xlCalculationAutomatic 
Application.ScreenUpdating = True 


End Sub 

- 条件付き書式は、重複に基づいています。

+0

したがって、wsHRの条件に基づいてwsHHで条件付き書式を設定しますか? – OldUgly

+0

@OldUgly私はもともと、条件付き書式の情報を実現しない条件付き書式のセルから書式をコピーしようとしましたが、別々に格納されていました。周りを見回した後、私は解決策に出てきました。答えは以下の通りです。 – MTJ

+0

あなたはそこに着く方法を見つけてうれしいです。 – OldUgly

答えて

0

フォーマットを取得するための回避策が見つかりました。以前は、VBAで条件付き書式設定から内部色にアクセスすることはできませんでしたが、余分な作業(see here)はほとんどありませんでした。しかし、Excel 2010の時点で、これが変更されました(see here)。私はExcel 2013を使用しているので、.DisplayFormatを使用して、フォーマットに関係なく内装の色を見つけることができます(see here)。これを使用する

、私は変更されません:これまで

With wsHH 
    wsHR.Range("A" & i).Copy 
    .Range("A" & y).PasteSpecial Paste:=xlPasteFormats 
    .Range("A" & y).PasteSpecial Paste:=xlPasteValues 
    'Range before PBS/KREBS 
    .Range("B" & y & ":AC" & y).Value = wsHR.Range("B" & i & ":AC" & i).Value 
    'Adds space to keep formulas for PBS/KREBS 
    'Range after PBS/KREBS 
    .Range("AG" & y & ":AW" & y).Value = wsHR.Range("AG" & i & ":AW" & i).Value 
End With 

を:

With wsHH 
    'Range before PBS/KREBS 
    .Range("A" & y & ":AC" & y).Value = wsHR.Range("A" & i & ":AC" & i).Value 
    'Adds space to keep formulas for PBS/KREBS 
    'Applying background CF color to new sheet 
    If wsHR.Range("A" & i).DisplayFormat.Interior.ColorIndex > 0 Then 
    .Range("A" & y).Interior.ColorIndex = 3 
    End If 
    'Range after PBS/KREBS 
    .Range("AG" & y & ":AW" & y).Value = wsHR.Range("AG" & i & ":AW" & i).Value 
End With 

私はもはや値をコピーして貼り付けています。代わりに、私は.Valueを使用して値を設定します。これは、行の他のセルの値と同じように設定し、If wsHR.Range("A" & i).DisplayFormat.Interior.ColorIndex > 0 Thenの結果を使用して2番目のシートのセルをフォーマットする必要があるかどうかを判断します。