Get Stock Quotes using Excel Macros [and a Crash Course in VBA]

Share

Facebook
Twitter
LinkedIn

This is a guest post by Daniel Ferry of Excelhero.com.

Excel Stock Quotes - using VBA Macors to fetch live stock quotes from Yahoo Finance to ExcelHave you ever wanted to fetch live stock quotes from excel? In this post we will learn about how to get stock quotes for specified symbols using macros.

One method that has worked well for my clients can be implemented with just a few lines of VBA code. I call it the ActiveRange.

An ActiveRange is an area on a worksheet that you define by simply entering the range address in a configuration sheet. Once enabled, that range becomes live in the sense that if you add or change a stock symbol in the first column of the range, the range will automatically (and almost instantly) update. You can specify any of 84 information attributes to include as columns in the ActiveRange. This includes things such as Last Trade Price, EBITDA, Ask, Bid, P/E Ratio, etc. Whenever you add or change one of these attributes in the first row of the ActiveRange, the range will automatically update as well.

Sound interesting, useful?

In this post, you can learn how to use excel macros to fetch live stock quotes from Yahoo! Finance website. It is also going to be a crash course in VBA for the express purpose of learning how the ActiveRange method works so that you can use it yourself.

Download Excel Stock Quotes Macro:

Click here to download the excel stock quotes macro workbook. It will be much easier to follow this tutorial if you refer to the workbook.

Background – Understanding The Stock Quotes Problem:

The stock information for the ActiveRange will come from Yahoo Finance. A number of years ago, Yahoo created a useful interface to their stock data that allows anyone at anytime to enter a URL into a web browser and receive a CSV file containing current data on the stocks specified in the URL. That’s neat and simple.

But it gets a little more complicated when you get down to specifying which attributes you want to retrieve [information here]. Remember there are 84 discreet attributes available. Under the Yahoo system, each attribute has a short string Tag Code. All we need to do is to concatenate the string codes for each attribute we want and add the resulting string to the URL. We then need to figure out what to do with the CSV file that comes back.

Our VBA will take care of that and manage the ActiveRange. Excel includes the QueryTable as one of its core objects, and it is fully addressable from VBA. We will utilize it to retrieve the data we want and to write those data to the ActiveRange.

Before we start the coding we need to include two support sheets for the ActiveRange. The first is called “YF_Attribs”, and as the name implies is a list of the 84 attributes available on Yahoo Finance along with their Yahoo Finance Tag Codes. The second sheet is called, “arConfig_xxxx” where xxxx is the name of our sheet where the ActiveRange will reside. It contains some configurable information about the ActiveRange which our VBA will use.

All of the VBA code for this project will reside inside of the worksheet module for the sheet where we want our ActiveRange to be. For this tutorial, I called the sheet, “DEMO”.

Writing the Macros to Fetch Stock Quotes:

Adding VBA Code to Worksheets - Excel Stock Quotes

Press ALT-F11 on your keyboard, which will open the VBE. Double click on the DEMO sheet in the left pane. We will enter out code on the right. To begin with, enter these lines:

Option Explicit
Private rnAR_Dest As Range
Private rnAR_Table As Range
Private stAR_ConfigSheetName As String

Always start a module with Option Explicit. It forces you to define your variable types, and will save you untold grief at debugging time. In VBA each variable can be one of a number of variable types, such as a Long or a String or a Double or a Range, etc. For right now, don’t worry too much about this – just follow along.

Sidebar on Variable Naming Conventions

Variable names must begin with a letter. Everyone and their brother seems to have a different method for naming variables. I like to prefix mine with context. The first couple of letters are in lower case and represent the type of the variable. This allows me to look at the variable anywhere it’s used and immediately know its type. In this project I’ve also prefaced the variables with “AR_” so that I know the variable is related to the ActiveRange implementation. In larger projects this would be useful. After the underscore, I include a description of what the variable is used for. That’s my method.

In the above code we have defined three variables and their types. Since these are defined at the top of a worksheet module, they will be available to each procedure that we define in this module. This is known as scope. In VBA, variables can have scope restricted to a procedure, to a module (as we have done above), or they can be global in scope and hence available to the entire program, regardless of module. Again we are putting all of the code for this project in the code module of the DEMO worksheet. Every worksheet has a code module. Code modules can also be added to a workbook that are not associated with any worksheet. UserForms can be added and they have code modules as well. Finally, a special type of code module, called a class module, can also be added. Any global variables would be available to procedures in all of these. However, it is good practice to always limit the scope of your variables to the level where you need them.

In that vein, notice that the three variables above are defined with the word Private. This specifically restricts their scope to this module.

