Board logo

標題: [發問] 請問這種階梯圖有辦法用EXCLE畫出來嗎? [打印本頁]

作者: maxchou    時間: 2011-8-19 17:30     標題: 請問這種階梯圖有辦法用EXCLE畫出來嗎?

請問各位前輩高手,像附件這種圖形有辦法使用EXCEL畫出來嗎?
在此先謝過!
[attach]7513[/attach]
作者: lumark1976    時間: 2011-8-20 12:20

[attach]7516[/attach]回復 1# maxchou


    不知道是不是你要的,如附件!!
作者: maxchou    時間: 2011-8-20 19:03

先謝過lumark1976前輩,因為我績分不夠,還無法下載,趕緊來練功。
Howerever,先謝謝囉!!
作者: maxchou    時間: 2011-8-22 11:31

先來報告一下這幾天努力的結果,可以畫出像是附件的圖形,但是還有一段距離,希望這位前輩給予指點。
至少可以用excel畫出像附件的圖片一樣。(目前是在powerpoint純手工用圖案一個一個貼上去)

[attach]7532[/attach]

[attach]7534[/attach]
作者: infoverdad    時間: 2011-8-22 12:25

回復 4# maxchou


    看了一下你的資料檔,有幾點問題:
1. 您是要將F1:F23的資料當成X座標嗎? (如果不是,那資料來源就應該改一下)
2. 您想畫出的圖型看起來比較像是直條圖 (如果是這樣,那圖表類型就不應選xy散佈圖)
3. 若要直條圖是相連的,可在『資料數列格式』的『選項』頁籤將類別間距改成0
作者: maxchou    時間: 2011-8-22 13:04

謝謝infoverdad 前輩,謝謝你的回覆,
1.沒錯,我是要把F1:F23的資料當成X座標。原始資料是在B1:B11,只是為了散佈圖,調整成F1:F23。
2.對,像是直條圖,但是X座標上的區間必須隨資料而有不一樣寬度,可是直條圖都是固定寬度,所以沒用直條圖。
3.謝謝!多學了一招,但因為我需要不同寬度的X軸,所以還是畫不出來。

Howerever,還是謝謝!(這樣我可以多賺一分啦^^)
作者: infoverdad    時間: 2011-8-22 14:58

回復 6# maxchou

請問您要的結果是這樣的圖嗎?
    [attach]7535[/attach]
作者: maxchou    時間: 2011-8-22 15:17

回復 7# infoverdad

感謝infoverdad前輩這麼即時的回覆,謝謝!
但是我需要的圖是在X座標有不同寬度的,也就是說第一條長條圖的X座標寬度是2單位,而第二條的寬度則要變成是17個單位(19-2),第三條則是2單位(21-19),以此類推......
就像是第4樓的圖片一樣。

再次感謝!
作者: infoverdad    時間: 2011-8-22 18:00

回復 8# maxchou


    [attach]7539[/attach]
要畫成這樣有點小複雜哦!! 要一個個資料設定.
作者: maxchou    時間: 2011-8-22 18:18

回復 9# infoverdad

infoverdad前輩,您真是太厲害了!
對!對!對!!我就是想畫出這樣的圖耶。
研究一天就只能畫出像這樣的圖,沒辦法分出不同顏色.....
可以教教我嗎?

[attach]7540[/attach]
作者: infoverdad    時間: 2011-8-22 23:31

回復 10# maxchou


    可以把你最後的檔案上傳嗎? 我再找空檔想想怎麼幫你,因你目前還無權限下載檔案.
作者: maxchou    時間: 2011-8-23 00:14

回復 11# infoverdad


