2017-05-24 21 views
0

範囲選択に基づいて図形を結合したいと考えています。この写真のように。出来ますか? は、ここで私は画像を添付:vba-excelを使って形を組み合わせるには?

combine picture ここで私はExcelで図形を結合する可能性がない

Sub cohabitationButton_Click() 
    '''''split range 
    Dim s() As String 
    Dim txt As String 
    Dim i As Long 

    s = Split(Selection.Address(False, False), ",")  

    For i = LBound(s) To UBound(s) 
     Dim r As range: Set r = range(s(i)) 
     With r 
      l = .Left - 5 
      t = .Top - 5 
      w = .Width + 10 
      h = .Height + 10 
     End With 
     ShapeName = "ex" 

     With ActiveSheet.Shapes.AddShape(msoShapeFlowchartTerminator, l, t, w, h) 
      .Fill.Visible = msoFalse 
      .Line.Weight = 1 
      .Line.DashStyle = msoLineDash 
      .Line.ForeColor.RGB = BASICCOLOR 
      .Name = ShapeName 
     End With 
    Next i 
End Sub 
+0

あなたはできるグループにそれらを(これは図形の外観を変更しません)が、図形を結合する可能性はありませんExcelの場合(結合すると、重なっている図形内の線が削除され、図形のみが保持されます)。 –

+0

シェイプを結合してExcelにコピーして貼り付けるための外部プログラムが必要です。 Edit Shape - Edit Pointsを実行するだけで、シェイプを個別に変更/追加/ etcすることができます。それは – PatricK

+0

あなたのコメントであなたが言うことを理解してください。下の私の答えを見ましたか?これは別の方法かもしれませんか? – natadecoco

答えて

1

私のコードを添付しました。しかし、選択範囲の周りに結合された罫線を描く方法の例がここにあります。これはあなたのためのオプションかもしれません。私たちはこれで終わるあなたの例の選択にそう


enter image description here

Sub DrawCombinedBordersOnly() 
    '''''split range 
    Dim s() As String 
    Dim txt As String 
    Dim i As Long 

    Dim rngOverlappings As Range 

    'Draw borders around all selected ranges 
    Selection.BorderAround LineStyle:=xlDot, Weight:=xlThin 

    s = Split(Selection.Address(False, False), ",") 

    For i = LBound(s) To UBound(s) 
     Dim r As Range: Set r = Range(s(i)) 
     Dim j As Long 
     For j = LBound(s) To UBound(s) 
      'find overlapping areas 
      If i <> j And Not Application.Intersect(r, Range(s(j))) Is Nothing Then 
       If rngOverlappings Is Nothing Then 
        Set rngOverlappings = Application.Intersect(r, Range(s(j))) 
       Else 
        Set rngOverlappings = Union(rngOverlappings, Application.Intersect(r, Range(s(j)))) 
       End If 
      End If 
     Next j 
    Next i 

    ' remove borders from overlappings 
    If Not rngOverlappings Is Nothing Then 
     rngOverlappings.Borders.LineStyle = xlNone 
    End If 
End Sub 
+0

ありがとうございます。これは役に立つ@Peh – natadecoco

+0

@Manikこれがあなたの問題を解決したなら、あなたはこの答えが解決されたように誰もがこの問題が解決されたことが分かると思うかもしれません。 –

関連する問題