在Excel工作表的某個單元格中應用數(shù)據(jù)有效性設置來制作下拉列表時,如果引用的行或列區(qū)域中包含空單元格或重復項,那么在有效性下拉列表中會與原區(qū)域中的內(nèi)容完全相同,也會包含空值或重復項,顯得有些不夠美觀。例如下圖是A1單元格的一個下拉列表。
通??梢匀サ糁貜晚椇涂諉卧窈笤僭O置數(shù)據(jù)有效性,但如果不想改變單元格的結構,可以使用下面的VBA代碼來解決這個問題,假如要設置下拉列表的單元格為D5,數(shù)據(jù)區(qū)域為K8:K38,步驟如下:
1.按Alt+F11,打開VBA編輯器。
2.在“工程”窗口中雙擊要包含數(shù)據(jù)有效性設置的工作表,在右側代碼窗口中輸入下列代碼:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim RowNum, ListRows, ListStartRow, ListColumn As Integer
Dim TheList As String
Dim Repeated As Boolean
If Target.Address <> "$D$5" Then Exit Sub
With Range("k8:K38")
ListRows = .Rows.Count
ListStartRow = .Row
ListColumn = .Column
End With
For RowNum = 0 To ListRows – 1
Repeated = False
If Not IsEmpty(Cells(ListStartRow + RowNum, ListColumn)) Then
For i = 0 To RowNum – 1
If Cells(ListStartRow + RowNum, ListColumn) = Cells(ListStartRow + i, ListColumn) Then
Repeated = True
Exit For
End If
Next i
If Not Repeated Then TheList = TheList & Cells(ListStartRow + RowNum, ListColumn) & ","
End If
Next RowNum
TheList = Left(TheList, Len(TheList) – 1)
With Range("D5").Validation
.Delete
.Add _
Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=TheList
End With
End Sub
3.關閉VBA編輯器返回Excel界面,選擇D5單元格,單擊下拉箭頭即可看到不包含空值和無重復的下拉列表。
說明:上述代碼使用了工作表的SelectionChange事件,當在工作表中重新選擇單元格后會執(zhí)行上述代碼。需根據(jù)實際將代碼中的單元格“D5”和區(qū)域“k8:K38”進行更改