Using Arrays To Update Table Columns

Share

Facebook
Twitter
LinkedIn

Using Arrays To Update Table Columns

We are creating a lot of reports everyday and these reports contain a lot of data which is presented in various styles as per the requirements. The data that allows us to create the reports is usually referred as raw data and in most of the cases is stored in hidden sheets.

I am sure you all are aware of a feature called as Excel Tables OR Structured References in Excel. Excel Tables is (in my opinion) the best way to store your raw data and put Formulas in the columns where necessary, this way you eliminate the need of a Cell Based Reference formula (example =SUM(B4:B50) and replace them with =sum(YourTable[YourTableColumnName]).

Another good feature of the Excel Tables is you just need to put the formula in 1 cell and it is replicated for that column by Excel.

Sometimes these formulas take a lot of time to calculate when we have really huge data points. In this scenarios it is better to have hard-coded values instead of the formulas to gain on speed.
In this post we will learn about how we can make use of Array’s to quickly populate the excel columns with the desired results before publishing our reports and other documents.

Here is a demo of what I mean:

using-array-to-update-table-columns

Below is the code that allows us to add a new column to our data table and then taking input from the Date Time column provides us with the Week Of column.

Sub UpdateWeek()
Dim myarray As Variant
Dim theRange As Range, startCellRow As Long
Dim tempStr As String
Dim myNewCol As ListColumn

‘If our column already exists then delete it
On Error Resume Next
Worksheets(“Data”).ListObjects(“cs”).ListColumns(“WeekOf”).Delete

‘adding our new column
Set myNewCol = Worksheets(“Data”).ListObjects(“cs”).ListColumns.Add
myNewCol.Name = “WeekOf”

‘Selecting the first cell of the column that contains our dates
Worksheets(“Data”).ListObjects(“cs”).ListColumns(“Date Time”).Range.Cells(2).Select

‘building a temporary Range address, this will be used to upload the entire range into the array

tempStr = ActiveCell.Address
startCellRow = ActiveCell.Row
tempStr = tempStr & “:$” & Mid(Sheets(“Data”).ListObjects(“cs”).ListColumns(“Date Time”).Range.Cells(2).Address, 2, 1) & “$”

tempStr = tempStr & LastRowInOneColumn(Mid(Sheets(“Data”).ListObjects(“cs”).ListColumns(“Date Time”).Range.Cells(2).Address, 2, 1))
‘loading the range into the array

myarray = Range(tempStr).Value

‘Looping through the array and converting each element to the relevant Week format
For i = LBound(myarray) To UBound(myarray)
myarray(i, 1) = Format(myarray(i, 1) – Weekday(myarray(i, 1), vbMonday) + 1, “ddd dd-mmm”)
Next

‘Setting the range address for our output column

Set theRange = Range(Cells(startCellRow, Worksheets(“Data”).ListObjects(“cs”).ListColumns(“WeekOf”).Range.Column), Cells(UBound(myarray) + (startCellRow – 1), Worksheets(“Data”).ListObjects(“cs”).ListColumns(“WeekOf”).Range.Column))
‘storing the values from our array to the WeekOf Column

theRange.Value = myarray
End Sub

Let’s Understand the code

We first delete the column if it is already existing to make sure we always get the new values as output. This is done by the below line of code.

Worksheets("Data").ListObjects("cs").ListColumns("WeekOf").Delete

Once we have deleted the column, we add it again as a blank column and change the name to “Week Of”.

Set myNewCol = Worksheets("Data").ListObjects("cs").ListColumns.Add
myNewCol.Name = "WeekOf"

After this we need to select the first cell of the column that contains the Date Time.

Worksheets("Data").ListObjects("cs").ListColumns("Date Time").Range.Cells(2).Select

Once we have selected the first cell of you Date Time column we then make use of the LastRowInOneColumn function to get the last row and create a range address. We use this range address to assign all the values contained in the Date Time column to an array.

tempStr = ActiveCell.Address
startCellRow = ActiveCell.Row
tempStr = tempStr & ":$" & Mid(Sheets("Data").ListObjects("cs").ListColumns("Date Time").Range.Cells(2).Address, 2, 1) & "$"

tempStr = tempStr & LastRowInOneColumn(Mid(Sheets(“Data”).ListObjects(“cs”).ListColumns(“Date Time”).Range.Cells(2).Address, 2, 1))
‘loading the range into the array
myarray = Range(tempStr).Value

Once we have loaded all the Date Time values into an array, we do a simple For loop to change the value in the array to the relevant Week Of

For i = LBound(myarray) To UBound(myarray)
myarray(i, 1) = Format(myarray(i, 1) - Weekday(myarray(i, 1), vbMonday) + 1, "ddd dd-mmm")
Next

We perform this operation on the same element and store the modified value in itself.
Once we have all these done, we need to define the Output range, that is where we need to the Week Of values to be stored. This is done by using the Range and Cell functions.

Set theRange = Range(Cells(startCellRow, Worksheets("Data").ListObjects("cs").ListColumns("WeekOf").Range.Column), Cells(UBound(myarray) + (startCellRow - 1), Worksheets("Data").ListObjects("cs").ListColumns("WeekOf").Range.Column))
'storing the values from our array to the WeekOf Column

theRange.Value = myarray

And lastly we assign all the values stored in the array to the new range address we have create above.

Download Demo File

Click here to download the demo file & use it to understand this technique.

What about you? Do you use them often? Please share your experiences, techniques & ideas using comments.

If you are new to VBA, Excel macros, go thru these links to learn more.

Join our VBA Classes

If you want to learn how to develop applications like these and more, please consider joining our VBA Classes. It is a step-by-step program designed to teach you all concepts of VBA so that you can automate & simplify your work.

Click here to learn more about VBA Classes & join us.

About Vijay

Vijay (many of you know him from VBA Classes), joined chandoo.org full-time this February. He will be writing more often on using VBA, data analysis on our blog. Also, Vijay will be helping us with consulting & training programs. You can email Vijay at sharma.vijay1 @ gmail.com. If you like this post, say thanks to Vijay.

Facebook
Twitter
LinkedIn

Share this tip with your colleagues

Excel and Power BI tips - Chandoo.org Newsletter

Get FREE Excel + Power BI Tips

Simple, fun and useful emails, once per week.

Learn & be awesome.

Welcome to Chandoo.org

Thank you so much for visiting. My aim is to make you awesome in Excel & Power BI. I do this by sharing videos, tips, examples and downloads on this website. There are more than 1,000 pages with all things Excel, Power BI, Dashboards & VBA here. Go ahead and spend few minutes to be AWESOME.

Read my storyFREE Excel tips book

Overall I learned a lot and I thought you did a great job of explaining how to do things. This will definitely elevate my reporting in the future.
Rebekah S
Reporting Analyst
Excel formula list - 100+ examples and howto guide for you

From simple to complex, there is a formula for every occasion. Check out the list now.

Calendars, invoices, trackers and much more. All free, fun and fantastic.

Advanced Pivot Table tricks

Power Query, Data model, DAX, Filters, Slicers, Conditional formats and beautiful charts. It's all here.

Still on fence about Power BI? In this getting started guide, learn what is Power BI, how to get it and how to create your first report from scratch.

49 Responses to “Introduction to Slicers – What are they, how to use them, tips, advanced techniques & interactive reports using Excel Slicers”

  1. Great article!
    If you want to learn a bit more about using slicers in VBA, head over here:
    http://jkp-ads.com/articles/slicers03.asp

  2. XLarium says:

    Hi

    I downloaded cube-formula-slicer-selection.xlsx.
    Why is 'Report Connections' grayed out?

  3. Carlos Gonzalez says:

    Great article!! Thank you very much... This post is one of the most helpful for my job!

  4. TKSSKT says:

    Great Introduction. Thanks very much.

  5. Mando says:

    Wow! trying to use this on the reports that I have now. I really liked that Quantity and Amount Bar graph used on the pivot-multi tab, but for the life of me, I can't seem to replicate it from scratch. Help please?

  6. Abhilash VK says:

    This is awesome! I will favorite this page in my blog, http://www.exceltoxl.com

  7. MrXInDowntown says:

    Since I've known slicers about 2-3 yrs ago, I've pretty much used them in every damn report I do. Everyone that sees it for the first time is like "This is the best thing ever. Did you do that using excel or something else?" 😀 My bosses are so used it that when they see a report from someone else that doesn't have slicers they send it to me to redo it :).

  8. MrXInDowntown says:

    Couple of tips:-
    Tip 1:
    If for lack of space or say you want ability to search within a filter due to numerous values being present but still want it to connect to multiple pivot tables or charts then
    1. Setup a pivot table with just the report filter
    2. Create a slicer with the same field and tie that to all the pivot tables/charts that you want.
    3. Just place it some out of sight.
    Now you have a dropdown with all your values with search option plsu it is also connected to all your charts and pivot tables.

    TIP 2:
    In Excel 2013, slicers can be used with just plain tables as well. Not limited to pivot tables.

  9. Paulo says:

    Congrats!

    Nice content : )

  10. indzara says:

    Very comprehensive. Explained in an extremely simple way. I have been using Slicers for a while, but still learnt new things from this post. Thanks for sharing. Best wishes.

  11. excel says:

    Awesome Explanation !!

  12. Raj says:

    I have joined this blog recently. Brilliant tools are available that I started using in my day to day work. Brilliant site. Thanks heaps.

  13. […] Read the full article here: Introduction to Slicers – What are they, how to use them, tips, advanced techniques & interact… […]

  14. Kim says:

    Oh wow. I've only just started using Excel 2010 and had no idea this even existed. It makes dynamic charts so much easier!

  15. Clare says:

    You are my Hero! I am working with PowerPivot due to the huge amount of data I have and could not use my usual tricks to get the scatter chart title to change. For some reason the CUBE function wouldn't work (who knows why, I don't have time to dig into it now) but your "dummy" solution did.
    thankyouthankyouthankyou!
    Clare

  16. Stevie D says:

    On a normal PivotTable filter, you can choose whether to allow multiple items to be selected or not. Is that possible with slicers (in Excel 2010)? I've had a look through the options and not found a way to do it yet!

    • Chandoo says:

      Hi Stevie... this is not possible with slicers.

      • Jo says:

        Just hold down control when you're choosing them...can then either click another (without control) and it will show only the new one, or click the filter with the red 'x' to revert back to all options.

        Not a limitation that can be placed on the slicer but still a potential workaround depending on your needs.

  17. Rushabh Gala says:

    Very comprehensive note on slicer. I haven't yet used ms excel 2010, but learnt Slicer tool very well

  18. Arif says:

    How should I apply Slicer in excel 2010 version, not able find options
    as directed, could you please tell me that step by step

  19. Mary Ellen says:

    I have a longitudinal line graph with the count of exams scored at each level(1-4). I need a longitudinal line graph that shows the percentage for each level. I made my pivot with the count in the field settings with a calculation of % of row total. This works great until you add a slicer fo that you can look at one level at a time. When I do this, it shows as 100% because it seems to lose the rest of the row calculations. How can I set it up to show the percent. I do not have the option of adding it to my data table. I am using straight Pivot, not PowerPivot.

  20. Carla says:

    Hi, thanks for these tips. Is it possible to link a slicer to *different data sets*? All my data sets have a "year_opened" and "month_opened" fields, and I'd like do a single filter and update everything at once. Is that possible?

  21. Rafael says:

    Hi,
    Can someone tell me how to format a date field in a slicer to tell July 2016 instead of 07/31/2016?

    Thanks in advance.

  22. blk says:

    Great post - easily explainable for non excel whiz.

  23. Artieboy says:

    Thanks for the slicers post. I'm knew to this feature so don't be to harsh on me 🙂

    In the example bar chart graph: "Quantity breakup by Customer Profession and & Product category" you get a different picture depending on which area is chosen "East, Middle, North, South, West". That part I get. But the graph itself doesn't specify which region you are in.

    Is it possible to put the filtered criteria into the Chart title. For example if I chose West, the title would read "Quantity breakup by Customer Profession and & Product category - West".

    Is that possible? Just curious. Thanks

    • Jo says:

      It is possible...I have this on a number of my reports.
      1) create a pivot table with just the column your slicer is set on
      2) assign the slicer to that pivot table
      3) create a string in cell B3 (or wherever):
      ="Quantity breakup by Customer Profession & Product Category- "&A3
      (assuming that A3 is the cell that the chosen region appears in)
      4) click (once) on the graph title, then in the formula bar type =B3
      As you change the slicers, B3 will update as will the chart title.

      Couple of tips:
      1) if you need to have a new line for the title, use CHAR(10) e.g.
      ="Quantity breakup by Customer Profession & Product Category"&CHAR(10)&A3
      (this will have the region on a new line)
      2) if multiple regions will be chosen, I've added in an IF statement
      =IF(COUNTA(A3:A10)>1,"Multiple Regions",A3)
      (I'm sure there are ways to concatenate the strings but for mine it could get up to 20 and that just gets ridiculous for the graph heading)

  24. Sumit says:

    Just Wow

  25. Teri says:

    I am trying to create a duplicate dashboard using data in one workbook and creating a new workbook to place in a shared file for my coworkers. I have created a separate worksheet in the original workbook for the new pivot charts and slicers I want to use in the new workbook/dashboard. I don't want all of the source data in the new workbook, as it is very large. I am having trouble making new slicers work. They work in the original workbook, but when I copy them to the new workbook they don't work. Am I going about this the right way or is there an easier way?

  26. mikael says:

    Very good post! Helped a lot. Keep up the good work!

  27. Anthony says:

    how can you prevent multiple selection in a slicer box? In short, in any slicer box, only one entry is allowed and not multiple entries.

  28. Sheikh Mishuk says:

    I have 2 files. (1. .xlsx 2. .xlsm)
    1 file contains all the pivot tables and charts. its also macro enabled.
    2nd file contains the source data which is a .xlsx file.

    but I am unable to run slicer on my 1st file.
    can anybody help me out?

  29. Philip Hinton says:

    chandoo.org: one of my favourite Excel sites for years.
    Slicers tutorial: excellent as usual.
    Animated gifs: sorry, but REALLY distracting!! Especially with two on the same screen. Is there any way they can be activated only when we click on them, or something?

  30. Virupaksha says:

    Hi Team,

    I have inserted a slicer to a pivot table with 4 fields...I need to add another field for the same slicer...help me with this..

  31. Candida says:

    First of all I would like to say terrific blog!
    I had a quick questio in whiich I'd like to ask if you don't
    mind. I was intereested to know how you center yourself and clear your head
    before writing. I've had a hard time clearing my mind in getting my ideas out there.
    I do enjoy writing however it just seems like the first 10 to 15 minutes are generally lost simply just tryying to figure out how
    to begin. Any recommendations oor tips? Many thanks!

  32. H says:

    Hi All

    Im trying to connect a slicer to 2 pivot tables with different sources

    Both data tables have been sorted and have duplicates

    ie

    Table 1

    Name Week FTe
    A 1 7.2
    A 2 7.3
    B 1 7.3
    B 2 7.3

    Table 2

    Name Month Fte
    A Jan 2.6
    A Feb 3.2
    A Mar 4.4
    B Jan 2.2
    B Feb 6.4
    B Mar 2.2

    etc

    I have created 2 pivot tables and have sorted it out the way i want with charts etc

    Now all i want is to connect the Name Slicer to be connected to both of those pivot tables but problem is they have duplicates and are from different tables/sources

    how can i connect/add this to a data model and connect to my name slicer?

    Im sure it maybe something simple but minds not with it

    So in short 1 to connect 1 slicer to 2 different pivots from different sources but not all pivots (There are dups in both) - as shown in the example

    Thank You

    • Chandoo says:

      Hi H
      This is how you can do it. Create a third table with all slicer options (in this case it would be Name column) with one row per unique value. Now add this table to your source list. Then link all two tables via this third table thru Data ribbon > Manage relationships feature. Finally add a slicer on this third table column and link the slicer to both pivot charts.

      Please note that you need to construct the tables and charts after data model is created.

      See this page for more explanation on how to use relationships - https://chandoo.org/wp/introduction-to-excel-2013-data-model-relationships/

  33. Cyleste says:

    Hi,

    Using Cube Value with Slicers is great. I am new to cube value, but it is so powerful. I am stuck on an issue where I want to filter on a slicer for all values except 1 and the slicer has thousands of values. I get #N/A in the results, when trying to do this. Any ideas on how to do an exception calc or how to get around this with the multi select slicer functionality?

    Thanks in advance.

    Cyleste

    • Chandoo says:

      @Cyleste... thanks for your comments and welcome to Chandoo.org. You can use DAX to calculate such things as Excel pivot tables alone cannot function like the way you want. You can use DAX formula EXCEPT() to achieve this. For example,
      =CALCULATE(SUM(data[sales]), EXCEPT(ALL(data[filter_column]), VALUES(data[filter_column]))) can tell you the sum of [sales] column in the data table by ignoring slicer selected values.

      Hope that helps.

      • Cyleste says:

        Hi Chandoo,

        Thank you for your quick reply. I am not familiar with DAX but it sounds like I won't be able to apply the calculation you provided after converting the power pivot to excel formulas via OLAP.

        Cyleste

  34. José Manuel Agundis says:

    Thanks Chandoo, I like yours tricks & always I use slicers. Regards from México.

  35. Girish says:

    Hi Chandoo,

    I have a lot of text in the slices (Pivot table). The text is not completely visible. What should I do?

    Please Help

    Thanks

  36. Chris Brown says:

    Thanks so much for this, it's brilliant! I think it's almost there - I've actually followed the steps on the example linked in my post. I just can't get it to filter properly; it just returns 0 when I add a date into Cell O2. Should I be doing it differently?

  37. ??? says:

    slicers dont work with non-admin roles in OLAP Pivot Tables

Leave a Reply