2021年5月3日 星期一

發洩文:股價 v.s物料走勢折線圖 自動繪製

 因為今天跌很多,我發洩。

來亂畫圖
說明:刪除資料,點選按鈕後,圖就畫好了。


發想過程
p.s就是手痠才亂寫工具



VBA:SPC管制圖自動化

 

圖1.自動化示意圖
說明:
    自動載入各資料根據各資料逐一繪製管制圖,並彙整到一張總表上,點選總表上的圖表就可以開啟檔案逐一檢視各管制圖歷史資料。

最近花了點時間,寫了一個製程管制的SPC管制圖系統,就整理這一篇摟,當然這過程也感謝朋友幫忙處理資料庫結構後,才能順利取得需要的製程中檢查資料
(廠商的資料庫有很多故事,超多的連續劇的拉)

圖表上設計有一個拖曳BAR可以控制

圖2.拖曳BAR功能
說明:可以拖曳回顧過去歷史資料。


圖3.超標時標示
說明:當存有異常資料時,圖表折線以紅色表示,並於圖表上標示異常點資料數值,並於原始資料反紅與特別標示出來。










VBA:插入圖檔入門篇



如何插入圖檔??

1.用到的物件為 ChartObjects物件

掌握要領:圖的種類、資料來源、圖的位置、X軸與Y軸、圖名

2.透過ADD方法插入圖

ChartObjects.Add(Left, Top, Width, Height)

Left, Top, Width, Height:分別為左、右、寬、高等距離與尺寸控制。

3.圖的種類設定:

ChartObjects. ChartType =???參考MSDS有那些設定,於空白EXCEL做圖新增時,通常第一張圖預設名稱為 Chart1,然後以此類推。

        With Worksheets(1).ChartObjects(1).Chart 

     If .ChartType = xlBubble '這裡作一個判斷,如果是泡泡圖就把尺規改成200

          Then .ChartGroups(1).BubbleScale = 200 

     End If

End With 

以下來看看如何設定"類別座標軸"中的標籤:

4.坐標軸設定:ChartObjects. Axes (Type, AxisGroup)MSDN

於 Chart1 的類別座標軸中新增座標軸標籤

With Charts("Chart1").Axes(xlCategory) 

   .HasTitle = True .AxisTitle.Text = "July Sales" 

End With

另外一個完整的例子: 畫一個散佈圖,並以行作畫圖依據

以下CODE內容,要自己作一個按鈕放進去歐,資料預設為A到B行歐。

N =  Application.CountA(Sheets("Sheet1").Range("A:A"))  取得有資料的最後一列位置

X = "數據序列X"

Y = "數據序列X"

 Set myRange = Sheets("Sheet1").Range("A" & 1 & ":B" & N)

 Set myChart = Sheets("Sheet1").ChartObjects.Add(100, 30, 400, 250)

With myChart.Chart

    .ChartType = xlXYScatterSmooth

      .SetSourceData Source:=myRange, PlotBy:=xlColumns 'PlotBy以行作畫圖依據

        .Axes(xlCategory, xlPrimary).HasTitle = True '開啟標籤

        .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = X '類別標籤

        .Axes(xlValue, xlPrimary).HasTitle = True

        .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = Y  '資料標籤

End With

 Set myRange = Nothing   '釋放物件                                            

 Set myChart = Nothing    '釋放物件                                          


VBA:練習畫折線圖(根據集保庫存資料)

畫持股變化折線圖:

 


怎畫的入門篇語法:MSDN

code:


