友快網

導航選單

【學習】excel教程:如何查詢單元格內容?這樣做,你的excel成績會提高!

前景提要

經過了之前一段時間的學習,我們大致瞭解了單元格內容的提取,拆分等操作,同時也是延伸到了單元格公式等內容的擴充套件

相信大家對於這部分的知識,應該有了一定的瞭解了。

今天我們繼續按照計劃往下走,來學習下單元格內容的查詢

說到內容的查詢,小夥伴們肯定會丟個白眼給我,並在內心丟給我一張圖

Excel的查詢功能早就根深蒂固了,大家在日常的工作中也會經常使用到,但是不知道大家有沒有這樣的體會,Excel的查詢,每次都只能展示一個結果,看起來非常的不方便,要檢視所有的結果,還需要展開來看

非常的不舒服,能不能將所需要查詢的結果,高亮在原始資料中,這樣我們也能一目瞭然呢?

這是我在日常工作中經常會有的想法,有想法就要有行動,所以今天我就直接用VBA來實現這樣的想法。

場景說明

這是我們今天的資料來源,我們要實現的目標是,將查詢的結果,直接在原資料中表現出來,高亮出來,這樣我們看起來也是更加的方便。

程式碼區

Sub test()

Dim rng As Range, trng As Range, frng$, a As Range

s = Application。InputBox(“查詢內容的確定”, “請輸入查詢內容”, , , , , , 3)

With ActiveSheet。UsedRange

Set rng = 。Find(s)

If Not rng Is Nothing Then

frng = rng。Address

Set trng = rng

Else

MsgBox “無匹配資料”

Exit Sub

End If

Do

Set rng = 。Find(s, after:=rng)

rng。Select

If frng <> rng。Address Then

Set trng = Union(trng, rng)

Else

Exit Do

End If

Loop

End With

trng。Interior。Color = vbRed

End Sub

程式碼並不算是很長,直接來看看效果

從上面的動圖中我們可以將這兩種查詢方式,進行一個鮮明的對比,同樣是資料的查詢,VBA的查詢,能夠清晰的將結果直接在資料來源中展示出來,並且高亮,結果一目瞭然。

而相對的,Excel自帶的查詢功能,雖然也可以找到資料,但是返回的結果差強人意

一比較就知道哪種效果更加的好了

程式碼解析

老規矩,既然實現了效果,我們就來進入到程式碼的解析。

今天程式碼的核心其實就是單元格的查詢

在Excel中我們都是按下CTRL+F實現查詢功能的,那麼在VBA中呢?

Set rng = 。Find(s)

也是這樣簡單的一句話,find的就是查詢的意思,非常好理解。

然後進入今天的程式碼核心邏輯。

單元格查詢的邏輯才是程式碼的核心。

Set rng = 。Find(s)

If Not rng Is Nothing Then

frng = rng。Address

Set trng = rng

Else

MsgBox “無匹配資料”

Exit Sub

End If這是最開始的一段程式碼,這段程式碼要實現的內容是什麼呢?

在整個rng這個中查詢滿足條件的第一個單元格

如果第一個單元格存在,才需要後面的操作,繼續尋找第二個

反之如果第一個單元格都不存在,就說明這個區域並沒有我們要找的資料,可以直接結束程式了。

如果存在第一個單元格,我們先將這個單元格重新定義為trng

然後得到trng的單元格位置,如何得到單元格的位置呢?

frng = rng。Address

為什麼要獲得單元格的位置呢?是不是很好奇?別急,我們先繼續往下走

有了第一個單元格之後,我們就可以查詢第二個單元格了

如何查詢第二個單元呢?

Set rng = 。Find(s, after:=rng)‘第二個單元格

Set rng = 。Find(s)’第一個單元格

我們將這兩個程式碼放在一起比較一下

方法都是一樣的,都是透過rng。find方法,唯一不同的就是在查詢第二個單元格的時候,多了後面一部分

after:=rng

這是什麼意思呢?

after明顯就是後面的意思,rng就是我們上面已經得到的第一個單元格,合起來就是從第一個單元格往後找,看下圖

此B3這個單元格往後找,才會來到C6這個單元格,如果 after:=rng這句話,那麼會是什麼結果呢?

從上面的結果來看,最終返回的結果只有第一個單元格高亮了。

綜上說明,如果沒有after:=rng的話,程式碼是不會繼續往下查詢的,只會找到第一個單元格就跳出迴圈了,這點,大家在使用的時候要注意

這是要注意的第一個點

上面我們不是留下一個小懸念,為什麼我們要獲得第一個單元格的位置呢?

現在就用到了。

If frng <> rng。Address Then

這裡為什麼還要判斷一下位置呢?

雖然我們要找的是第二個單元格,但是不排除單元格區域內有且僅有一個滿足條件的,如果這個時候不作出判斷的話,就會一直無限死迴圈了。

這是要注意的第二個點

來看看實際的案例

可以看到,這兩個rng的位置是完全不同的,這樣就可以判斷,還存在第二個單元格,以此類推

最後利用單元格的union方法,將所有的單元格都彙總起來

一次性填充顏色高亮,就可以了

Set trng = Union(trng, rng)

上一篇:【學習】excel中的公式都在這裡了,你知道嗎?excel中的公式是這樣寫的!
下一篇:麻師傅命理風水: 4月份,財神偏愛,鹹魚翻身的3大星座,有你嗎?