2017-03-21 8 views
0

に基づいてグループにボーダーを割り当てるには:その名(たとえば、「当社」)に基づいて、特定のカラムを通るエクセルVBA私は以下のコードを持っていると私は次の操作を実行したい列名とセル値

ゴーその列の値(例 "CompanyA"、 "CompanyB"、 "CompanyC"など)に基づいてボーダーを太い枠線の境界に変更することができます。これは、「会社A」(50行)がボーダーを取得し、「B社」(5行)がボーダーを取得することを意味します。

これはできますか?事前にTy!

Sub DrawBorders() 

Dim rCell As Range 
Dim rRange As Range 

Set rRange = Range("A1", Range("A65536").End(xlUp)) 

For Each rCell In rRange 
    If Not IsEmpty(rCell) And _ 
    Not IsEmpty(rCell.Offset(1, 0)) Then 
     With rCell 
      If .Value <> .Offset(1, 0).Value Then 
       With .EntireRow.Borders(xlEdgeBottom) 
        .LineStyle = xlContinuous 
        .Weight = xlMedium 
        .ColorIndex = xlAutomatic 
       End With 
      End If 
     End With 
    End If 
Next rCell 

End Sub 
+0

各社に異なる境界線を設定しますか?それが名前を持っていれば、ただの国境ですか? –

+0

各社のボーダー –

答えて

0

あなたの要求に合わせてコードを調整しました。これにより、希望の会社タイプの周りにのみ枠線が置かれます。処理しているデータに応じて、IF文にエラー・キャッチを追加する必要があります。

Sub DrawBoarders() 
    Dim rCell As Range 
    Dim rRange As Range 
    Dim Prev As String 
    Dim MyCell As String 
    Prev = "" 

    Set rRange = Range("A2", Range("A65536").End(xlUp)) 
    Dim SpecificCompany(3) As String 'Using 3 companies (Company A, B, & C) 
    'Array of desired company names 
    SpecificCompany(0) = "CompanyA" 
    SpecificCompany(1) = "CompanyB" 
    SpecificCompany(2) = "CompanyC" 


    If IsInArray(Range("A1"), SpecificCompany) Then 'Check 1st row 
      With Range("A1").EntireRow.Borders(xlEdgeTop) 
       .LineStyle = xlContinuous 
       .Weight = xlMedium 
       .ColorIndex = xlAutomatic 
      End With 
    End If 

    For Each rCell In rRange 
     If IsInArray(rCell.Value, SpecificCompany) And rCell.Value <> rCell.Offset(-1, 0).Value Then 
      With rCell.EntireRow.Borders(xlEdgeTop) 
       .LineStyle = xlContinuous 
       .Weight = xlMedium 
       .ColorIndex = xlAutomatic 
      End With 
     End If 
     If Not IsEmpty(rCell) And _ 
     Not IsEmpty(rCell.Offset(1, 0)) Then 
     If rCell.Value <> rCell.Offset(1, 0).Value Then 
      With rCell.EntireRow.Borders(xlEdgeBottom) 
       .LineStyle = xlContinuous 
       .Weight = xlMedium 
       .ColorIndex = xlAutomatic 
      End With 
     End If 
     End If 
    Next rCell 
End Sub 

Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean 
    IsInArray = (UBound(Filter(arr, stringToBeFound)) > -1) 
End Function 
+0

こんにちはBrad、答えはありますが、これは列と名前でボーダーを取得することができます - 会社D、Eから会社A、会社B、会社Cを強調しようとしています、Fなど、上記のコードはすべての企業に適用されます –

+0

なぜボーダーを使用することにしましたか?ハイライトも同様に働くだろうか?企業タイプの開始点と終了点の両方を見つけることは、処理が少なくなります。条件付き書式を使用することもできます。 – Brad

+0

こんにちは、はい、それは私が理想ではないと知っている境界線の要件です –

関連する問題