Alba Ra 0 Junior Poster in Training


I'm still trying to work out the same problem: how to process data from an Excel sheet (above all sort through it but in groups; will explain further down) to use in a Cluster Chart without storing it as data in an Excel sheet.

The problem at hand:
I have a table somewhat like this...

A             B        E   K   Y
4   Group One     Green    5   3   3
5                 Yellow   3   7   4
6                 Blue     7   6   2
7                 Grey     9   1   8
8   Group Two     High     1   5   1
9                 Low      2   6   6
10  Group Three   Small    5   1   2
11                Large    1   1   5

I left out the rows and columns that contain data irrelevant for the chart (like rows 1 to 3, columns C, D, F to J, et).

What I need to do is create (in this example) three cluster charts, one with the ranges A4:B11;E4:E11, the second with A4:B11;K4:K11 and the third with A4:B11;Y4:Y11. Data has to be sorted for each column, from row 4 to 7, from 8 to 9 and from 10 to 11, but has to appear in the same chart.

The data for the first would have to sorted like that:

A             B        E
4   Group One     Grey     9
5                 Blue     7
6                 Green    5
7                 Yellow   3
8   Group Two     Low      2
9                 High     1
10  Group Three   Small    5
11                Large    1

One of the reasons that I don't want to put the data in another range, sort it there and use that for the chart is that I have to create many charts, and I literally mean many.

I searched to internet, only to find merely half-solution like creating charts with a macro and attributing a range to Chart.SetSourceData but how to sort that range first (in those three group^s described above) I haven't figured out yet. (See my Excel VBA: Array to Range (for SetSourceData) thread.)
Or I tried to apply an SQL statement but couldn't figure how to achieve that. (See my SQL Query within Excel thread.)

Additionally I don't get neither the Sort method to work (naturally all examples imply the use on an actual range on a sheet and not a stored range collection. But the original datasheet may not be sorted!

I tried using Sort like this:

Dim rdt As Range
Dim r1 As Range
Dim myColl As Range
Set rdt = Range("B4:B30")
Set r1 = Range("G4:G30")
Set myColl = Union(rdt, r1)
myColl.Sort Key1:=[B]X[/B], Order1:=xlDescending, Key2:=[B]Y[/B], Order2:=xlAscending

But I don't know how to define the Key.

I also tried sorting through the range by using a function. It doesn't work either:

Public Function TriTableau(MyVar())
    Dim i As Integer
    Dim j As Integer
    Dim tempA
    Dim tempB
    For i = 1 To 26
        For j = 2 To 27
            If MyVar(i, 2) < MyVar(j, 2) Then
                tempA = MyVar(i, 1)
                tempB = MyVar(i, 2)
                MyVar(i, 1) = MyVar(j, 1)
                MyVar(i, 2) = MyVar(j, 2)
                MyVar(j, 1) = tempA
                MyVar(j, 2) = tempB
            End If
        Next j
    Next i
    TriTableau = MyVar
End Function

Which is adapted from a French book by Mikaël Bidault, Excel & VBA XP, published 2005.

Again, it won't work, neither on the stored range collection itself nor on an array created from the range.

And before you ask: I tried LINQ as well, the Visual Basic Editor has right from the first step a problem, when creating the query like this Dim evensQuery = From num In numbers Order By num Select num the editor stops at "=" expecting the end of the instruction.

As I'm trying to solve the problem for two days now, I'd really appreciate any help you could offer.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.