先謝過infoverdad前輩!謝謝!
其實我有許多張這樣的圖要畫,數據也都跟我之前上傳的檔案差不多,只是在於直條的數量不一樣,
有跟上傳的差不多約十個,也有20幾個直條以上的,
之前都是用XY誤差線畫出線條,再用貼圖案的方式完成,
這種方式非常手工,而且耗時,而且後端資料只要一改,X座標寬度就會變,也有可能會因為Y軸的大小而改變順序,
所以才想說是不是可以用EXCEL,我只要輸入數字,圖表便可以自動連動,這樣可以節省手工調整直條時間。
(預期後端資料還要修改好幾次........)

如果infoverdad前輩方便的話,是否可以先以我之前上傳的test.zip為範例,先教教我呢?
以上報告,再次表達我誠摯的謝意!
作者: infoverdad    時間: 2011-8-23 12:31

回復 12# maxchou


我用的方式還是太累要一個個設(我試的時候很耗時間),可能無法幫到你.
試試參考下列網址吧!
"XY圖本可選資料範圍就可以完成,但A欄資料會變成X軸資料,就算將全部資料轉置(選轉90度)依然如此(2003版),因此每組XY需一組一組設定。如圖形需常增加資料組數,可以用巨集方式處理,先錄製一段巨集,再增加迴圈指令就可以自動增加資料,不用每次由頭重設..."
[轉貼] from http://www.dolamo.com/problem/software/1/27340
作者: maxchou    時間: 2011-8-23 17:18

回復 13# infoverdad


謝謝infoverdad前輩,我會到您提供的網址研究看看,
但看起來有點困難度........
若有所突破,在回來報告!
作者: infoverdad    時間: 2011-9-6 00:09

本帖最後由 infoverdad 於 2011-9-6 00:11 編輯

回復 4# maxchou


用您的資料改了這個巨集,請試試吧!
(不過資料要先整理過 如附件)[attach]7735[/attach]
畫出之圖形:
[attach]7734[/attach]
  1. Sub DrawRangeCol()

  2.     Dim myRange As Range
  3.     Dim i As Integer

  4.     Set myRange = Sheets("test").Range("N1:X102")
  5.    
  6.     Charts.Add
  7.     ActiveChart.ChartType = xlColumnClustered
  8.     ActiveChart.SetSourceData Source:=myRange, PlotBy:=xlColumns
  9.    
  10.     i = 1
  11.     For i = 1 To myRange.Columns.Count
  12.    
  13.         ActiveChart.SeriesCollection(i).Values = "=test!R2C" & i + 13 & ":R102C" & i + 13
  14.         ActiveChart.SeriesCollection(i).Name = "=test!R1C" & i + 13
  15.    
  16.         ActiveChart.Axes(xlCategory).Select
  17.         ActiveChart.SeriesCollection(i).Select
  18.         With Selection.Border
  19.             .Weight = xlThin
  20.             .LineStyle = xlNone
  21.         End With
  22.         Selection.Shadow = False
  23.         Selection.InvertIfNegative = False
  24.         Selection.Interior.ColorIndex = xlAutomatic
  25.       
  26.     Next
  27.       
  28.     ActiveChart.ChartArea.Select
  29.     ActiveChart.HasLegend = True
  30.     ActiveChart.Legend.Select
  31.     Selection.Position = xlBottom
  32.    
  33.     ActiveChart.PlotArea.Select
  34.     With ActiveChart.ChartGroups(1)
  35.         .Overlap = 100
  36.         .GapWidth = 0
  37.         .HasSeriesLines = False
  38.     End With
  39.    
  40. End Sub
複製代碼

作者: maxchou    時間: 2011-9-6 09:22

回復 15# infoverdad

太感謝infoverdad前輩了,這麼幫忙!感激不盡!
不過我還差13分才可以下載附件,有個不請之請,
不知道infoverdad前輩是不是可以把資料調整完的畫面貼上來呢?
我自己先手動調整,試著用巨集畫畫看(因為我還沒有使用巨集畫過圖形)。
不過還是要再次感謝!
作者: infoverdad    時間: 2011-9-6 13:26

