2016-04-28 83 views
13

我有一些數據正在放入圖表和格式中。有一些業務規則,其中一些數據是「受保護的」,如示例中所示。用「受保護」(或任何其他詞)圖形表示excel時出現的問題是指向X軸底部的圖形。我希望圖表看起來像第二張圖表,但我想避免繪製隱藏的列,因爲我認爲這會混淆我的高級用戶。Excel中的圖表編號在字符串中混合使用

Chart Examples

任何想法或見解是值得讚賞!

+0

它是否必須有文本,或者它可以是空白的? – sous2817

+0

是的,我正在尋找的解決方案理想情況下是在繪製列中的文本。 (或者也許有些文檔證明它不能用列中的文本來完成)。 – KyleUp

+0

「受保護」如何到達那裏?這是一個公式嗎? – sous2817

回答

6

當手動構建圖表:

  1. 選擇數據點
  2. 在格式功能區中,挑選格式選擇
  3. 在「格式化數據點」,選線,並選擇無線。
  4. 選取下一個數據點(對應於2013)。
  5. 在「格式數據點」上,選擇「線」,然後選擇「無線」。

這裏是我的結果...

enter image description here

VBA的小一點,這將生成圖表...

Sub MakeChart() 
Dim cell As Range, mySerRng As Range, mySrcRng As Range 
Dim mySht As Worksheet, myChrt As Chart 
Dim lastRow As Long 

Set mySht = Worksheets("Sheet1") 
lastRow = mySht.Range("A" & mySht.Rows.Count).End(xlUp).Row 

Set mySerRng = mySht.Range(mySht.Cells(1, 2), mySht.Cells(lastRow, 2)) 
Set mySrcRng = mySht.Range(mySht.Cells(1, 1), mySht.Cells(lastRow, 2)) 

Set myChrt = mySht.Shapes.AddChart2(-1, xlLine, mySht.Range("C1").Left, mySht.Range("C1").Top).Chart 
With myChrt 
    .SeriesCollection.Add Source:=mySrcRng, RowCol:=xlColumns, serieslabels:=True, categorylabels:=True, Replace:=True 
    For Each cell In mySerRng 
     If cell.Value = "Protected" Then 
      .SeriesCollection(1).Points(cell.Row - 1).Format.Line.Visible = False 
      .SeriesCollection(1).Points(cell.Row).Format.Line.Visible = False 
     End If 
    Next cell 

End With 
End Sub 

替代方法

構建具有多個系列的散點圖,通過「攻擊」行分離,格式化,因此它們看起來是一個系列...

enter image description here

enter image description here

這有缺點:

  • 可能會讓最終用戶感到困惑
  • 如果分散在「受保護」範圍內的數據很多,則需要很多系列整個
0

儘管我同意@ OldUgly的回答,如果您認爲這可以理解,也可以在數據旁添加另一列。

=IF(ISNUMBER($B2),$B2,"") 

這應該做的伎倆。

+0

這與使用「受保護的」具有相同的問題。使用一個字符串(甚至是一個空字符串)excel將其繪製爲零。我確實玩過這個,並嘗試使用NA()而不是「」。這導致了excel只是插入了前一個點和下一個點之間的界限。對NA()使用隱藏和空單元設置不起作用。它的行爲就好像它被設置爲「用數據線連接數據點」 – KyleUp

+0

如果我聽到您的意見,圖表會爲空字符串填充0,但不會填充真空單元格。如果是這樣的話,你可以做我剛纔提到的,然後選擇你的數據。通過主頁 - >編輯 - >查找和選擇 - >轉到特殊 - >空白查找所有「空白」單元格。然後用Home-> Editing-> Clear-> Clear All清除所有單元格數據/格式。 –

0

我有點內疚,我無法弄清楚大多數這一點,它似乎是這樣一個簡單的前提。我已經提出了一些解決方法,但它肯定可以做一些改進;

我使用VBA函數調用的評估和演示:

Public Function Eval(varRange As Range) 
Dim varArray() As Variant 
varArray = varRange 
Dim R As Long 
Dim C As Long 
For R = 1 To UBound(varArray, 1) 
    For C = 1 To UBound(varArray, 2) 
     If varArray(R, C) = "Protected" Then 
      varArray(R, C) = CVErr(xlErrNA) 
     End If 
    Next C 
Next R 
Eval = varArray 
End Function 

,並具有下列公式

=EVAL(INDIRECT("Sheet1!$B$2:$B$"&1+COUNTA(Sheet1!$B$2:$B$31))) 

這使得該範圍的動態稱爲「表」規定的範圍內,但你可以如果需要,只需使用=EVAL(B2:B6)

在您的圖表上,將系列值範圍編輯爲Sheet1.xlsm!Chart(或者您調用的任何表單),並且您將數據範圍的所有「受保護」值轉換爲空白。唯一的問題是,圖表將繪製兩點之間的界線,無論如何,我不能讓圖表繪製出差距。也許有人比我自己有更好的google-fu可以提出一個解決方案?