带有字符串的Excel中的图表编号

时间:2016-04-28 12:44:29

标签: excel excel-charts

我有一些数据,我将其放入图表和格式。有一些业务规则,其中一些数据是“受保护的”,如示例中所示。使用“受保护”(或任何其他单词)excel这一单词绘制图形时出现的问题是指向X轴底部的图形。我希望图表看起来像第二张图表,但我想避免绘制一个隐藏的列,因为我认为它会让我的高级用户感到困惑。

Chart Examples

感谢任何想法或见解!

3 个答案:

答案 0 :(得分:6)

手动构建图表时:

  1. 选择数据点
  2. 在“格式”功能区上,选择“格式选择”
  3. 在“格式数据点”上,选择“线”,然后选择“无线”。
  4. 选择下一个数据点(对应于2013年)。
  5. 在“格式数据点”上,选择“线”,然后选择“无线”。
  6. 以下是我的结果......

    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

    这有缺点:

    • 最终用户可能更容易混淆
    • 如果您有大量数据并且“受保护”分散在
    • ,则需要很多系列

答案 1 :(得分:0)

虽然我同意@ OldUgly的答案,但如果您认为可以理解,您还可以在数据旁边添加另一列。

var app = angular.module("app", []);
app.controller('ctrl', ['$scope','$http', 'appSettings', function ($scope,$http,
                                                                             appSettings) 
{       
    $scope.CountryList = [];
    $http.post(appSettings.Settings.CountriesUrl).then(function(a) {
        $scope.CountryList = a.data; 
    });

}]);

这应该可以解决问题。

答案 2 :(得分:0)

我有点内疚,我无法解决大部分问题,这似乎是一个简单的前提。我已经做了一些解决方法,但它肯定可以做一些改进;

我正在使用名为Eval的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

一个名为' Chart'的定义范围具有以下公式

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

这使得范围变得动态,但如果需要,您可以使用=EVAL(B2:B6)

在您的图表上,将系列值范围编辑为Sheet1.xlsm!Chart(或调用您的工作表),并获得任何"受保护"的数据范围。值转换为空格。唯一的一点是,图表将绘制两点之间的线,无论如何,我无法使图表绘制差距。也许有一个比我更好的google-fu的人能想出一个解决方案吗?