Getting text and grid at a 45 degree angle

C

clemsongirl

I'm trying to create an affordance structure matrix (if anyone actually knows
what that is!). It has a regular grid and then a grid above it, rotated 45
degrees. I know how to rotate the text, but that only gives me the grid lines
for half of the grid. When I change the grid lines to diagonal, I can't put
marks in all of the squares. Can you do what I want in Excel or do I have to
use a drawing program?
 
A

Andy Pope

Hi,

It may be possible to draw the gridlines and markers using additional series
plotted as xy scatter chart.
If you need more help can you post a link to an example of one of these
chart styles?

Cheers
Andy
 
A

Andy Pope

Thanks for that link Jon.

So it should be possible, but not easy, to create those lines and
markers using a fistful of additional xy series.

Cheers
Andy
 
P

Peter T

Maybe draw diagonal lines over cells if(?) the idea is something along the
lines of putting some symbols in the grid. Then use the Camara method (copy
range, Shift-Edit, Paste picture link), to place the diamond cell grid over
the chart or some other range, positioned as needs.

A little macro to draw the lines -
In a new sheet, for testing, experiment with rTopLeft, 'wide', row/column
heights, and some appropriate Font

Sub DiamondRoof()
Dim i As Long, j As Long, cnt As Long
Dim wide As Long
Dim L2 As Double, T2 As Double
Dim rTopLeft As Range, c1 As Range, c2 As Range
Dim shps As Shapes, shLine As Shape

'uncomment for testing
' ActiveSheet.Lines.Delete
' ActiveSheet.GroupObjects.Delete

Set rTopLeft = Range("B2") '<< CHange, where to put it
wide = 9 '<< Change, how big

Set shps = ActiveSheet.Shapes

With rTopLeft

With .Resize(wide + 1, wide * 2 + 1)
.Borders.LineStyle = xlNone
.Interior.ColorIndex = xlAutomatic ' remove gridlines
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.ColumnWidth = 2.38 ' << adjust
.RowHeight = 17.25 ' << adjust
End With

For i = 1 To wide + 1

' up to right line
Set c1 = .Cells(wide + 2, i * 2 - 1)
Set c2 = .Cells(i, wide + i)
With c2
L2 = .Left + .Width / 2
T2 = .Top + .Height / 2
End With
With c1
Set shLine = shps.AddLine(.Left, .Top, L2, T2)
End With

' down to right line
Set c1 = .Cells(wide + 2, i * 2)
Set c2 = .Cells(wide + 2 - i, i)
With c2
L2 = .Left + .Width / 2
T2 = .Top + .Height / 2
End With
With c1
Set shLine = shps.AddLine(.Left, .Top, L2, T2)
End With
Next

Set c1 = .Cells(wide + 2, 1)
Set c2 = .Cells(wide + 2, wide * 2 + 2)

With c2
L2 = .Left
T2 = .Top
End With

' bottom line
With c1
Set shLine = shps.AddLine(.Left, .Top, L2, T2)
End With

End With


ReDim arr(1 To wide * 2 + 3)
cnt = shps.Count
j = 0
For i = cnt - (wide * 2 + 3) + 1 To cnt
j = j + 1
arr(j) = i
Next

With shps.Range(arr)
.Line.ForeColor.SchemeColor = 7 + 16
' any other formats
.Group
End With

End Sub

Regards,
Peter T
 
J

Jon Peltier

Keep in mind the OP is probably using "chart" to refer to a tabular data
range. This kind of display is more suited to a worksheet solution, with
some embedded graphics.

(Yes, I've tried to create this kind of display in Excel, and no, I don't
have anything to share.)

- Jon
-------
Jon Peltier, Microsoft Excel MVP
Tutorials and Custom Solutions
Peltier Technical Services, Inc. - http://PeltierTech.com
_______


Peter T said:
Maybe draw diagonal lines over cells if(?) the idea is something along the
lines of putting some symbols in the grid. Then use the Camara method
(copy
range, Shift-Edit, Paste picture link), to place the diamond cell grid
over
the chart or some other range, positioned as needs.

A little macro to draw the lines -
In a new sheet, for testing, experiment with rTopLeft, 'wide', row/column
heights, and some appropriate Font

Sub DiamondRoof()
Dim i As Long, j As Long, cnt As Long
Dim wide As Long
Dim L2 As Double, T2 As Double
Dim rTopLeft As Range, c1 As Range, c2 As Range
Dim shps As Shapes, shLine As Shape

'uncomment for testing
' ActiveSheet.Lines.Delete
' ActiveSheet.GroupObjects.Delete

Set rTopLeft = Range("B2") '<< CHange, where to put it
wide = 9 '<< Change, how big

Set shps = ActiveSheet.Shapes

With rTopLeft

With .Resize(wide + 1, wide * 2 + 1)
.Borders.LineStyle = xlNone
.Interior.ColorIndex = xlAutomatic ' remove gridlines
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.ColumnWidth = 2.38 ' << adjust
.RowHeight = 17.25 ' << adjust
End With

For i = 1 To wide + 1

' up to right line
Set c1 = .Cells(wide + 2, i * 2 - 1)
Set c2 = .Cells(i, wide + i)
With c2
L2 = .Left + .Width / 2
T2 = .Top + .Height / 2
End With
With c1
Set shLine = shps.AddLine(.Left, .Top, L2, T2)
End With

' down to right line
Set c1 = .Cells(wide + 2, i * 2)
Set c2 = .Cells(wide + 2 - i, i)
With c2
L2 = .Left + .Width / 2
T2 = .Top + .Height / 2
End With
With c1
Set shLine = shps.AddLine(.Left, .Top, L2, T2)
End With
Next

Set c1 = .Cells(wide + 2, 1)
Set c2 = .Cells(wide + 2, wide * 2 + 2)

With c2
L2 = .Left
T2 = .Top
End With

' bottom line
With c1
Set shLine = shps.AddLine(.Left, .Top, L2, T2)
End With

End With


ReDim arr(1 To wide * 2 + 3)
cnt = shps.Count
j = 0
For i = cnt - (wide * 2 + 3) + 1 To cnt
j = j + 1
arr(j) = i
Next

With shps.Range(arr)
.Line.ForeColor.SchemeColor = 7 + 16
' any other formats
.Group
End With

End Sub

Regards,
Peter T
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top