2016-04-28 10 views
13

Ich habe einige Daten, die ich in ein Diagramm und Formatierung einlege. Es gibt einige Geschäftsregeln, bei denen einige der Daten wie im Beispiel "Geschützt" sind. Das Problem beim Zeichnen mit dem Wort "Geschützt" (oder einem anderen Wort) ist, dass Graphen am unteren Rand der X-Achse zeigen. Ich möchte, dass das Diagramm wie das zweite Diagramm aussieht, aber ich möchte vermeiden, dass eine versteckte Spalte grafisch dargestellt wird, weil ich denke, dass dies meine Power-User verwirren würde.Diagrammnummern in Excel mit Strings gemischt in

Chart Examples

Irgendwelche Gedanken oder Erkenntnisse zu schätzen!

+0

Muss es Text haben, oder kann es leer sein? – sous2817

+0

Ja, die Lösung, nach der ich suche, hätte idealerweise Text in der Spalte, die grafisch dargestellt wird. (Oder vielleicht eine Dokumentation, die beweist, dass es mit Text in der Spalte nicht möglich ist). – KyleUp

+0

Wie kommt "geschützt" dorthin? Ist es eine Formel? – sous2817

Antwort

6

Wenn manuell das Diagramm Aufbau:

  1. den Datenpunkt auswählen
  2. Auf dem Format Band, Formatauswahl
  3. On "Format Data Point", wählen Sie Zeile, und wählen Sie Keine Linie wählen.
  4. Wählen Sie den nächsten Datenpunkt (entsprechend 2013).
  5. Wählen Sie unter "Datenpunkt formatieren" die Option Linie, und wählen Sie Keine Linie.

Hier sind meine Ergebnisse ...

enter image description here

Ein kleines bisschen VBA, die das Diagramm generieren ...

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 

Alternative Ansatz

Erstellen

ein Streudiagramm mit mehreren Serien, die durch die „anstößigen“ Zeilen getrennt und so formatiert, dass sie erscheinen eine Reihe sein ...

enter image description here

enter image description here

Dies hat Nachteile:

  • Wahrscheinlich eher verwirrend für einen Endbenutzer
  • Benötigt eine Menge von Serien, wenn Sie viele Daten mit "Protected" verstreut haben
  • 0

    Während ich @ OldUglys Antwort stimme, könnten Sie auch einfach eine andere Spalte neben den Daten hinzufügen, wenn Sie denken, dass es verständlich wäre.

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

    Das sollte den Trick tun.

    +0

    Dies hat das gleiche Problem mit "Protected" hat. Mit einer Zeichenkette (auch eine leere Zeichenkette) zeichnet Excel sie bei Null. Ich habe damit gespielt und versucht, NA() anstelle von "" zu verwenden. Dies führte dazu, dass Excel nur die Linie zwischen dem vorherigen und dem nächsten Punkt interpolierte. Die Verwendung der Einstellungen "Versteckt" und "Leere Zelle" mit NA() hatte keine Auswirkungen. Es verhält sich so, als ob es auf "Datenpunkte mit Linie verbinden" eingestellt wäre. – KyleUp

    +0

    Wenn ich Sie richtig verstehe, füllt das Diagramm eine 0 für eine leere Zeichenfolge auf, aber nicht für eine wirklich leere Zelle. Wenn dies der Fall ist, können Sie das tun, was ich erwähnt habe, und dann Ihre Daten auswählen. Finde alle "leeren" Zellen mit Home-> Bearbeiten-> Suchen & Auswählen-> Gehe zu Spezial-> Leerzeichen. Dann löschen Sie alle Zelldaten/Formatierungen mit Home-> Editing-> Clear-> Clear All. –

    0

    Ich bin irgendwie entkernt, dass ich die Mehrheit davon nicht herausfinden konnte, es scheint so eine einfache Voraussetzung.Ich habe eine Art Workaround gemacht, aber es könnte definitiv mit etwas Verfeinerung machen;

    Ich verwende eine VBA-Funktion namens Eval:

    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 
    

    Und einen definierten Bereich ‚Übersicht‘ genannt, die die folgende Formel hat

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

    Dies macht den Bereich dynamisch, aber man konnte Verwenden Sie einfach =EVAL(B2:B6), falls erforderlich.

    Bearbeiten Sie in Ihrem Diagramm den Wertebereich der Reihe Sheet1.xlsm!Chart (oder was auch immer Ihr Blatt genannt wird), und Sie erhalten den Datenbereich mit beliebigen "geschützten" Werten in Leerzeichen konvertiert. Das einzige Ding ist, das Diagramm wird die Linie zwischen den zwei Punkten unabhängig zeichnen, ich kann das Diagramm die Lücke nicht zeichnen lassen. Vielleicht könnte jemand mit einem besseren Google-Fu als ich selbst eine Lösung finden?

    Verwandte Themen