Sub 持股對照圖(SHEET_NAME, RANGE_ADDRESS, DATA1, DATA2, xlColumnClustered_option, XLINE_WORD, DELTEE)
Sheets(SHEET_NAME).Activate
If DELTEE = 1 And Sheets(SHEET_NAME).ChartObjects.Count > 0 Then
Sheets(SHEET_NAME).ChartObjects.Delete
End If
A = ActiveSheet.Range(RANGE_ADDRESS).Left
b = ActiveSheet.Range(RANGE_ADDRESS).Top
Set myChart = ActiveSheet.ChartObjects.Add(A, b, 800, 324)
With myChart.Chart
.ChartType = xlLine
If DATA2 <> "" Then
.SetSourceData SOURCE:=Range(DATA1 & "," & DATA2)
Else
.SetSourceData SOURCE:=Range(DATA1)
End If
For i = 1 To .SeriesCollection.Count Step 1
If .SeriesCollection(i).Name <> XLINE_WORD Then
A1 = myChart.Chart.SeriesCollection(i).Values
With .SeriesCollection(i).Format.Line
.Visible = msoTrue
.Weight = 3
End With
If xlColumnClustered_option = 1 Then
.SeriesCollection(i).ChartType = xlColumnClustered
With .SeriesCollection(i).Format.Line
.Visible = msoTrue
.Weight = 1.5
End With
End If
.SeriesCollection(i).Interior.ColorIndex = 23 '(0, 153, 255)
.SeriesCollection(i).Border.ColorIndex = 23 ' RGB(0, 153, 255)
Else
A2 = myChart.Chart.SeriesCollection(i).Values
.SeriesCollection(i).AxisGroup = 2
.SeriesCollection(i).Interior.ColorIndex = 3
.SeriesCollection(i).Border.ColorIndex = 3
With .SeriesCollection(i).Format.Line
.Visible = msoTrue
.Weight = 3.25
End With
MIN_S = Application.Min(A2)
.Axes(xlValue, xlSecondary).Select
.Axes(xlValue, xlSecondary).MinimumScale = 0
.Axes(xlValue, xlSecondary).MinimumScale = MIN_S
.Axes(xlValue, xlSecondary).TickLabels.Font.Size = 15
End If
Next i
.Axes(xlValue).TickLabels.Font.Size = 15
MIN_V = Application.Min(A1)
.Axes(xlValue).MinimumScale = 0
.Axes(xlValue).MinimumScale = MIN_V '* 0.95
.Legend.Left = 3.511
.Legend.Top = 1.644
.Legend.Width = 800
.Legend.Format.TextFrame2.TextRange.Font.Size = 25
w = myChart.Width
h = myChart.Heigh
.PlotArea.Width = w * 0.98
.PlotArea.Height = h * 0.98
End With
End Sub
view raw gistfile1.txt hosted with ❤ by GitHub





2.整理原始資料:如下。


圖1.


這畫圖副程式,如上CODE內容,表頭長這樣:

持股對照圖(SHEET_NAME, RANGE_ADDRESS, DATA1, DATA2, xlColumnClustered_option, XLINE_WORD, DELTEE)

有7個變數要設定。

SHEET_NAME:資料位置的工作表

RANGE_ADDRESS:圖要放的儲存格位置

DATA1:第一組資料位置

DATA2:第二組資料位置

xlColumnClustered_option:畫圖設定,目前都設定0為主

XLINE_WORD:第二組資料的標題設定

DELTEE:是否把前回CHART物件刪除。

小編的資料,有特別整理出集保庫存分析,與每周收盤的股價,演練的資料為100張以下持股資料,小編的原始資料放在AL與AT這兩個儲存格,以及想把圖放在W14的儲存格位置,b_count_a這個變數是資料總筆數設定,小編是抓50筆所以"AL1:AL" & b_count_a的執行結果為"AL1:AL50"這樣歐,整體副程式呼叫設定如下:

Call 持股對照圖("集保庫存分析", "w14", "AL1:AL" & b_count_a, "AT1:AT" & b_count_a, 1, "當周最後收盤價", 0)

執行結果如下:

圖2.


VBA:練習畫圓餅圖(根據集保庫存資料)


整理持股等級的圓餅圖:

1.code:

Sub 圓餅圖(RANGE_ADDRESS)
A = ActiveSheet.Range(RANGE_ADDRESS).Left
b = ActiveSheet.Range(RANGE_ADDRESS).Top
Set myChart = ActiveSheet.ChartObjects.Add(A, b, 800, 324)
With myChart.Chart
.ChartType = xlPie
.SetSourceData SOURCE:=Range("$AO$1:$AO$2,$AQ$1:$AQ$2,$AS$1:$AS$2,$AM$1:$AM$2")
.Legend.Format.TextFrame2.TextRange.Font.Size = 25
End With
End Sub
view raw gistfile1.txt hosted with ❤ by GitHub


入門篇:MSDN

2.先整理原始資料:如下。

圖1.
小編將原始資料放在AQ1開始的儲存格,所以資料來原設定如下:
.SetSourceData SOURCE:=Range("$AO$1:$AO$2,$AQ$1:$AQ$2,$AS$1:$AS$2,$AM$1:$AM$2")
因為這個副程式,小編是設定位置方式,大小固定,所以呼叫時,要給他加上儲存格位置。

EX:CALL 圓餅圖("A2") 
3.執行結果如下:
圖2.









南崁 五酒桶山

 單純分享照片,若是進來看地圖的朋友們,建議直接用GOOGLEMAP搜尋即可,非常簡單的路程歐












指數變化(2025.03.20)

  指數變化(2025.03.20) 上周焦點: 美國紐約州製造業指數 -20 美國企業庫存月增率 +0.3% 美國零售額月增率  +0.1% FED 不升息 川普 名句:對等關稅是具備彈性的 本周愛看: 美國消費者信心指數 3/25 美國耐久財訂單月增率 3/26       ...