hy A Search Box

Published on January 2017 | Categories: Documents | Downloads: 34 | Comments: 0 | Views: 292
of 5
Download PDF   Embed   Report

Comments

Content

hy A Search Box?
Ever since search engines came into fruition (I can still remember those Yahoo! commercials),
search boxes have become an experience that everyone has become accustomed to. Can you
think of the last time you have been on your computer and haven't interacted with some sort of
search box or even anomnibox?
It's unfortunate that Excel doesn't have a form control search box (maybe in the future?) as I
could see that type of tool opening the doors to a ton of creative and time saving functionalities.
But luckily you can create a search box on your own. In this post I will walk you through how to
create a gorgeous-looking search box that can filter your data to only show your search results.
First I will show you how to set it up and then you will learn how to tweak the VBA code to fit
your setup.

Creating Your Search Box User Interface
Your search UI (user-interface) can look however you want as long as there is a place for your
user(s) to enter in some text and a search button for them to click. The above image shows how
I will typically create my UI. I use a nice clean textbox to hold the search text and flat-styled,
rounded rectangle shape for the button.

Get Fancy With Option Buttons
Instead of only allowing your users to filter on a single column, why not let them search through a
few? By integrating Option Buttons with your search box you can have your users specify which
column they want to search in. To insert the Option Buttons you will need to
1.

Navigate to your Developer Tab in the Ribbon

2.

Click the Insert drop down button in the Controls group

3.

Select the Option Button Form Control (first row, last icon)

4.

Your mouse should now look like cross hairs and you will just want to click somewhere on
your spreadsheet to draw the Option Button
After you draw a couple of Option Buttons, you can drag them into place so that they are
relatively close to your search box. You can use the alignment tools to make everything look
professional with even spacing.

One Pitfall

The one pitfall that I could not seem to get around is that fact that after entering in your search
text, you need to click outside of the textbox before you can click on the Search button. There
are two workarounds that I could think of:
1.

Instead of using a textbox, use a cell to hold the search text

2.

Assign a keyboard shortcut to execute the macro, alleviating the need to click the Search
button
I typically go the shortcut route as I like having the ability to place my search box wherever I
want on my spreadsheet.

Now For The VBA!
Naming Your Objects
The key to getting this code to work well is to setup your objects (aka form controls) properly.
First you will need to determine the name of the text box that is holding your search term. To do
this, you need to select the text box and then look at the Name Box (which is located to the left
of the Formula Bar).
Typically you will see a default name of "Text Box 1", however you can change this name to
something more meaningful like "UserSearch". Make sure you hit the Enter key immediately
after typing in your new name to apply the name change! If you click outside of the Name Box
before hitting enter, your text box will revert back to it's previous name.
For your Option Buttons you will not need to change their object names (unless you really want
to). You will, however, need to ensure that their text is verbatim with the data headings you will
be filtering on. Notice how all my example Option Button's have the exact same text as the
headings in my data. This isEXTREMELY important as the VBA code below will be filtering based
on the text associated with the selected Option Button.

Searching For Text Only
This macro will allow you to filter on any column with a text value within it. The macro uses an
open ended search (designated by the asterisk symbol before and after the search term). This
means that you could search "whi" and the search would show any cell containing those 3
characters. If you want your search box to only filter on exactly what the user types, just remove
the asterisks from the VBA code.
To set up this code with your data you will need to designate your data range for the
variable DataRangeand you will also need to modify your text box name inside

the Shapes reference. If your data does not start in Column A you may need to add or subtract
from the myField variable to ensure you are filtering on the correct column number associated
with your data set.

Sub SearchBox()
'PURPOSE: Filter Data on User-Determined Column & Text
'SOURCE: www.TheSpreadsheetGuru.com
Dim myButton As OptionButton
Dim MyVal As Long
Dim ButtonName As String
Dim sht As Worksheet
Dim myField As Long
Dim DataRange As Range
'Unfilter Data (if necessary)
On Error Resume Next
ActiveSheet.ShowAllData
On Error GoTo 0
'Filtered Data Range
Set DataRange = Range("A4:E31")
'Loop Through Option Buttons
For Each myButton In ActiveSheet.OptionButtons
If myButton.Value = 1 Then
ButtonName = myButton.Text
Exit For
End If
Next myButton
'Determine Filter Field
myField = WorksheetFunction.Match(ButtonName, DataRange.Rows(1), 0)
'Filter Data
DataRange.AutoFilter _
Field:=myField, _
Criteria1:="=*" & ActiveSheet.Shapes("UserSearch").TextFrame.Characters.Text & "*", _
Operator:=xlAnd
'Clear Search Field
ActiveSheet.Shapes("UserSearch").TextFrame.Characters.Text = ""
End Sub

Searching For Text & Numerical Values
This VBA code is the exact same setup as the previous code but it has a few extra lines added to
handle both numerical and text inputs from your user.

Sub SearchBox()
'PURPOSE: Filter Data on User-Determined Column & Text/Numerical value
'SOURCE: www.TheSpreadsheetGuru.com
Dim myButton As OptionButton
Dim SearchString As String
Dim ButtonName As String
Dim sht As Worksheet
Dim myField As Long
Dim DataRange As Range
'Unfilter Data (if necessary)
On Error Resume Next
ActiveSheet.ShowAllData
On Error GoTo 0
'Filtered Data Range
Set DataRange = Range("A4:E31")
'Retrieve User's Search Input
mySearch = ActiveSheet.Shapes("UserSearch").TextFrame.Characters.Text
'Determine if user is searching for number or text
If IsNumeric(mySearch) = True Then
SearchString = "=" & mySearch
Else
SearchString = "=*" & mySearch & "*"
End If
'Loop Through Option Buttons
For Each myButton In ActiveSheet.OptionButtons
If myButton.Value = 1 Then
ButtonName = myButton.Text
Exit For
End If
Next myButton
'Determine Filter Field
myField = WorksheetFunction.Match(ButtonName, DataRange.Rows(1), 0)
'Filter Data
DataRange.AutoFilter _
Field:=myField, _
Criteria1:=SearchString, _
Operator:=xlAnd
'Clear Search Field
ActiveSheet.Shapes("UserSearch").TextFrame.Characters.Text = ""
End Sub

Get The Example File
If you would like to receive the example Excel file I created (shown above in the animated GIFs)
you can become a subscriber to my free email newsletters. All my subscribers receive instant
access to all example files posted to TheSpreadsheetGuru.com and they also get emails filled with
my exclusive tips & tricks that are not published on this website. Join the thousands of
subscribers and start learning how you can become a guru for your company!

Sponsor Documents

Or use your account on DocShare.tips

Hide

Forgot your password?

Or register your new account on DocShare.tips

Hide

Lost your password? Please enter your email address. You will receive a link to create a new password.

Back to log-in

Close