2012-03-28 54 views
4

我試圖製作一個圖表,並將多個列作爲源區域。 基本上,我想選擇特定的列,我跳過一些列,並將它們合併到一個範圍。我設置了一個循環,在那裏創建一個範圍,並將其地址附加到一個字符串中,並用逗號分隔它們。我很確定這是Excel要格式化的方式。如何將多個Range對象合併爲一個,以用作Chart源

但是,我似乎無法創建此字符串的新範圍。

我希望這裏有人能幫助我。

我非常想避免,必須將列複製到新工作表,並將其全部標記爲範圍。

我有以下的代碼,使得所述組合的範圍:

'Loops for each number of sections 
For Z = 1 To Sheet1.txtNoSections 

    'Get gauge to use 
    Section = Workbooks(ThisWorkbook.Name).Worksheets(1).Cells(26 + Z, 6).Value 
    'Sets varibel for distance from root 
    Dist = Workbooks(ThisWorkbook.Name).Worksheets(1).Cells(26 + Z, 3).Value 
    'Get range to use 
    Set ChartRange = ActiveSheet.Range(ActiveCell, ActiveCell.Offset(rc, Section)) 
    RangeString = RangeString & ChartRange.AddressLocal 
    If Z <> 1 Then 
     RangeString = RangeString & "," 
    End If 

Next Z 

我已經然後試圖得到一個新的範圍內這樣的事情,但沒有運氣。

Dim ActualRange As Range 
Set ActualRange = ActiveSheet.Range(RangeString) 

當打印RangeString,它看起來像這樣: $S$2$V$6181$S$2:$X$6181,$S$2:$Z$6181,$S$2:$AB$6181,$S$2:$AD$6181,$S$2:$AF$6181,$S$2:$AH$6181,$S$2:$AJ$6181,$S$2:$AL$6181,$S$2:$AN$6181,$S$2:$AP$6181,$S$2:$AR$6181,$S$2:$AT$6181,$S$2:$AV$6181,$S$2:$AX$6181,$S$2:$AZ$6181,$S$2:$BB$6181,$S$2:$BD$6181,$S$2:$BF$6181,$S$2:$BH$6181,$S$2:$BJ$6181,$S$2:$BL$6181,$S$2:$BN$6181,$S$2:$BP$6181

似乎像工會一樣會做。

+2

你最好porbbably更好地運用[聯盟](http://www.dailydoseofexcel.com/archives/2005/01/16/union-and-intersect/)方法不是連接範圍(其中獲」如果你的範圍以逗號','結尾,你就可以工作) – JMax 2012-03-28 08:57:35

+0

你可以在運行代碼後發佈'RangeString'的樣子嗎?你可以在'Next Z'後面加上'Debug.Print RangeString'並檢查它的值。編輯:好點Jmax :) – 2012-03-28 08:58:01

+0

@JMax,當然我的字符串以逗號結尾。我已經改變了它,但是當我嘗試設置範圍時它仍然失敗。 – Nicolai 2012-03-28 10:06:26

回答

7

正如以上評論所述,處理此問題的最佳方法是使用本機VBA功能,如Union

你可以找到關於如何使用這個多次提到:然而,在Chip Pearson's website

  • vba Express
  • Daily dose of Excel
  • 甚至是 「更好」 的聯盟,請注意你可以回答你自己的問題(它甚至是highly recommended)並接受它。這樣,您就可以與社區分享您的知識,並以您自己的代碼解決問題。
    恕我直言,這將比接受我的答案更好。

+0

我已經回覆了我最終的代碼,我真的不想標記我自己的答案,當你解決我的問題:) – Nicolai 2012-03-28 13:10:26

+0

+1上'聯合':) – 2012-03-28 15:41:39

2

遵循JMax的指導,我結束了使用聯盟。 這是我結束的代碼。 第一次通過循環,我將CombinedRange設置爲我的實際範圍,以及後續運行,I union。

For Z = 1 To Sheet1.txtNoSections 

    'Get gauge to use 
    Section = Workbooks(ThisWorkbook.Name).Worksheets(1).Cells(26 + Z, 6).Value 
    'Get range to use 
    Set ChartRange = ActiveSheet.Range(ActiveCell, ActiveCell.Offset(rc, 0)) 
    Debug.Print "ChartRange(" & Z & "): " & ChartRange.Address 
    If Z = 1 Then 
     Set CombinedRange = ChartRange 
    Else 
     Set CombinedRange = Union(CombinedRange, ChartRange) 
    End If 
    ActiveCell.Offset(0, 5).Activate 

Next Z 
Debug.Print "Combined: " & CombinedRange.Address 
+1

+1發佈您的解決方案:) – 2012-03-28 15:41:54

相關問題