
VBA 是一種很久遠的編程語言,但并不過時。在滿足以下兩個條件時,借助 VBA 可以極大的提升生產率,降低出錯率:
- 你的電腦上不允許自主安裝軟件;
- 你需要執行的工作中大部分的步驟都是固定且重復的。
項目背景
近期接到一個工作任務,在運行設備中,會定期生成數據記錄文件(txt 格式),我需要將這個文件中的 1000 個數據導入到 Excel 中,通過公式計算,得到需要的另外兩列數據,將這兩列數據作為數據源,設置一個組合圖表(折線圖+折線圖),設置好圖表的格式,最后將圖表轉換為圖片,保存到指定位置。同時在主表中新建一行記錄本次的相關數據。
拿到手的數據如下如所示:

最終得到的圖片如下圖所示:

整個過程看起來并不復雜,一套流程操作下來大概也只需要不到 10 分鐘的時間。但是當這個工作變成每天 100 次的話,就是一個相當考驗人的任務了。那么借助 VBA,可以將這個過程縮減到 10 秒鐘,看一下是如何實現的。
任務分解
首先對文檔數據進行分析,它的數據內容是變化的,但是遵循了固定的格式:
- 文檔包含1004個數據,數據以“,”來進行分割;
- 第1-1000個數據代表測量數據,也是需要進行進一步處理的數據
- 第1001個數據代表測量序號,需要手動設置到圖標上,同時圖片的保存文件名也需要用到;
- 第1002-1004個數據是相關的狀態型號,需要記錄存檔。
然后是對數據進行的處理:
- 新建一列B,取值為對應記錄數據的奇偶性,(奇數為100,偶數為0);
- 再新建一列C,取值為對應記錄數據除以4096,是實際的測量值。
以BC列為數據源,插入一個組合圖表:
- 圖表類型選擇“組合圖表”,
- 將序列1(B列)設置為“折線圖”,設置在“次坐標軸”上;
- 將序列2(C列)設置為“折現圖”,設置在“主坐標軸”上;
- 為序列2(C列)添加一條趨勢線(移動平均、周期20);
- 修改主標題、主/次坐標軸標題,主/次橫軸標題的文字;
- 修改次坐標軸的坐標刻度(只保留0,100);
- 設置3條折線的顏色、寬度、透明度等,讓數據顯示更加明顯。
VBA 實現
根據分解的任務,就可以編寫VBA程序來實現整個過程。
這個項目中,VBA程序中涉及到的知識點包括:
- 數據文件讀取
- “打開文件”對話框的調用
- 篩選指定格式文件
- 設置默認打開路徑
- 工作簿、工作表的概念及VBA中對其進行的操作的方法
- 文件屬性的獲取
- EXCEL中表格內容到VBA數組的相互轉換
- VBA中的“For Next”循環結構
- 數據類型及強制轉換數據類型
- 文本格式化函數Format的使用
- 詞典的創建和使用
- 在EXCEL中使用VBA來創建圖表,指定位置和大小;
- 圖表元素的添加、刪除和修改;
- 圖表屬性的設定
- 圖表轉換為圖片的方法