Board logo

標題: [發問] 如何在 Excel 的圖表中將無資料日期不顯示 [打印本頁]

作者: saleen    時間: 2013-10-29 18:08     標題: 如何在 Excel 的圖表中將無資料日期不顯示

本帖最後由 saleen 於 2013-10-29 18:11 編輯


論壇不知道為什麼不能上傳圖片

小妹想請問的是
像圖中紅圈的部份
因為是六日所以是沒有資料的
可是 Excel 的圖表卻會自行補上沒有資料的日期導致像圖中那樣的情況

有什麼辦法可以跳過沒資料的日期不要顯示嗎 ?
我試過用文字格式不要用日期 , 但這樣圖會變成全部擠到最左邊不知道什麼原因

還請各位大大救救小妹 ><
作者: c_c_lai    時間: 2013-10-29 18:47

回復 1# saleen
妳將 Excel 檔案壓縮成 .rar 便可以使用附件上傳。
作者: Hsieh    時間: 2013-10-30 07:57

回復 1# saleen
圖表會忠實呈現資料,可利用篩選排除不想顯示的資料。
作者: saleen    時間: 2013-11-1 14:05

回復 2# c_c_lai

麻煩 Lai 大幫小妹看看 ><
而且小妹自己寫的巨集也跑得不正常
upd 那段都不會接在 update 後面跑...
不知道哪裡寫錯了
[attach]16537[/attach]
作者: c_c_lai    時間: 2013-11-1 16:20

回復 4# saleen
問題出在妳圖表的 "選取資料(E)" ->  編輯數列 -> 數列值(Y) -> "=工作表1!$C$2:$C$67"
是否正確設定?
我觀察到妳的每一組選取資料之數列值範圍都類似為 "=(工作表1!$C:$C,工作表1!$C$1)" ????,
請將它們都修正為其相對應之確實數列值,例如: "=工作表1!$C$2:$C$67"。
我原本想進入一一修正,但是卻無能為力 (開啟檔案後等了將近十來分鐘都還在忙碌中,大概
是在處理圖表吧?)
作者: c_c_lai    時間: 2013-11-1 18:35

