自定義名稱是EXCEL一項很實用的功能,本文将介紹基本概念,基礎用法,同時介紹針對自定義名稱幾個小功能,包括自定義名稱的顯示,隐藏,記錄及删除。
- 基本概念
名稱:在 Excel 中代表單元格、單元格區域、公式或常量值的單詞或字元串。
使用名稱可使公式更加容易了解和維護。可為單元格區域、函數、常量或表格定義名稱。
- 基礎用法
- 資料驗證
通過自定義名稱的使用,可以快速完成資料驗證的相關設定,例如,想為單元建立一個各個設計專業的資料驗證,可以操作如下
視訊加載中...
- 簡化公式
假設在表格1有兩列資料,分别是長寬,在表格2對應位置需要計算面積,采用自定義名稱各個行的公式可以完全一緻,簡潔而不容易出錯
視訊加載中...
以EDAP程式中根據電纜廠家查對應的電纜重量公式為例,其中就大量應用了自定義名稱,如果把每個自定義名稱還原為表格名稱+單元格區域那公式就非常難以閱讀。
=CHOOSE(LEFT(A05動力電纜.範圍.連接配接方式,2),IF(SUMIFS(YBAD001.動力電纜.實體.重量,YBAD001.動力電纜.資料來源,A05動力電纜.電纜參數.實體來源,YBAD001.動力電纜.電纜型号,A05動力電纜.具體型号.電纜類型,YBAD001.動力電纜.截面規格,A05動力電纜.具體型号.截面)=0,"出錯",SUMIFS(YBAD001.動力電纜.實體.重量,YBAD001.動力電纜.資料來源,A05動力電纜.電纜參數.實體來源,YBAD001.動力電纜.電纜型号,A05動力電纜.具體型号.電纜類型,YBAD001.動力電纜.截面規格,A05動力電纜.具體型号.截面)),"-","-")
- 記錄常量
假設某個單元圖紙對應的工作簿有N個工作表(對應N個設計檔案),每個設計檔案都有基于單元号的圖紙編号,那麼在某個固定位置存放單元編号,然後利用自定義名稱取名“單元編号”,在圖紙編号處使用“XXXX工程”&單元編号&“XXXX圖紙”,當某個單元的圖紙套用到另外一個單元的時候,可以隻修改一處,保證檔案的一緻性。
- 管理工具
自定義名稱可以通過《公式》頁籤下面的“名稱管理器”進行管理,
自定義名稱的功能毫無疑問是強大的,但是用的不好也容易出些莫名其妙的問題。
例1:工作簿之間移動工作表,會提示自定義名稱沖突,但是打開名稱管理器一看又空空蕩蕩的。
例2:工作簿之間公式複制粘貼,可能導緻自定義名稱無效,甚至源檔案删除之後會導緻每次打開工作簿提示檔案丢失,這個提示無法通過《資料》頁籤的斷開連接配接功能修複。
例3:有些工作簿明明沒幾個表格,檔案大小卻大到吓人,也有可能是背景隐藏太多無效的自定義名稱
可以簡單了解EXCEL自帶的名稱管理器權限不夠高,是以功能有限,基于VBA的權限完成了以下幾個小功能,具體見視訊示範:
- 顯示自定義名稱隐藏自定義名稱記錄自定義名稱
視訊加載中...
- 删除全部名稱删除外部名稱删除無效名稱
視訊加載中...
代碼如下
Sub Dingmurch01SU_01bK_02NAME_01_ALLSHOW()
'【B對應功能】顯示所有名稱
'【C調試時間】2017.06.01
'【D簡單描述】顯示所有名稱
Dim GB010201_NAME As Name
For Each GB010201_NAME In Names
GB010201_NAME.Visible = True
Next
End Sub
Sub Dingmurch01SU_01bK_02NAME_02_ALLHIDE()
'【B對應功能】隐藏所有名稱
'【C調試時間】2017.06.01
'【D簡單描述】隐藏所有名稱
Dim GB010202_NAME As Name
For Each GB010202_NAME In Names
GB010202_NAME.Visible = False
Next
End Sub
Sub Dingmurch01SU_01bK_02NAME_03_ALLREC()
'【A對應菜單】
'【B對應功能】
'【C調試時間】
Dim GB010211_NAME As Name
Dim GB010211_i As Integer
Dim GB010211_COLNAME As Integer
Dim GB010211_COLAREA As Integer
Dim GB010211_ROWSTART As Integer
GB010211_i = 1
GB010211_COLNAME = 1 '[YBAA002.名稱定義.名稱].Column
GB010211_COLAREA = 2 '[YBAA002.名稱定義.區域].Column
GB010211_ROWSTART = 1 '[YBAA002.名稱定義.區域].Row
Cells(GB010211_i, 1) = "自定義名稱"
Cells(GB010211_i, 2) = "引用的區域"
'Dingmurch02FU_0002_SHTshow ("BAA002")
For Each GB010211_NAME In ActiveWorkbook.Names
Cells(GB010211_i + GB010211_ROWSTART, GB010211_COLNAME) = GB010211_NAME.Name
Cells(GB010211_i + GB010211_ROWSTART, GB010211_COLAREA) = GB010211_NAME.RefersTo
GB010211_i = GB010211_i + 1
Next
End Sub
Sub Dingmurch01SU_01bK_02NAME_21_DELAll()
'【B對應功能】删除所有全部的名稱
'【C調試時間】2017.06.01
'【D簡單描述】删除所有全部的名稱,跳過特殊名稱和列印區域
Dim GB010221_NAME As Name
For Each GB010221_NAME In Names
If Left(GB010221_NAME.Name, 1) <> "_" Then
If InStr(GB010221_NAME.Name, "Print_") > 0 Then '跳過特殊名稱和列印區域
Else
GB010221_NAME.Delete
End If
End If
Next
End Sub
Sub Dingmurch01SU_01bK_02NAME_22_DELonlyNOWK()
'【B對應功能】删除所有連結的名稱
'【C調試時間】2017.06.01
'【D簡單描述】删除所有來自外部連結的名稱
Dim GB010222_NAME As Name
For Each GB010222_NAME In Names
If Left(GB010222_NAME.Name, 1) <> "_" Then
If Mid(GB010222_NAME.RefersTo, 4, 1) = ":" Or Mid(GB010222_NAME.RefersTo, 3, 1) = "[" Then
GB010222_NAME.Delete
End If
End If
Next
End Sub
Sub Dingmurch01SU_01bK_02NAME_23_DELonlyNOREF()
'【B對應功能】删除所有錯誤的名稱
'【C調試時間】2017.06.01
'【D簡單描述】删除所有錯誤的名稱
Dim GB010223_NAME As Name
For Each GB010223_NAME In Names
If Left(GB010223_NAME.Name, 1) <> "_" Then
If InStr(Left(GB010223_NAME.Value, 6), "#REF") > 0 Then
GB010223_NAME.Delete
End If
End If
Next
End Sub