Every worksheet module has the built-in capability of firing off a bit of code in response to a change in any of the sheet’s cell values. This is called the Worksheet_Change event. If we select Worksheet from the combo box at the top and Change in the other combo box, the VBE will kindly define for us a new procedure in this module. It will look like this:

Adding Worksheet_Change Event

Private Sub Worksheet_Change(ByVal Target As Range)
End Sub

Notice that by default this procedure is defined as Private. This is good and as a result the procedure will not show up as a macro. Notice the word Target near the end of the first line. This represents the range that has been changed. Place code between these two lines so that the entire procedure now looks like this:

The Heart of our Excel Stock Quotes Code – Worksheet_Change()

Private Sub Worksheet_Change(ByVal Target As Range)

ActivateRange

If Worksheets(stAR_ConfigSheetName).[ar_enabled] Then

If Intersect(Target, rnAR_Dest) Is Nothing Then Exit Sub

If Target.Column <> rnAR_Dest.Column And Target.Row <> rnAR_Dest.Row Then

PostProcessActiveRange

Exit Sub

End If

ActiveRangeResponse

End If

End Sub

That may look like a handful but it’s really rather simple. Let’s step through it. The first line is ActivateRange. This is the name of another sub-procedure that will be defined in a moment. This line just directs the program to run that sub, which provides values to the three variables we defined at the top. Again, since those variables were defined at the top of the module, their values will be available to all procedures in the module. The ActivateRange procedure gives them values.

Next we see this odd looking fellow:

If Intersect(Target, rnAR_Dest) Is Nothing Then Exit Sub

All this does is check to see if the Target (the cell that was changed on the worksheet) is part of our ActiveRange. If it is the procedure continues. If it’s not, the procedure is exited.

The next line checks to see if the cell that was changed is in the first column or first row of the ActiveRange. If it is, the post processing is skipped. If the change is any other part of the ActiveRange, another sub-procedure (defined below) is run to do some post processing of the retrieved data, and then exits this procedure.

If the cell that changed was in the first column or the first row, the program runs another sub-procedure, called ActiveRangeResponse, which is also defined below. ActiveRangeResponse builds the URL for YF, deletes any previous QueryTables related to the ActiveRange, and creates a new QueryTable as specified in our configuration sheet.

That’s it. The heart of the whole program resides here in the Worksheet_Change event procedure. It relies on a number of other subprocedures, but this is the whole program. When a change is made in the ActiveRange’s first column (stock symbols) or its first row (stock attributes), ActiveRangeResponse runs and our ActiveRange is updated.

Understanding other sub-procedures that help us get the stock quotes:

So let’s look at those supporting subprocedures. The first is ActivateRange:

Private Sub ActivateRange()

stAR_ConfigSheetName = “arConfig_” & Me.Name

Set rnAR_Dest = Me.Range(Worksheets(stAR_ConfigSheetName).[ar_range].Value)

Set rnAR_Table = rnAR_Dest.Resize(1, 1).Offset(1, 1)

Worksheets(stAR_ConfigSheetName).[ar_YFAttributes] = GetCurrentYahooFinancialAttributeTags

End Sub

Again, all this does is give values to our three module level variables. In addition it builds the concatenated string of YF Tag Codes required for the URL. It does this by calling a function that I’ve defined at the very bottom of the module, called GetCurrentYahooFinancialAttributeTags.

The next subprocedure is ActiveRangeResponse:

Private Sub ActiveRangeResponse()

Dim vArr As Variant

Dim stCnx As String

Const YAHOO_FINANCE_URL = “http://finance.yahoo.com/d/quotes.csv?s=[SYMBOLS]&f=[ATTRIBUTES]”

vArr = Application.Transpose(rnAR_Dest.Resize(rnAR_Dest.Rows.Count – 1, 1).Offset(1))

stCnx = Replace(YAHOO_FINANCE_URL, “[SYMBOLS]”, Replace(WorksheetFunction.Trim(Join(vArr)), ” “, “+”))

stCnx = Replace(stCnx, “[ATTRIBUTES]”, Worksheets(stAR_ConfigSheetName).[ar_YFAttributes])

AddQueryTable rnAR_Table.Resize(UBound(vArr)), “URL;” & stCnx

End Sub

Notice that here we have variables defined at the top of this procedure and consequently their scope is limited to this procedure only. This means that we could have the same variable names defined in other procedures but those variables would not be related to these and would have completely different values.

Next notice that we have defined a constant. This is good practice, as it forces us to specify what the constant value is by naming the constant. I could have just used the value where I later use the constant, but then the question arises as to what is this value and where did it come from. Here I have named the value, YAHOO_FINANCE_URL, removing all doubt as to its purpose.

The next line is this:

vArr = Application.Transpose(rnAR_Dest.Resize(rnAR_Dest.Rows.Count - 1, 1).Offset(1))

