Henceforth the following tool was built to do the same. This tool extracts the data from the exchanges (NSE and BSE) website (Historical Data Section) for the equity and the time period requested (Currently the tool downloads the daily data only but easily configurable via code to monthly/yearly).
The data downloaded via tool is placed on separate sheets for both NSE and BSE, upon which any post download analysis can be conducted..
Hope this tool helps you in outperform the markets better. Happy trading..
modNse.bas
Option Explicit
Private Const NSE_URL As String = "http://www.nseindia.com/products/dynaContent/common/productsSymbolMapping.jsp?symbol={0}&segmentLink=3&symbolCount=1&series=EQ&dateRange=+&fromDate={1}&toDate={2}&dataType=PRICEVOLUME"
Public Sub GetNseData()
Dim request As WinHttp.WinHttpRequest
Dim htmlDocument As MSHTML.htmlDocument
Dim rowCollection As Variant
Dim htmlRow As Variant
Dim rowSubContent As Variant
Dim rowSubData As Variant
Dim rowCount As Integer, colCount As Integer
Dim anchorRange As Range
Dim prepUrl As String
Dim timeOut As Long
On Error GoTo errHandler
timeOut = 10000
DataDumpNse.Cells.Clear
Set anchorRange = DataDumpNse.Range("A1")
Set htmlDocument = New MSHTML.htmlDocument
Set request = New WinHttp.WinHttpRequest
prepUrl = Replace(NSE_URL, "{0}", modCommonFunctions.URLEncode(ThisWorkbook.Names("NSE_TICKER").RefersToRange.Value))
prepUrl = Replace(prepUrl, "{1}", Format(ThisWorkbook.Names("NSE_FROM_DATE").RefersToRange.Value, "dd-mm-yyyy"))
prepUrl = Replace(prepUrl, "{2}", Format(ThisWorkbook.Names("NSE_TO_DATE").RefersToRange.Value, "dd-mm-yyyy"))
request.Open "GET", prepUrl
request.SetTimeouts timeOut, timeOut, timeOut, timeOut
request.Send
htmlDocument.body.innerHTML = request.ResponseText
rowCount = 0
colCount = 0
Set rowCollection = htmlDocument.getElementsByTagName("tr")
For Each htmlRow In rowCollection
Set rowSubContent = htmlRow.getElementsByTagName("th")
If rowSubContent.Length <> 0 Then
For Each rowSubData In rowSubContent
anchorRange.Offset(rowCount, colCount).Value = rowSubData.innerText
colCount = colCount + 1
Next rowSubData
Else
Set rowSubContent = htmlRow.getElementsByTagName("td")
For Each rowSubData In rowSubContent
anchorRange.Offset(rowCount, colCount).Value = rowSubData.innerText
colCount = colCount + 1
Next rowSubData
End If
colCount = 0
rowCount = rowCount + 1
Next htmlRow
Exit Sub
errHandler:
MsgBox Err.Description, vbExclamation, "Download Error"
On Error GoTo 0
Err.Clear
End Sub
modBse.bas
Option Explicit
Private Const BSE_URL As String = "http://www.bseindia.com/stockinfo/stockprc2_excel.aspx?scripcd={0}&FromDate={1}&ToDate={2}&OldDMY=D"
Public Sub GetBseData()
Dim request As WinHttp.WinHttpRequest
Dim lineSplit As Variant
Dim rowCount As Long
Dim line As Variant
Dim anchorRange As Range
Dim url As String
DataDumpBse.Cells.Clear
Set anchorRange = DataDumpBse.Range("A1")
Set request = New WinHttp.WinHttpRequest
url = Replace(BSE_URL, "{0}", ThisWorkbook.Names("BSE_TICKER").RefersToRange.Value)
url = Replace(url, "{1}", Format(ThisWorkbook.Names("BSE_FROM_DATE").RefersToRange.Value, "mm/dd/yyyy"))
url = Replace(url, "{2}", Format(ThisWorkbook.Names("BSE_TO_DATE").RefersToRange.Value, "mm/dd/yyyy"))
request.Open "GET", url
request.Send
lineSplit = Split(request.ResponseText, vbCrLf)
rowCount = 0
For Each line In lineSplit
anchorRange.Offset(rowCount, 0).Value = line
rowCount = rowCount + 1
Next line
DataDumpBse.Range("A:A").TextToColumns DataDumpBse.Range("A1"), xlDelimited, Comma:=True
End Sub

Download solution
References:
Link1: http://www.nseindia.com/
Link2: http://www.bseindia.com/