2016-04-28 12 views
13

mam pewne dane, które Kładę na wykresie i formatowania. Istnieje kilka reguł biznesowych, w których niektóre dane są "chronione", tak jak w przykładzie. Kwestia, kiedy wykresów ze słowem „Protected” (lub jakiegokolwiek innego słowa) Excel wykresy, które wskazują na dole na osi x. Chciałbym wykres wyglądać jak 2nd wykresie, ale chciałbym uniknąć wykresów off ukrytą kolumnę, ponieważ myślę, że to mylić moich użytkowników.Liczby Wykres w Excelu z ciągami mieszane

Chart Examples

Wszelkie myśli lub spostrzeżenia są doceniane!

+0

Czy musi zawierać tekst, czy może być pusty? – sous2817

+0

Tak, rozwiązanie, którego szukam, byłoby idealnie mieć tekst w kolumnie, która jest wykreślana. (A może trochę dokumentacji potwierdzającej, że nie da się tego zrobić z tekstem w kolumnie). – KyleUp

+0

Jak się "chroni"? Czy to jest formuła? – sous2817

Odpowiedz

6

Kiedy ręcznie budowania wykresu:

  1. wybrać punkt danych
  2. od formatu wstążce odebrać wybór formatu
  3. W formacie "punkt danych", wybierz linię i wybierz No Line.
  4. Pick następny punkt danych (odpowiadający 2013).
  5. W "Format punkt danych", wybierz linię i wybierz No Line.

Oto moje wyniki ...

enter image description here

mały kawałek VBA, który będzie generował wykres ...

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 

Alternatywne podejście

zbudować wykres punktowy z wielu serii, rozdzielony przez „przestępczych” wierszy i sformatowane tak, że wydaje się być jedna seria ...

enter image description here

enter image description here

Ma wady:

  • Prawdopodobnie bardziej zagmatwany dla użytkownika końcowego
  • Wymaga dużej serii, jeśli masz dużo danych z "Chronionymi" rozproszonymi przez cały czas:
0

Podczas gdy zgadzam się z odpowiedzią @ OldUgly, możesz również dodać kolejną kolumnę obok danych, jeśli uważasz, że byłoby to zrozumiałe.

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

To powinno załatwić sprawę.

+0

To ma ten sam problem z wykorzystaniem "Protected" ma. Użycie łańcucha (nawet pustego łańcucha) excel wyświetla go na zero. Zrobiłem z tym trochę i próbowałem używać NA() zamiast "". Doprowadziło to do Excela po prostu interpolując linię między poprzednim i następnym punktem. Użycie ustawienia Ukryta i pusta komórka z NA() nie przyniosło efektu. Działa tak, jakby był ustawiony na "Połącz punkty danych z linią" – KyleUp

+0

Jeśli dobrze cię słyszysz, wykres wypełnia 0 dla pustego ciągu, ale nie dla prawdziwie pustej komórki. W takim przypadku możesz zrobić to, o czym wspomniałem, a następnie wybrać dane. Znajdź wszystkie "puste" komórki za pomocą Home-> Editing-> Find & Select-> Go To Special-> Blank. Następnie usuń wszystkie dane/formatowanie komórek za pomocą Home-> Editing-> Clear-> Clear All. –

0

mam niby wypatroszone, że nie mogę zrozumieć większość tego na zewnątrz, wydaje się takim prostym założeniu.Zrobiłem trochę obejścia, ale na pewno można to zrobić przy odrobinie wyrafinowania;

używam funkcji VBA o nazwie 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 

oraz określony zakres o nazwie „Wykres”, która ma następujący wzór

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

To sprawia, że ​​zakres dynamiki, ale można po prostu użyj =EVAL(B2:B6), jeśli zajdzie taka potrzeba.

Zmodyfikuj zakres wartości serii na wykresie na Sheet1.xlsm!Chart (lub bez względu na nazwę arkusza) i uzyskasz zakres danych z dowolnymi wartościami "chronionymi" przekonwertowanymi na puste miejsca. Jedyną rzeczą jest to, że wykres wykreśli linię między dwoma punktami, niezależnie od tego, nie będę w stanie wykreślić wykresu luki. Może ktoś z lepszym google-fu niż ja może wymyślić rozwiązanie?