AllExperts > Excel 
Search      
Excel
Volunteer
Answers to thousands of questions
 Home · More Excel Questions · Answer Library  · Encyclopedia ·
More Excel Answers
Question Library

Ask a question about Excel
Volunteer
Experts of the Month
Expert Login

Awards

About Us
Tell friends
Link to Us
Disclaimer

 
 
 
 
About Stuart Resnick
Expertise
I can answer questions relating to MS Excel formulas, or to programming with vba (Visual Basic for Applications) in the Excel environment. Please follow the following guidelines: your question should focus on one specific issue you want to learn. It's beyond the scope of this free service for me to create entire projects or complex vba solutions for you from scratch. You should be able to do most of the work yourself, and come here when you need help with a specific point you're stuck on. ALWAYS include a simple, concrete example illustrating what you want to learn. Explain this example in detail in the text of your question (what data is in which cells of which sheets, etc). Be very precise about the results you want, using this sample to make the logic clear. Always keep these examples SIMPLE. Never e.g. use 18 worksheets in your example if using 2 or 3 will do. Never use ranges like AI567:BB865 if using a range like A1:B3 will do. Thanks.

Experience
As a consultant, I've designed Excel tools since the 90s, working for the Federal Reserve Bank, AT&T, and (currently) Gap Inc.

Education/Credentials
My only "education" comes from 2 decades of doing spreadsheet/programming work, with major SF Bay Area corporations such as AT&T, Federal Reserve Bank, and Gap Inc.

 
   

You are here:  Experts > Computing/Technology > Microsoft Software > Excel > Use VB to sort a table from a dropdown menu

Excel - Use VB to sort a table from a dropdown menu


Expert: Stuart Resnick - 11/20/2008

Question
I've been working on this for a few hours, and I seem to be running in circles.  I want to automatically change a table of values based on what sorting criteria are used in a dropdown menu.  Basically- I have student's names in Column A, and various tests and quizzes in Columns B through L.  I have a dropdown menu (named as "Sort") that also has the list of all tests and quizzes given.  I want to be able to just click "Test 4" from the dropdown menu and have every row without a score in it in the column containing "Test 4"'s scores to be hidden.  But then I also want to be able to pick "Quiz 1" from the dropdown menu and not have to un-hide all previously hidden rows from "Test 4".  This is sounding confusing, but I know it must be something simple I'm missing.  Here's the code I've put together so far.  Any help you can give me is greatly appreciated.


' Using worksheet_change so that whenever I change the dropdown menu cell it will run this macro

Private Sub worksheet_change(ByVal target As Range)
Dim myRg As Range

' "Sort" is what I used for the name of the dropdown menu cell
If Not Intersect(target, Me.Range("Sort")) Is Nothing Then

If Range("Sort").Value = "All Names" Then
   Range("A5").Select
   Selection.AutoFilter Field:=1, Criteria1:="<>"
   
If Range("Sort").Value = "Test 1" Then
   Range("B5").Select
   Selection.AutoFilter Field:=1, Criteria1:="<>"
   
If Range("Sort").Value = "Test 2" Then
   Range("C5").Select
   Selection.AutoFilter Field:=1, Criteria1:="<>"
   
If Range("Sort").Value = "Test 3" Then
   Range("D5").Select
   Selection.AutoFilter Field:=1, Criteria1:="<>"
   
If Range("Sort").Value = "Test 4" Then
   Range("E5").Select
   Selection.AutoFilter Field:=1, Criteria1:="<>"
   
If Range("Sort").Value = "Quiz 1" Then
   Range("F5").Select
   Selection.AutoFilter Field:=1, Criteria1:="<>"
   
If Range("Sort").Value = "Quiz 2" Then

   Range("G5").Select
   Selection.AutoFilter Field:=1, Criteria1:="<>"
   
If Range("Sort").Value = "Quiz 3" Then

   Range("H5").Select
   Selection.AutoFilter Field:=1, Criteria1:="<>"
   
If Range("Sort").Value = "Quiz 4" Then

   Range("L5").Select
   Selection.AutoFilter Field:=1, Criteria1:="<>"
   
End If
End If
End Sub

Answer
Private Sub worksheet_change(ByVal target As Range)
   Dim sortBy As String
   If Not Intersect(target, Me.Range("Sort")) Is Nothing Then
       sortBy = target.Value
       Me.AutoFilterMode = False
       If sortBy = "All Names" Then
           Range("A5").AutoFilter Field:=1, Criteria1:="<>"
       ElseIf sortBy = "Test 1" Then
           Range("B5").AutoFilter Field:=2, Criteria1:="<>"
       ElseIf sortBy = "Test 2" Then
           Range("C5").AutoFilter Field:=3, Criteria1:="<>"
'etc etc for other sort options...
       End If
   End If
End Sub

Add to this Answer   Ask a Question


 
About Excel
This topic answers questions related to Microsoft Excel spreadsheet (or workbook) stand-alone or Mircrosoft Office Excel including Excel 2003, Excel 2007, Office 2000, and Office XP. You can get Excel help on Excel formulas(or functions), Excell macros, charting in Excel, advanced features, and the general use of Excel. This does not provide a general Excel tutorial nor the basics of using a spreadsheet. It provides specific answers to using Microsoft Excel only. If you do not see your Excel question answered in this area then please ask an Excel question here
User Agreement | Privacy Policy | Kids' Privacy Policy | Help
Copyright  © 2008 About, Inc. AllExperts, AllExperts.com, and About.com are registered trademarks of About, Inc. All rights reserved.