本帖最後由 infoverdad 於 2011-9-6 13:34 編輯

回復 16# maxchou


    我試試,但你的資料有小數點,是最大的麻煩處.

N2 =IF(AND(ROW()>=$K$2,ROW()<=$L$2),$B$2,0)
O2 =IF(AND(ROW()>=$K$3,ROW()<=$L$3),$B$3,0)
...
X2 =IF(AND(ROW()>=$K$12,ROW()<=$L$12),$B$12,0)

[attach]7746[/attach]
[attach]7747[/attach]
作者: infoverdad    時間: 2011-9-6 15:35

回復 16# maxchou


    你也可以去下面的網址下載一個zip檔入附件(funchart5_brickyard.zip)
[attach]7748[/attach]

http://peltiertech.com/Excel/Charts/Brickyard.html

原理是一樣的 但您可已看看它的解說與實例
作者: maxchou    時間: 2011-9-6 17:15

回復 17# infoverdad

謝謝infoverdad前輩這麼費心花時間幫我想這圖形要怎麼畫,真的是非常感謝!!
我大概可以用infoverdad前輩上傳的圖片複製出來一樣的圖形(雖然我不是很懂公式與巨集),
但我想請問infoverdad前輩關於L2-L12這是怎麼決定?是I2+1嗎?
另外所提之小數點問題,是不是就說因為差距小於1,所以無法在N2-X102填入數據?也就畫不出來。
再次感謝!
作者: infoverdad    時間: 2011-9-6 18:44

本帖最後由 infoverdad 於 2011-9-6 18:48 編輯

回復 19# maxchou


1. L2=K2+J2-1  
2. yes
作者: maxchou    時間: 2011-9-7 13:24

回復 20# infoverdad

謝謝infoverdad前輩提供的資訊,
利用我僅有的一點點知識研究之後,
這種方式是不是限制只能用在X軸是屬於"類別",不連續的資料,就是1, 2, 3...,而1跟2之間沒有任何數字。
而我的raw data是連續的,就是有小數點,而且是存在大小關係的,
這樣看來這真的是屬於不可能的任務......
不好意思,讓infoverdad前輩費心了,再次感謝!
作者: infoverdad    時間: 2011-9-7 14:43

回復 21# maxchou


雖然如此,還是可以做的,之前提的網址所下載的那個funchart5_brickyard.zip 把rngBlank從來源資料移除,就可以做到(如附件)
[attach]7753[/attach]
,其中有一段說明如下:
"All of the hard work in this file is done using defined names.  These names create a series of 100 bars, then work out which plant is associated with each bar, and what the 'value' of the bar should be.  The 100 bars are plotted on the chart and then formatted such that they appear to be a single column.  To improve the accuracy, change the rngBins defined name to use up to 4,000 points (instead of the two 100's there already). "

rngVol        =OFFSET(Sheet1!$B$5,0,0,COUNTA(Sheet1!$B:$B)-1,1)                               
rngVCum        =OFFSET(rngVol,0,1)                               
rngCost        =OFFSET(rngVol,0,2)                               
rngBins        =TRANSPOSE(SUM(rngVol)*ROW(Sheet1!$1:$100)/100)                               
rngPlant        =MATCH(rngBins,rngVCum,1)                               
rngSer1        =IF(rngPlant=1,INDEX(rngCost,1),0)                               
rngSer2        =IF(rngPlant=2,INDEX(rngCost,2),0)                               
rngSer3        =IF(rngPlant=3,INDEX(rngCost,3),0)                               
rngSer4        =IF(rngPlant=4,INDEX(rngCost,4),0)       
[attach]7754[/attach]
作者: maxchou    時間: 2011-9-7 17:07

回復 22# infoverdad

