Есть в книге экселя - выписанные в таблицу координаты объектов. При щелчке на кнопку - имеющийся макрос размещает объекты в нужных координатах.
В строке 8 - есть отметка типа "1_1", "2_1" или "4_5" и т.д. Эта отметка означает, что те объекты, которые имеют похожие отметки - будут объединены в группы с названиями "Группа 1_1", "Группа 4_5" и т.д. Если в этой ячейке пусто или нет другой аналогичной отметки - то группировка для этого объекта не выполняется.
Как макросом сгруппировать объекты по значению в строке 8 ?
Всем доброго вечера. Помогите решить задачу.
Есть в книге экселя - выписанные в таблицу координаты объектов. При щелчке на кнопку - имеющийся макрос размещает объекты в нужных координатах.
В строке 8 - есть отметка типа "1_1", "2_1" или "4_5" и т.д. Эта отметка означает, что те объекты, которые имеют похожие отметки - будут объединены в группы с названиями "Группа 1_1", "Группа 4_5" и т.д. Если в этой ячейке пусто или нет другой аналогичной отметки - то группировка для этого объекта не выполняется.
Set o2 = CreateObject("Scripting.Dictionary") ' будет флагом о том, встречали ли мы такую группу или нет
ReDim shpsArr(1 To 2, 1 To 1) For i = 1 To lastcol - 1
Set shp = ActiveSheet.Shapes.AddShape(msoShapeRectangle, c_x1y1(1, i), c_x1y1(2, i), c_x2y2(1, i), c_x2y2(2, i)) '.Select With shp.Fill .Visible = msoTrue .ForeColor.RGB = Cells(7, i + 1).Interior.Color .Transparency = 0 End With If Group(1, i) <> "" Then key = Group(1, i) If (Not o2.exists(key)) Then k = k + 1 ReDim Preserve shpsArr(1 To 2, 1 To k) o2.Add key, k
shpNames = shpsArr(1, o2(key)) ReDim Preserve shpNames(1 To n) shpNames(n) = shp.Name shpsArr(1, o2(key)) = shpNames End If End If Next i For i = 1 To UBound(shpsArr, 2) shpNames = shpsArr(1, i) If (UBound(shpNames) > 1) Then Set gr = ActiveSheet.Shapes.Range(shpNames).Group gr.Name = shpsArr(2, i) End If Next i End Sub
[/vba]
ВасилисаЛукьянчикова, [vba]
Код
Sub Макрос1() Dim key$, o2 Dim lastcol Dim c_x1y1, c_x2y2, Color1, Group Dim shp
Dim shpNames() As String, shpsArr() 'массив массивов (двумерный), хранилище всех шейпов (имён) Dim k&, n&
Set o2 = CreateObject("Scripting.Dictionary") ' будет флагом о том, встречали ли мы такую группу или нет
ReDim shpsArr(1 To 2, 1 To 1) For i = 1 To lastcol - 1
Set shp = ActiveSheet.Shapes.AddShape(msoShapeRectangle, c_x1y1(1, i), c_x1y1(2, i), c_x2y2(1, i), c_x2y2(2, i)) '.Select With shp.Fill .Visible = msoTrue .ForeColor.RGB = Cells(7, i + 1).Interior.Color .Transparency = 0 End With If Group(1, i) <> "" Then key = Group(1, i) If (Not o2.exists(key)) Then k = k + 1 ReDim Preserve shpsArr(1 To 2, 1 To k) o2.Add key, k
shpNames = shpsArr(1, o2(key)) ReDim Preserve shpNames(1 To n) shpNames(n) = shp.Name shpsArr(1, o2(key)) = shpNames End If End If Next i For i = 1 To UBound(shpsArr, 2) shpNames = shpsArr(1, i) If (UBound(shpNames) > 1) Then Set gr = ActiveSheet.Shapes.Range(shpNames).Group gr.Name = shpsArr(2, i) End If Next i End Sub