-
1 # 梯航444
-
2 # 精進Excel
當然可以了,如果會用VBA,那麼幾乎你看到的多數網站上的功能,它都能實現,因為它也是一種變成語言啊!
但是,今天我想給你講的方法,不用VBA程式設計(VBA畢竟門檻太高了),而是使用函式和資料有效性即可完成。
實現的效果是怎樣的呢?如圖所示,當我們輸入關鍵字之後,選單就能自動變更為與關鍵字模糊匹配的選項,所以我們把這種選單也叫做查詢式下拉選單或自適應下拉選單。
一起來學習如何透過資料有效性和公式製作這樣的下拉選單。
Step1:資料來源準備如圖所示,A列資料作為下拉選單的資料來源,首先需要對A了中的資料進行排序(升序降序均可),我們把選單設定在E2單元格中。
=OFFSET($A$1,MATCH($E$2&"*",$A$2:$A$15,0),,COUNTIF($A$2:$A$15,$E$2&"*"),1)
Step3:對公式的解讀①使用E2輸入的數值和*組合,即$E$2&"*"來充當Match函式的第一個引數,來進行模糊查詢匹配;
②對於公式COUNTIF($A$2:$A$15,$E$2&"*"),來計算在$A$2:$A$15資料列中,出現E2中輸入內容的次數,這個公式返回的結果當做Offset函式的第四個引數,用來決定Offset函式偏移的行高;
所以整個公式的意思是:OFFSET($A$1,MATCH($E$2&"*",$A$2:$A$15,0),,COUNTIF($A$2:$A$15,$E$2&"*"),1)
以A1單元格為參照,向下偏移到E2單元格所在的第一個位置,然後總行數為E2單元格中的內容所重複的個數,把這個區域作為下拉選單的資料來源。
舉例:在E2單元格中輸入【廣】字,由於模糊查詢,會查找出來廣發集團、廣彙集團、廣汽集團,以A1單元格為參照,向下偏移3行,總行高為3,這個資料區域剛好是廣發集團、廣彙集團、廣汽集團資料,然後再以這三個資料作為下拉選單的資料來源,這樣是所謂的查詢式下拉選單。
-
3 # Excel大全
我也來分享下這個小技巧
如何在Excel中實現聯想式輸入?具體步驟:
下拉框內容整理排序
設定資料驗證方式為"序列",公式:=offset($A$1,MATCH(B3&"*",$A:$A,0)-1,,COUNTIF($A:$A,B3&"*"))
去除驗證的錯誤警告
公式詳解本文用到的公式:=offset($A$1,MATCH(B3&"*",$A:$A,0)-1,,COUNTIF($A:$A,B3&"*"))
引數1:$A$1,表示下拉框引用的區域起始位置,從A1單元格開始;
引數2:MATCH(B3&"*",$A:$A,0)-1,表示將區域偏移到查詢的關鍵字上,如示例中,輸入"安"以後,區域就從第一找到"安"的位置開始;
引數3:預設不偏移;
引數4:COUNTIF($A:$A,B3&"*"),統計下輸入內容的個數,如示例中,有3個姓"安"的人。
示例中,輸入"安",Offset則從第一個姓"安"人員位置開始,往下取3個單元格,作為下拉框的內容。
再分享一個如何製作多級聯動式下拉選單多級聯動式下拉選單一級下拉選單
二級下拉選單
多級下拉選單
-
4 # 布衣公子
1、在需要實時輸入提示的工作表(以名為“效果演示”的工作表為例)中插入兩個ActiveX控制元件,一個是文字框,一個是列表框,具體操作參見如上動圖。
相關程式碼如下:
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With TextBox1
If Target.Count = 1 Then
If Target.Column = 3 Then
.Visible = True
.Height = Target.Height
.Width = Target.Width
.Top = Target.Top
.Left = Target.Left
.Activate
.Value = ""
ListBox1.Visible = False
ListBox1.Top = Target.Top
ListBox1.Left = Target.Left + Target.Width
ListBox1.Clear
Else
.Visible = False
ListBox1.Visible = False
End If
End If
End With
End Sub
Private Sub ListBox1_Click()
ActiveCell = ListBox1.Value
ListBox1.Visible = False
TextBox1.Visible = False
End Sub
Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim cell As Range, rng As Range
With ListBox1
Set cell = Sheets("商品清單").[a2:a40]
.Visible = True
.Clear
For Each rng In cell
If InStr(rng, TextBox1.Value) Then .AddItem rng.Value
.Font.Size = 10
.Font.Name = "微軟雅黑"
.Height = .Font.Size * .ListCount + 30
Next
End With
End Sub
3、將上圖紅色框中的程式碼改成提示內容所在的工作表和單元格區域,格式為:工作表.單元格區域,本例中為【商品清單】表中的【A2:A40】單元格。
4、根據需要更改上圖綠色框中的程式碼列號,3表示C列,即實時錄入提醒只在C列起作用。
5、具體演示效果參見如上動圖。
6、最後務必將檔案儲存成啟動宏的工作簿,即字尾名為.xlsm格式的檔案。方便下次繼續使用。
因為平時有大量的資料要輸入,但是這些資料都是固定類目,公司名稱、員工姓名還有產品名稱這些,用有效性做的下拉提示實在是太長了點,不好用,感覺像悟空問答這種搜尋框裡輸入幾個字母就能模糊匹配出很多專案的效果最好了,不知道能不能在Excel裡資料線呢?
回覆列表
答:可以實現,現舉例說明方法
假設工作表名為"工序計價表"中含有如下資料來源(當然可以有很多行):
按ALT+F11組合鍵,開啟VB視窗,然後”插入“一個使用者窗體。在窗體上右鍵,選擇檢視程式碼:在開啟的程式碼中輸入以下程式碼:
回到工作表,右鍵工作表名,選擇"檢視程式碼"在程式碼視窗輸入如下程式碼:此時工作已完成。再回到工作表,隨便選取一個單元格,就會出現這樣提示輸入框。如圖:
比如輸入一個”(“字元,自動篩選出下列符合條件的列表內容。