感謝infoverdad前輩這麼即時的回答!
我嘗試直接修改數據,並把PLANT D, E改為有小數點的數據,以符合我RAW DATA會遇到的狀況,
可是卻發現直條圖只剩4條,這是什麼原因呢?(詳見附檔BAR_R.ZIP)
[attach]7757[/attach]
另又將數據修改成沒有小數點(詳見附檔BAR_R1.ZIP),就又變成5條直條了,也就是希望畫出來的圖。
[attach]7758[/attach]
這樣土法煉鋼測試,是不是代表小數點問題真是如同infoverdad前輩所說是個麻煩點。
作者: infoverdad    時間: 2011-9-7 17:27

本帖最後由 infoverdad 於 2011-9-7 23:58 編輯

回復 23# maxchou

修一下:
1. 請在定義名稱處rngBins中的 99與100 (如下公式紅字部份)改成 10000 (目的,增加它的精確度)
=TRANSPOSE(SUM(rngVol)*ROW(Sheet1!$1:$99)/100) 改成
=TRANSPOSE(SUM(rngVol)*ROW(Sheet1!$1:$10000)/10000)

2. 修改X軸刻度( 如圖)
[attach]7759[/attach]

修改後之圖如下:
[attach]7762[/attach]
作者: maxchou    時間: 2011-9-8 00:03

回復 24# infoverdad

真是太太太.......感謝infoverdad前輩了,終於可以畫出 心中想要的圖了,
而且是連最後兩個小小的直條圖也可以畫出來,(放大到400%以上就可以明顯的看出來)
真的不知道要怎麼感謝∼
就在讓我誠心的感謝一次吧!!
謝謝infoverdad前輩!   
[attach]7763[/attach]
作者: infoverdad    時間: 2011-9-8 09:17

回復 25# maxchou


    託您的福,我也在過程中有所學習!!
作者: infoverdad    時間: 2011-9-10 19:29

本帖最後由 infoverdad 於 2011-9-11 21:38 編輯

回復 25# maxchou


補上有重新繪圖巨集的檔,可選擇精確倍數
(目的:將X合計值52.5至少化為整數525 or 5250 or more
,但最多不能超過32,000個柱狀資料點)並減少手工調整! 希望有幫助.
打開檔案後,在"重畫階梯圖"的按鈕上按一下即可.

[attach]7790[/attach]
作者: maxchou    時間: 2011-9-11 17:55

回復 27# infoverdad


先謝過infoverdad前輩,我還差3分就可以下載了,我會記得這兩天來簽到,就可以升到中學生了。
infoverdad前輩真是有先見之明,知道我還需要作些調整,
這幾天我嘗試自己調整(包括直條圖數量,以及顏色),就得花很多時間,也有時會常常出現錯誤,excel就關閉了,
最後也有嘗試先錄巨集,自己加迴圈(這部份也是有透過搜尋這網站的資料,才有辦法做到),只是執行速度比預期慢,而且有時出現錯誤。
不過真的是很謝謝infoverdad前輩的指導,這段時間也了解到excel很多功能,能節省時間的方式的。
再次感謝!
作者: infoverdad    時間: 2011-9-12 19:49

本帖最後由 infoverdad 於 2011-9-12 19:53 編輯

回復 28# maxchou


趁假日認真改良一下:加上命名資料列巨集+限制及公式說明如附件
[attach]7795[/attach]

資料點類別X軸標籤:
依本例,BASE值設為10來解釋:若期望將某數列畫在X軸1~2間,
則將以10個[即(2-1)*BASE]資料點("1.1","1.2…,"2.0")來畫它

BASE值目的:
依本例,將X合計值(52.5)化為整數525 以上個資料點
但最多不能超過32,000個資料點

[attach]7796[/attach]
作者: maxchou    時間: 2011-9-12 23:13

回復 29# infoverdad


謝謝infoverdad前輩,這麼費心製作,我等一下就可以下載,好好研究一番。
X軸上的數字也曾讓我困惑,因為總調不出我要的數字與間隔。
再次感謝infoverdad前輩!有問題在請教您!thanks!




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