回復 4# saleen
是不是妳的需求?
[attach]16546[/attach]
我將妳的程式碼加入了資料座標值值的動態異動,
只要資料變動,它於執行 upd() 時會同時修正。
  1. Private Sub Workbook_Open()
  2.      Call updateDate     ' 程式一啟始,便去自動執行 updateDate     
  3.     newHour = Hour(Now())
  4.     newMinute = Minute(Now())
  5.     newSecond = Second(Now()) + 20
  6.     waittime = TimeSerial(newHour, newMinute, newSecond)
  7.     Application.Wait waittime     '   稍待 20 秒後執行 upd()
  8.     Call upd
  9. End Sub

  10. Private Sub Workbook_BeforeClose(Cancel As Boolean)
  11.     Me.Save
  12. End Sub

  13. Sub updateDate()
  14.     Dim Rng As Range

  15.     With 工作表1
  16.         If .[A2] <> Date Then
  17.             '  .Range("A2:H2").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
  18.             .Range("A2:H2").Insert Shift:=xlShiftDown
  19.             .[A2] = Date
  20.         End If
  21.     End With
  22. End Sub

  23. Sub upd()
  24.     Dim Rng As Range
  25.    
  26.     With 工作表1
  27.         Set Rng = .[B2].Resize(1, 5)
  28.         
  29.         If .[A2] = Date Then
  30.             '  因為原指定的 J44 會因資料之行數增減而有所變動。
  31.             Rng(1) = "=XQNET|Quote!'TSEX5.TW-StockValueRatio'"
  32.             Rng(2) = "=XQNET|Quote!'TSEX5.TW-PriceChangeRatio'"
  33.             Rng(3) = "=XQNET|Quote!'TSEX8.TW-StockValueRatio'"
  34.             Rng(4) = "=XQNET|Quote!'TSEX8.TW-PriceChangeRatio'"
  35.             Rng(5) = "=100-B2-D2"
  36.             Rng.Value = Rng.Value              '  將公式以欄值取代
  37.         End If
  38.     End With
  39.    
  40.     reDraw       '  重新繪製圖表座標值
  41. End Sub

  42. Sub reDraw()
  43.     Dim shp As Integer, EndKBarRow As Long
  44.    
  45.     With 工作表1
  46.         EndKBarRow = .Range("B" & Sheets("工作表1").Rows.Count).End(xlUp).Row
  47.         shp = 0
  48.         For Each oShape In .Shapes
  49.             If oShape.Type = 3 Then            '  既有的統計圖表
  50.                 oShape.Select
  51.                 shp = shp + 1
  52.                  
  53.                 With ActiveChart
  54.                     .SetSourceData Source:=IIf(shp = 1, Range("工作表1!$A$1:工作表1!$A$" & CStr(EndKBarRow) & ", 工作表1!$B$1:工作表1!$B$" & CStr(EndKBarRow)), _
  55.                                            IIf(shp = 2, Range("工作表1!$A$1:工作表1!$A$" & CStr(EndKBarRow) & ", 工作表1!$C$1:工作表1!$C$" & CStr(EndKBarRow)), _
  56.                                            IIf(shp = 3, Range("工作表1!$A$1:工作表1!$A$" & CStr(EndKBarRow) & ", 工作表1!$D$1:工作表1!$D$" & CStr(EndKBarRow)), _
  57.                                                         Range("工作表1!$A$1:工作表1!$A$" & CStr(EndKBarRow) & ", 工作表1!$E$1:工作表1!$E$" & CStr(EndKBarRow)))))
  58.                     With .Axes(xlCategory)
  59.                         .CategoryType = xlTimeScale
  60.                         .MajorUnit = 1
  61.                         .MajorUnitScale = xlDays
  62.                         .MinorUnit = 1
  63.                         .MinorUnitScale = xlDays
  64.                     End With
  65.                 End With
  66.             End If
  67.         Next
  68.         .[A1].Select
  69.     End With
  70. End Sub
複製代碼

作者: ML089    時間: 2013-11-2 20:17

回復 4# saleen


    請問開啟檔案時會出現,無法執行 XQNET.EXE,這是要安裝什麼程式
作者: c_c_lai    時間: 2013-11-3 06:45

回復  saleen


    請問開啟檔案時會出現,無法執行 XQNET.EXE,這是要安裝什麼程式
ML089 發表於 2013-11-2 20:17

