喜歡攝影的我,喜歡到處拍拍照,吃點當地的特色食物。 跟朋友聊天之餘,推薦我寫成網誌跟大家分享。 沒外出的日子,喜歡在家當隱性宅,寫程式看看書,追劇。 希望我的手札文,不會讓你翻桌 XD
2021年5月4日 星期二
2021年5月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 |
2.整理原始資料:如下。
這畫圖副程式,如上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)
執行結果如下:
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 |
入門篇:MSDN
2.先整理原始資料:如下。
指數變化(2025.03.20)
指數變化(2025.03.20) 上周焦點: 美國紐約州製造業指數 -20 美國企業庫存月增率 +0.3% 美國零售額月增率 +0.1% FED 不升息 川普 名句:對等關稅是具備彈性的 本周愛看: 美國消費者信心指數 3/25 美國耐久財訂單月增率 3/26 ...

-
寫給自己速查 垂直屬性:HorizontalAlignment 水平屬性:VerticalAlignment 置中:xlCenter 靠左靠右:XLLEFT、XLRIGHT Sheets("工作表1").Range("m2").Ve...
-
美國實質可支配所得 利率與黃金 消費者信心 利率PK DW PK FED紐約分行 上海貨櫃指數 BDI CRB 美國m 1 m2 s&p 美國 非農 美國 非農就業職務空缺率 美國股市 行事曆 fomc 會議紀要與開會時間 全球股市行事曆 全球股市 巴菲特指數 外...
-
整理資料時,不免要判斷資料數量,在判斷資料時,資料有時會有不連續與連續資料,這時候判斷方式不盡相同 連續資料時: a行於65000儲存格以前的最後列,有點饒舌;應該是這樣看,從a65000往上找(xlup),找到的第一個儲存格,也相對於是a行在65000列之前最後一列。 END...