and it deserves some explanation. Let me back up by saying that whenever we write or read multiple cells from a worksheet we should always try to do it in one go, rather than one cell at a time. The more cells involved the more important this is. Otherwise we pay a massive penalty in processing time. One of the best optimization techniques available is to replace code that loops through cell reads/writes and replace it with code that reads/writes all the cells at once. It can literally be hundreds to thousands of times faster.

Here we are interested in getting the list of all of the stock symbols in the first column of the ActiveRange. So how do we get them in one shot? We use something called a variant array. Notice that we defined vArr at the top of this procedure. A variant array is a special kind of variable that holds a list of values and it DOES NOT CARE what variable types those values are. This is important when retrieving data from a sheet because the data could be numbers, text, Boolean (True or False), etc. Variants are powerful, but they are much slower than other variable types, such as a Long for numeric data for example. However, in the case of retrieving or writing large chunks of data from/to a sheet the slight penalty of the variant is dwarfed by the massive increase in the speed of data transfer.

It’s very simple to retrieve range data (regardless of the size) into a variant array. All you do is:

v = range

where v is defined as a variant and range is any VBA reference to a worksheet range. And magically all of the values in that range are now in v. Note that v is not connected to the range. A change in any of v’s values does not propogate back to the range, and likewise a change to the range does not make it’s way to v all by itself. v will ALWAYS be a two-demensional array. The first dimension is the index of the rows, the second dimension is the index of the columns. So v(1,1) will refer to the value that came from the top left cell in the range. v(6,9) will hold the value that came from the cell in the range at row 6 and column 9.

For most circumstances this two-dimensional format is fine. But we are only retrieving one column of stock symbols. The procedure will still give us a two-dimensional array, with the column dimension being only 1 element wide. This is a shame because VBA has a wonderful function called Join that allows you in one step (no loop) to concatenate every element of an array into a string. You can even specify a custom string to delimit (go in-between) each element in the output string. The problem is that Join only works on single dimensioned arrays 🙁

But there’s always a way, right? We can use the Application.Transpose method on the 2-D array and presto we get a 1-D array. The rest of the line just specifies what range (the stock symbols) to grab.

The next two lines are:

stCnx = Replace(YAHOO_FINANCE_URL, "[SYMBOLS]", Replace(WorksheetFunction.Trim(Join(vArr)), " ", "+"))

stCnx = Replace(stCnx, "[ATTRIBUTES]", Worksheets(stAR_ConfigSheetName).[ar_YFAttributes])

Again a handful, but all we are doing here is replacing the monikers, [SYMBOLS] and [ATTRIBUTES] in the YAHOO_FINANCE_URL constant with the list of stock symbols (delimited by a plus sign) and the string of attributes.

In the final line of the procedure:

AddQueryTable rnAR_Table.Resize(UBound(vArr)), "URL;" & stCnx

we are running another subprocedure called, AddQueryTable and we are telling it where to place the new QueryTable and providing the connection string for the QueryTable, which in this case is the YF URL that we just built.

Nothing unusual happens in the AddQueryTable sub. It just deletes any existing AR related QueryTables and adds the new one according to the options in the configuration sheet.

The PostProcessActiveRange sub is interesting:

Private Sub PostProcessActiveRange()

If rnAR_Dest.Columns.Count > 2 Then

Application.DisplayAlerts = False

rnAR_Table.Resize(rnAR_Dest.Rows.Count).TextToColumns Destination:=rnAR_Table, DataType:=xlDelimited, Comma:=True

Application.DisplayAlerts = True

Worksheets(stAR_ConfigSheetName).[ar_LocalTimeLastUpdate] = Now

End If

End Sub

Processing Yahoo Finance Output using Query Table & Text-Import Utility:

As mentioned before the data from YF comes back as a CSV file. The QueryTable dumps this into one column. If you were only retrieving one attribute for each stock this would be fine as is. However, two or more attributes is going to result in unwanted commas and multiple attribute values squished into the first column of the QueryTable output. Unfortunately this is poor design by Microsoft, especially when you consider that the QueryTable does not behave like this when it is retrieving SQL data or opening a Text file from disk. You can actually specify this operation to be a text file and it will properly spread the output over all of the columns. To do so, you specify the disk location as being the URL of the YF CSV file, but as Murphy would have it, it’s unbelievably slow and pops up a status dialog as it slowly retrieving the CSV. Using the URL instruction instead of the TEXT instruction at the beginning of the connection string is incredibly fast in comparison, but dumps all of the data into the first column.

So what to do? We’ll just employ Excel’s built-in TextToColumns capability and bam, our data is where we want it.

Our finalized stock quotes fetcher worksheet should look like this:

Excel Stock Quotes - Final workbook - Demo

Download Excel Stock Quotes Macro:

Click here to download the excel stock quotes macro workbook. It will be much easier to follow this tutorial if you refer to the workbook.

Final Thoughts on Excel Stock Quotes

The ActiveRange technique is quite versatile. It can be implemented with other data sources such as SQL, or even lookups to other Excel files, or websites.

In this example it provides a nice way to easily track whatever stocks you may have interest in and up to 84 different attributes of those stocks. You can enable and disable the activeness of the ActiveRange on the fly. You can set the AR to AutoRefresh the data at periods that you set or to not refresh at all.

This is a basic implementation. For example, changing the AutoRefresh setting will have no effect until a new QueryTable is built. That won’t happen until you also add or change a stock symbol or add or change an attribute. An easy enhancement would be to add a little code to the arConfig_DEMO code module to respond to changes to the ar_AutoRefresh named range cell.

Another enhancement would be to eliminate the slight flicker of the update by moving the QueryTable destination to the arConfig_DEMO and then doing the TextToColumns with the destination set to the DEMO sheet. In an effort to simplify this tutorial I have left these easy enhancements as an exercise for you to implement.

Have a question or doubt? Please Ask

Do you have any questions or doubts on the above technique? Have you used ActiveRange or similar implementations earlier? What is your experience? Please share your thoughts / questions using comments.

I read Chandoo.org regularly and will be monitoring the post for questions. But you can also reach me at my blog:

Further References & Help on Excel Stock Quotes [Added by Chandoo]

This is a guest post by Daniel Ferry of Excel Hero.

Excel Hero is dedicated to expanding your notion of what is possible in MS Excel and to inspiring you to become an Excel Hero at your workplace. It has many articles and sample workbooks on advanced Excel development and advanced Excel charting.

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.