當第一次開啟含有 DDE 連結的 Excel 檔案時,其步驟如下:
1.  如你目前之案例,首先將你已匯入處裡的檔案刪除掉,再重新下載一次。
2.  開啟該檔案,其上方列會提示你是否 "啟動",請你先檢查程式碼
      Workbook_BeforeClose(Cancel As Boolean) 內是否有 Me.Save,
      如有則將它先行 Mark (  '  Me.Save ) ,然後將此修正予以儲存 (是 VBA 的檔案儲存),
      接後再去點選 "啟動",啟動該 Excel。
3.  按完 "啟動",則再次將該 Excel 檔關閉不儲存
4.  再次開啟該檔案,選擇不連線。之後就一切 OK 了!
作者: saleen    時間: 2013-11-4 14:42

回復 8# c_c_lai


    c_c_lai 大大 :

我以您的程式碼去執行
問題好像還是存在
就是無資料的日期區間還是會自動產生空格 ><
且 upd 不知道為什麼還是不會自動執行
一定要我手動點執行巨集它才會跑
我都已經給它 20 秒的等候時間了 ><...
作者: saleen    時間: 2013-11-4 14:54

本帖最後由 saleen 於 2013-11-4 14:56 編輯

這邊附上圖 , 可能會比較清楚一些

[attach]16576[/attach]

我的流程是 :
1. 若 A2 不是今日日期就將 A2 到 F2 下移並新增一行 , 並將 A2 插入今日日期
2. 接著等 20 秒
3. 將 J44 到 M44 的 DDE 撈出之資料更新到 B2 到 F2 中 (因為插入並下移的是 A2 到 F2 , 所以 J44 到 M44 不會有被下移的問題 )

其中 J44 到 M44 是從 XQ 撈 DDE 的 , 所以不會有問題
所以不知道為什麼 3 每次都不會執行 ><
都要手動執行

而且 Excel 的圖表繪圖速度好慢喔..
每次開檔案之後都要等它畫完圖
所以我才會給它過 20 秒再去更新
但它卻不會執行..
作者: c_c_lai    時間: 2013-11-4 16:14

回復 10# saleen
問題一:
妳的附件原始檔,之前我在開啟它時曾經足足等了 五 ~ 十分鐘不等還無法進入,
所以我採用分段方式才將妳圖表的問題 (#5 樓  -  回文) 消除。這也是妳說的:
" Excel 的圖表繪圖速度好慢喔..  每次開檔案之後都要等它畫完圖 "
" upd 不知道為什麼還是不會自動執行,一定要我手動點執行巨集它才會跑
  我都已經給它 20 秒的等候時間了 "
事實上、妳那 20 秒的等候時間早就過了不知多久時候了,這亦是不會執行
upd() 的真正原因。除非你有權限能下載附件去覆蓋掉妳的 "成交比重分析.xlsm"
問題二:
TimeScale 的問題是圖表內部控制,無法任由使用者異動。這方面可能要直接去
請教微軟了。
作者: c_c_lai    時間: 2013-11-4 16:16

回復 10# saleen
[attach]16577[/attach]
作者: c_c_lai    時間: 2013-11-4 16:36

回復 10# saleen
我想到了一個解決良方!
剛才我試了一下開啟到完全進入作業的時間
大約需時 30 秒 ~ 或之上,妳把等候時間加上
newSecond = Second(Now()) + 30    '   或者 35 秒
便解決問題了。
作者: saleen    時間: 2013-11-6 14:14

回復 13# c_c_lai


    感謝 Lai 大大 !
我來試試看
等會來回報結果 !
作者: saleen    時間: 2013-11-6 14:25

我改成 40 秒它還是一樣
都顯示 #N/A
><...
作者: c_c_lai    時間: 2013-11-6 14:38

我改成 40 秒它還是一樣
都顯示 #N/A
>
saleen 發表於 2013-11-6 14:25

請你查看一下  J44 到 M44 資料數據是否為 都顯示 #N/A,
如果答案是 Yes:
1.   妳的券商軟體是否已開啟?
2.  開啟順序應為: 券商軟體  --->   Excel  --->  連線作業。
如果答案是 No:
1.  B2 到 E2 欄內容為何?
作者: saleen    時間: 2013-11-7 14:56

回復 16# c_c_lai


    [attach]16622[/attach]
它就是不會自己執行 upd
手動執行就正常了
好怪 ><
作者: c_c_lai    時間: 2013-11-7 15:08

回復 17# saleen
妳把 upd()  更換成以下的程式碼便OK 了。
  1. Sub upd()
  2.     Dim Rng As Range
  3.    
  4.     With 工作表1
  5.         Set Rng = .[B2].Resize(1, 5)
  6.         
  7.         If .[A2] = Date Then
  8.             Rng(1) = "=J44"
  9.             Rng(2) = "=K44"
  10.             Rng(3) = "=L44"
  11.             Rng(4) = "=M44"
  12.             Rng(5) = "=100-B2-D2"
  13.             Rng.Value = Rng.Value              '  將公式以欄值取代
  14.         End If
  15.     End With
  16.    
  17.     reDraw       '  重新繪製圖表座標值
  18. End Sub
複製代碼
試試看!
作者: saleen    時間: 2013-11-12 14:02

回復 18# c_c_lai


    感謝 Lai 大 ~
雖然最後還是沒獲得解決 T_T
目前就暫時用手動的方式了..




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)