99 Responses to “How to use Date & Time values in Excel – 10 + 3 tips”

  1. [...] Date with my sheet - 10 tips on using date / time in excel (tags: excel totw) Posted in Uncategorized | [...]

  2. [...] More on date / time: 10 tips on using, formatting date / time in excel. [...]

  3. Vijay Sharma says:

    Hi Chandoo,

    Since this article was for Dates, below are 2 easy ones to calculate the Start and End of Month. (without using the EOMONTH formula as available in Analysis Toolpak).

    In Cell A1, put any date
    then in the cell where you would want the Start of Month put the below formula
    1. Start of the Month
    =DATE(YEAR(A1),MONTH(A1),1)

    2. End of Month
    =DATE(YEAR(A1),MONTH(A1)+1,0)

    Hope this would help a lot who were dependant of EOMONTH..

    cheers
    ~Vijay

  4. David B says:

    I run a trolley tour business and need to set up a data base to track tickets sold by mutable vendors (from store, on the street ,etc)and by class ( adult, senior,child and discounts ) can you help or direct me to one that could?

  5. Glenn says:

    I know how to write macro's for excel, but I have 1 issue that I cant figure out and would appreciate some help.
    I want to key a range of dates, (7/1/09-7/12/09) then write a macro to go find the info for that range and bring it back to my spread sheet.

    Thanks for any help....

  6. Chandoo says:

    @Glenn: you can try a user defined function if the information you want to gather can be derived only from the 2 dates entered. You can write a macro, if you need to refer to other ranges in the workbook to gather the info based on the dates entered. I am not sure what you meant by "go find the info for that range". May be if you tell what you are trying to find, I can suggest the approach for writing a macro...

  7. [...] Important excel formulas: IF and Then, Vlookup, Offset, Sumif, Countif, Working with date and time [...]

  8. [...] Tips on using date & time in excel, List of excel date & time formulas, More excel quick tips [...]

  9. sekhar says:

    talking about dates, therz a formula that i use very frequently to calculate the difference between two dates.
    its not documented in 2007 though

    =DATEDIF(START_DATE,END_DATE,"Y") - gives you the years
    =DATEDIF(START_DATE,END_DATE,"YM") - remaining months
    =DATEDIF(START_DATE,END_DATE,"MD") - remaining days

    im sure you'll know this. wonder why it isnt documented. works fine with 2003 and 2007

  10. Ray Solanki says:

    Help please... I have two dates eg: 1/8/10 - 10/8/10 and i would like to know the number of Fridays and Mondays in any given period

  11. Hui... says:

    Ray

    Try the following user defined function:
    ===

    Function NoMonFri(uStart As Range, uEnd As Range, Optional uType As Integer) As Double
    Count = 0
    For i = uStart To uEnd Step 1
    If Weekday(i) = 2 Or Weekday(i) = 6 Then Count = Count + 1
    Next i
    If uType = 1 Then
    If Weekday(uStart) = 2 Or Weekday(uStart) = 6 Then Count = Count - 1
    If Weekday(uEnd) = 2 Or Weekday(uEnd) = 6 Then Count = Count - 1
    End If
    NoMonFri = Count
    End Function

    ====
    Copy the above into a Code Module
    To use just enter
    =NoMonFri(A1, A2) or
    =NoMonFri(A1, A2,1)
    Where A1 & A2 are the Start and End Dates (inclusively)
    The use of the optional 1 will Exclude the Start and End dates

  12. Chandoo says:

    @Ray... You can also do this using SUMPRODUCT (ahem)

    Assuming first date is in C6 and second date is in C7,

    =SUMPRODUCT(--(MOD(WEEKDAY(ROW(INDIRECT(C6&":"&C7)),2),4)=1))

    Will give you the number of Mondays and Fridays between C6 and C7 (including both days)

    Also, checkout NETWORKINGDAYS() UDF for more complicated counting... http://chandoo.org/wp/2009/06/09/networkingdays/

  13. [...] Process your data: Assuming your data looks like what I shown to left, just use simple formulas to make it look like the table to right. [related: how to work with dates & times in excel] [...]

  14. Javed Iqbal says:

    very useful tip, thanks alot

  15. Chandra Shekar B says:

    Hello Chandoo,

    How to convert no into time. for ex: 3600(In Seconds) into 1:00:00

    Thanks,

    Chandra Shekar B

  16. Hui... says:

    @Chandra
    Times are a fraction of 1
    So 6am is 0.25
    12 noon is 0.5
    6pm is 0.75
    So convert hrs and mins to a fraction of 24 hrs
    1 Hr = 1/24
    3600 seconds = 3600/(24*3600)
    etc

  17. Chandru says:

    Hello Hui,

    Thanks a lot 🙂

  18. Patrick says:

    Hello,

    I cant get Point 6 above to work (highlighting weekends).

    Is there an actual example I can see in action anywhere?

    Otherwise a very helpful and informative website.

    Regards,

    Patrick

  19. Avinash says:

    Hi Chandoo,

    When discussing about time.. I have one question too. Basically, I have one sheet in which we enter "Shift IN" & "Shift OUT" times as "hh:mm" format in A and B columns and next columns C & D pulls the scheduled and present count of agents from other sheet by VLOOKUP-ing times as

    IN time (hh:mm) - OUT Time (hh:mm). For eg; 03:30 - 12:30

    Columns A and B have been validated to accept only values between 00:00~23:30 (half hour intervals). and when pasting data, the values are usually accepted and I don't get any errors of validation.
    But, when performing vlookup to get the number of scheduled agents say as of the time interval 03:30, I get an #N/A error. I have confirmed ranges are all fine, but what I found is that the time although shows same but they are actually of different days. Say for eg;

    41023.39583 gives 9:30
    41024.39583 gives 9:30 too..

    Validation is accepted as time is same, and it works fine if I select the time interval from the validation list. So, was wondering, if I can select the same interval from the list using VBA.. so that whatever the time intervals gets updated, I just need to run a macro to automatically select the interval from the validation list.. I have come across that we can use Cell.Validation.Formula1 in some manner to get the item from list.. but it would take the number of the item in the list.. wondered if I could get the item through text. Any ideas to accomplish this task?

    Regards,
    Avinash

    • vishwanatha says:

      in time - 9:30 am on 11/24/2015
      out time - 6:30 am on 11/25/2015

      I have to calculate total hours worked.

      Tell me the formula to calculate the total hours, please.

  20. sheila villena says:

    hi, 

    can you help me in, i just want to know how will i get the corresponding DAY when i entered a specific DATE?

    Thanks,

    Sheila 

    • Chander J says:

      Hi,

      Following could be a solution for findinng out correspoinding Day, Month & Year to a Date:

      =TEXT("CELL ADDRESS WHERE DATE IS PLACED","DDDD") ..... For Day

      =TEXT("CELL ADDRESS WHERE DATE IS PLACED","MMMM") ..... For Month

      =TEXT("CELL ADDRESS WHERE DATE IS PLACED","YYYY") ..... For Year

      One can also customized the view by reducing keywords which will promopt to the following results : Mon, J, Jan, 2007, 07 etc

  21. Navin says:

    hi,
    sir can u help me,
    how to set a validity period & date of time in microsoft excel.

    eg:- suppose i m using a file sheet and setting a date of 01.04.2012, time 12.00am & wan't dat the sheet should stop working in 1 month  date & time ( 30.04.2012 ).

    eg :- suppose we are going internet cafe dere we are taking a browsing of 1hour time, as we r close 2 our time d browsing stop working.

    in dis way i wan't sheet to be set by date & time.

    so pls help me how to do.

    thanks,
    navin.
     

  22. Suyash says:

    Hi,
    Sir ur article is very helpful....Thnaks for that but i need ur help in this one. i have a monthly report workbook and the sheets are saved by date of that month. I have two cells FromDate and ToDate through which opening and closing stock is calculated(using =SUM('01-09-2012:25-09-2012'!D7)+ SUM('26-09-2012:30-09-2012'!D8)) .....Please give me a formula when i will enter any date in ToDate  or FromDate cell it will automatically change the other cells formula so to give me sum.
    please help me
    thanks
    Suyash

  23. Azwa says:

    Hi Mr. Chandoo,

    I have 1 question. I have 1 pivot table, successfully done with your guidelines, but how to set Sunday as the start week? means the start day is Sunday, and the end day of the week is Saturday.

    TQ in advance. 
        

  24. Charlotte says:

    can someone please tell me that if i want the date of the month to appear on each sheet of my workbook how do i do it by itself? i mean the workbook is of meeting room bookings... so i want to print out sheets date wise for a whole year/

  25. [...] So the formula for end time cell is =start-time + duration-minutes / 24 / 60. Note: We need to divide by 24 & 60 because in Excel each day 1 number, each hour is 1/24th and each minute is 1/24/60th. [learn more about Excel dates] [...]

  26. niyas says:

    dear friends, please help me to calculate actual time within the range while actual time more or less of range?

     
     
     
     

    TIME IN
    TIME  OUT
    ACTUAL HRS
    ACUTAL HRS WITHIN RANGE (7:30:00 to 18:00:00)

    7:15:00
    18:15:00
    11:00:00
    ?

    7:45:00
    17:00:00
    9:15:00
    ?

     
     
     
     

  27. Saransh says:

    If I have dates in Indian format dd-mm-yyyy, excel is not recognizing the same and instead treating the same as mm-dd-yyyy so a date mentioned in Indian system as 09/06/2013 is being treated as 6-Sep-2013 whereas it actually represents 9-Jun-2013.
    Can I convert these dates in Indian format to corrected dd-mmm-yyyy system?

  28. maged says:

    Chandoo,

    Please i need an advise ASAP i have been using this statement and it cant help

    if(and(c1>=a1:a144,c1<=b1:b144),"yes","no"))

    and it just works for the first 2 values c1, c2 and doesn't fit for the others.
    the case is i have more than one event at the same video and i need to confirm that no event was taken unless it is between start and end.

    here are some samples:

    Start dtime End Dtime Event Dtime
    16/09/2013 22:13:34 16/09/2013 22:14:18 16/09/2013 22:13:38
    16/09/2013 22:15:57 16/09/2013 22:24:30 16/09/2013 22:16:02
    16/09/2013 22:24:30 16/09/2013 22:33:49 16/09/2013 22:17:32
    16/09/2013 22:33:53 16/09/2013 22:35:05 16/09/2013 22:19:02
    16/09/2013 22:35:05 16/09/2013 22:39:57 16/09/2013 22:20:02

    So as you can see there are more than one event between one start and end dtimes

    thanks guys

  29. Chandresh says:

    Hi Chandoo,

    I have an activity tracking sheet, in which column A has activity A, B, C, D & E and column B has start date, column C has start time, column D has end date & column E has end time. Now what i am trying to do is that suppose activity A starts on 31-Mar 9:00 AM and finishes an 4-Apr 5:00 PM and Activity B starts only after A completes, but if suppose Activity A is delayed by say 1 hour, then activity B, C, D & E which are all dependent on each other will also be delayed by 1 hour, i want to create a template in excel, could you please help?

    thanks

    Chandresh

  30. […] Day 32 Date and time arithmetic - The symbols / and – need to be used when inputting dates and Excel has the capability to add dates and times together too. Follow the Excel Easy article here on how http://www.excel-easy.com/functions/date-time-functions.html Chandoo also has some Top 10 tips too http://chandoo.org/wp/2008/08/26/date-time-tips-ms-excel/ […]

  31. Rokon says:

    Hi,
    What will b the formula to get the date more than 3 yrs from the present date ?

    Example : today is 16-05-2014 (D-M-Y) then three yrs later what will be the date.

  32. Rokon says:

    Hi,
    What will b the formula to get the date more than 3 yrs from the present date ?
    Example : today is 16-05-2014 (D-M-Y) then three yrs later what will be the date.

  33. chetan says:

    hi..i want to restrict excel from counting non working time.... so i can prepare end dates for a PROJECT if i have total working hours required for my project..

    thank for reply if any....

  34. Kalaivanan says:

    Hi,
    Good Morning,
    Please use the formula for the below mentioned format in excel.
    Formula :- =TEXT(H3,"dd-mmmm-yyyy").
    Format :- 17-September-2014

  35. Andres Parra says:

    I'm an evaluator and i evaluate about 20 people everymonth between 6-10 times each depending on their performance. i track my work in excel by adding the dates i did each peorson. The only rule that i have its that i cant evaluate a person back to back so i have to wait at least one day in between each evaluation. is there a formula where excel would not allow me to enter a date if its one day after the date of the cell to the left?

  36. jayson says:

    Could anyone please help me. I have not been able to find a format that I need. I need to subtract a value everyday. Example. If I have 365 dollars and I would like Excell to subtract 1 dollar everyday for a year I would have 0 dollars left at the end. Or even 7 dollars a week would work for me. Could anyone please help me on this formula. Thanks

  37. Laly says:

    Is there a simple way (no function) to define a formula in a cell like =F(22/08/2014) ?

    Currently, i put the date 22/08/2014 in a cell eg. B2 and do my formula a =F(B2).

    Thanks

  38. BOOSTSATHIS says:

    Hai,

    I am sathis Kumar , i want to subtract two dates in xl sheet from 05/11/2013 to 30/04/2014 . now i want two days between how many month

    DOJ DOL Experince
    01/11/2013 05/06/2014 = (05/06/2014 - 01/11/2013)

  39. sankar says:

    Sir, I am trying to figure out how I can prevent user to enter duplicate date (in a pre booking template). The conditions are
    1) User A can put a single date or a date range
    2) Other user can't pick any day in between whatever user A had chosen
    3) A date picker calendar always shows only next 20 days date
    Can you please help me
    thanks in advance

  40. SM Frye says:

    Dear Sir,

    I am trying to update a 2014 historical facts calendar (It has a fact for every day of the entire year.) to reflect the new dates and days of the week for 2015. Is there a single formula I can enter to shift the dates ahead for the entire annual calendar, or do I need to execute a formula at each month's start? Either way, I am also in need of a formula to achieve this.

    Thanks for your help.

  41. […] Date with my sheet – 10 tips on using date / time in excel – Excel date time features are very handy and knowing them a little in depth can help you save a ton of time in your day to day spreadsheet chores…. […]

  42. LALIT SHARMA says:

    sir, suppose a date are given in a cell A1 = 20/04/2013... and suppose I want to add 10 years or 10 years and 07 month then how can I add the above ........ so that I Show 21/04/2023..... please justifiee.. sir...

    • Hui... says:

      @Lalit

      If A1 has a date 20/04/2013
      simply
      =A1+date(10,0,0) for +10 Years
      =A1+date(10,7,0) for +10 Years, 7 Months
      =A1+date(10,7,5) for +10 Years, 7 Months 5 days etc

      • Hui... says:

        @Lalit

        If you want to be more precise
        =A1+date(0,120,0) for +10 Years
        =A1+date(0,127,0) for +10 Years, 7 Months
        =A1+date(0,127,5) for +10 Years, 7 Months 5 days etc

  43. LALIT SHARMA says:

    and suppose... tow dates are given .. 20/04/2013 and 27/08/2003.. then how can seprate (-) kare so that the answer should be return in month.. ... it anser of both question are possible to sent the mention email then pls sent the answer in mention e-mail... .. I shall be highly obeliged ...

  44. Zarin says:

    Dear Sir,

    What is the formula using the Data Validation function at excel, to restrict a cell to accept only 2 days of the months (1st and 16th of the month)? Appreciate your kind help. Thanks.

  45. Thang says:

    Hi Pro, i want to find day if given date and weekday. example : Given Tuesday, 31week, 2015 year. Result is 28/7/2015, pls help me!

    • Ron says:

      please help
      i trying to write a formula for dates

      i have a initial date and i am trying to auto populate for 6 months out and one for 9 months out and have the 6 months out change color and when it is 9 months out change another color

      please help

  46. amy says:

    I have an Excel workbook for Study room bookings and within it I have 6 worksheets Monday thru Saturday. Without having to create 365 worksheets with individual dates on them what formula can I print these worksheets with the dates for the remaining days of the year automatically populated or is it possible?

  47. Elyse says:

    Is there a way to take 2 dates and subtract the newest date from the oldest to get the number of days difference? I tried the one that it says on this page but it didn't work.

  48. Suresh Ramachandran says:

    how to highlight days a month which is greater than 10th of every month

  49. Jenny says:

    Hi,

    How can 1 cell can put 2 dates by date format.
    I have the problem of 1 customer make 2 times payment.
    I can only record as 01/06/2016 & 02/06/16.
    The problem is when i filter that cell can't appear

    • Hui... says:

      @Jenny
      It is poor practice to store multiple records in one cell
      It is much easier to store multiple records ion multiple rows
      That also allows flexibility in reporting

      When entering data in a record that is mostly similar to the record above, you can use the Ctrl+D shortcut, This duplicates the cell directly above you speeding up data entry

  50. piecevcake says:

    Hello,
    Could you please tell me the solution to this? I have spent months, years, looking for it...
    When I press ctrl+; to enter the date in a cell, I want it to enter d/M/yy. My short date in windows regional settings is d/M/yy. Excel enters d/M/yyyy. The cells must be formatted as text they cannot be formatted as date. I do not want to have to macro-enable my workbooks, There must be a setting in the registry to set this?

    Alternatively, how can I assign that key to my own shortcut for a macro to enter NOW with custom date format? Can't find that either!
    I hope you can help!
    Many thanks

  51. NIRAJ says:

    how to shift date to the next working day if time goes after the working hour. if cell a1 has reference date and time i.e. 04/02/2017 12:30:00
    and cell b1 has working duration i.e. 7 hours . it shows in cell C3 04/02/2017 19:30:00 but 19:30:00 is not our working time. i want to show the value of plan date as 05/02/2017 11:30:00 . working time id 09:00:00 to 17:00:00

    Thanks

  52. Ernst says:

    No Comments at this time

  53. ANAND says:

    I have to develop Calendar in Excel considering Monday being the First day of week . How I can develop the same ? Please provide me guidance .

  54. Kirst says:

    Hi Chandoo!
    I export incident data daily to Excel 2016 and the dates are text (e.g. 8 Apr 2018). I changed cell to short date field format, but it still recognises this as text until I 'F2' then 'Enter' in each cell. Is there a more efficient way to do this; I have 3 columns of dates and about 1000 lines of data.
    I need it to be dates so I can then create pivot tables and charts from the data.
    Many thanks,
    Kirst.

  55. Mark says:

    some things I find useful:

    INT this will give you the date part of a datetime field
    MOD this will give you the time part of a datetime field

    if you had

    21/06/2018 10:25:00

    in cell a1

    then =INT(A1) would give you 21/06/2018
    and = mod(a1,0) would give you 10:25:00

  56. Sandeep Kothari says:

    oSUM!

  57. David says:

    The most important thing is if you do any calculations you need to be careful, given the vagaries of floating point math.

    e.g. depending on the day you choose, 4pm minus 3pm may be less than, equal to, or greater than one hour.

    Results in some infuriatingly subtle bugs when you forget!

  58. How do we know says:

    Wow! Came here from India's top blogs and this is superb! For some reason, dates have always confounded me in Excel and this was exactly what I needed - esp the section on adding and subtracting dates. Thanks a ton!

  59. Kale says:

    Hi,

    I have a mixed combinations of date format in one column i.e. 'dd/mm/yy' and 'mm/dd/yy'. How do I make them all in the same format, either all in 'dd/mm/yy' format, or all 'mm/dd/yy' format? Thanks in advance!

  60. Nirmal Christian says:

    want to conditional format and highlight all sunday and only second and fourth saturday in the list of given dates

  61. Bjarne says:

    Hey

    have can i work with this time format
    tt:mm:ss,000

  62. tom says:

    I want to develop a formula that will enter a an(hour and minute-not to change) in a cell when any data is entered in another specific cell. This will be used to determine lengths of time between three events
    Thanks,
    Tom

  63. AnnMarie Dixon says:

    I need to input in Excel formula for the date as follow: 2019/2020. The period for each year is July - June. I would need a formula that can change each period.

  64. AnnMarie Dixon says:

    I need to input in Excel formula for the date as follow: 2019/2020. The period for each year is July - June. I would need a formula that can change each period.
    The formula for date to change each year November 1, Year.

  65. Kamlesh Dantani says:

    Hi,
    Option 1 is very much helpful for me.
    I look this type of formula on google since many times but not satisfied.
    Finally I found it.
    Thank you ?so much,
    Kamlesh Dantani

  66. CoreyWilley says:

    Great website. These excel formulas, not just this page, have been super helpful while going through old spreadsheets and finding data. Thanks for the info.

  67. Very informative. Date functions are very important. I frequently visit your articles...awesome. Go ahead.

  68. Nice content, keep sharing with us.

  69. Sidharth Agarwal says:

    Hi Chandoo,

    Need a small help to build a formula where we can show the date of Monday i.e. start of week date from time stamp for eg "3/2/2022 9:21 PM" or either from "Week 10'2022" where Week is for entire year i.e till week 52/53 and "2022" represents the year

    Thanks in advance

    Best
    Sid

  70. Mac says:

    Hello,
    is the format of date case sensitive dd and DD are the same???

Leave a Reply