2017-04-15 6 views
0

으로 처음으로 여기에 전기하는 방법으로 yahoo finance 기록 데이터를 추출 할 수 있습니까? 다음 문제에 도움이 필요합니다.Excel VBA : 정의 된 날짜 범위에

Excel VBA의 yahoo finance 웹 사이트 URL에서 과거 가격을 추출 중입니다. 티커, 시작 날짜 및 종료 날짜에 대한 변수 셀이 있습니다. 나는 나의 데이터를 얻기 위해 그 세포의 가치를 취하기 위해 URL을 변환했다.

문제점 : 매크로는 "시세"변수 셀에서 데이터를 추출하지만 "시작/종료 날짜"변수 셀에 정의한 날짜 범위를 제공하지 않습니다. 대신 전체 역사적인 데이터를 제공합니다.

원래 링크

http://chart.finance.yahoo.com/table.csv?s=NVDA&a=3&b=15&c=2012&d=3&e=15&f=2017&g=m&ignore=.csv 

변환 링크

http://chart.finance.yahoo.com/table.csv?s= " & Tick1 & " &a= " & smonth & " &b= " & sday & " &c= " & syear & " &d= " & emonth & " &e= " & eday & " &f= " & eyear & " &g=m&ignore=.csv 

Sub book1() 

'Macro Sheet 1 

'Variables 

Dim Tick1 As String 
Dim Tick2 As String 
Dim Tick3 As String 

Dim sday As Long 
Dim smonth As Long 
Dim syear As Long 
Dim eday As Long 
Dim emonth As Long 
Dim eyear As Long 

Dim newsheet As Object 

'Delete content 
With Sheets("Sheet1") 
.Range("A12:D200").Clear 
End With 

'Variable cells 

Tick1 = Range("b1") 
Tick2 = Range("c1") 
Tick3 = Range("d1") 

sday = Day(Range("b2")) 
smonth = Month(Range("b2")) - 1 
syear = Year(Range("b2")) 

eday = Day(Range("b3")) 
emonth = Month(Range("b3")) - 1 
eyear = Year(Range("b3")) 

'Extract data 
'Ticker 1 

With ActiveSheet.QueryTables.Add(Connection:= _ 
    "TEXT;http://chart.finance.yahoo.com/table.csv?s= " & Tick1 & " &a= " & smonth & " &b= " & sday & " &c= " & syear & " &d= " & emonth & " &e= " & eday & " &f= " & eyear & " &g=m&ignore=.csv", _ 
    Destination:=Range("$A$12")) 
    .Name = Tick1 
    .FieldNames = True 
    .RowNumbers = False 
    .FillAdjacentFormulas = False 
    .PreserveFormatting = True 
    .RefreshOnFileOpen = False 
    '.RefreshStyle = xlInsertDeleteCells 
    .RefreshStyle = xlOverwriteDeleteCells 
    .SavePassword = False 
    .SaveData = True 
    .AdjustColumnWidth = True 
    .RefreshPeriod = 0 
    .TextFilePromptOnRefresh = False 
    .TextFilePlatform = 850 
    .TextFileStartRow = 1 
    .TextFileParseType = xlDelimited 
    .TextFileTextQualifier = xlTextQualifierDoubleQuote 
    .TextFileConsecutiveDelimiter = False 
    .TextFileTabDelimiter = False 
    .TextFileSemicolonDelimiter = False 
    .TextFileCommaDelimiter = True 
    .TextFileSpaceDelimiter = False 
    .TextFileColumnDataTypes = Array(1, 9, 9, 9, 9, 9, 1) 
    .TextFileTrailingMinusNumbers = True 
    .Refresh BackgroundQuery:=False 

End With 

'Ticker 2 

With ActiveSheet.QueryTables.Add(Connection:= _ 
    "TEXT;http://chart.finance.yahoo.com/table.csv?s= " & Tick2 & " &a= " & smonth & " &b= " & sday & " &c= " & syear & " &d= " & emonth & " &e= " & eday & " &f= " & eyear & " &g=m&ignore=.csv", _ 
    Destination:=Range("$C$12")) 
    .Name = Tick2 
    .FieldNames = True 
    .RowNumbers = False 
    .FillAdjacentFormulas = False 
    .PreserveFormatting = True 
    .RefreshOnFileOpen = False 
    '.RefreshStyle = xlInsertDeleteCells 
    .RefreshStyle = xlOverwriteDeleteCells 
    .SavePassword = False 
    .SaveData = True 
    .AdjustColumnWidth = True 
    .RefreshPeriod = 0 
    .TextFilePromptOnRefresh = False 
    .TextFilePlatform = 850 
    .TextFileStartRow = 1 
    .TextFileParseType = xlDelimited 
    .TextFileTextQualifier = xlTextQualifierDoubleQuote 
    .TextFileConsecutiveDelimiter = False 
    .TextFileTabDelimiter = False 
    .TextFileSemicolonDelimiter = False 
    .TextFileCommaDelimiter = True 
    .TextFileSpaceDelimiter = False 
    .TextFileColumnDataTypes = Array(9, 9, 9, 9, 9, 9, 1) 
    .TextFileTrailingMinusNumbers = True 
    .Refresh BackgroundQuery:=False 

End With 

'Ticker 3 

With ActiveSheet.QueryTables.Add(Connection:= _ 
    "TEXT;http://chart.finance.yahoo.com/table.csv?s= " & Tick3 & " &a= " & smonth & " &b= " & sday & " &c= " & syear & " &d= " & emonth & " &e= " & eday & " &f= " & eyear & " &g=m&ignore=.csv", _ 
    Destination:=Range("$D$12")) 
    .Name = Tick3 
    .FieldNames = True 
    .RowNumbers = False 
    .FillAdjacentFormulas = False 
    .PreserveFormatting = True 
    .RefreshOnFileOpen = False 
    '.RefreshStyle = xlInsertDeleteCells 
    .RefreshStyle = xlOverwriteDeleteCells 
    .SavePassword = False 
    .SaveData = True 
    .AdjustColumnWidth = True 
    .RefreshPeriod = 0 
    .TextFilePromptOnRefresh = False 
    .TextFilePlatform = 850 
    .TextFileStartRow = 1 
    .TextFileParseType = xlDelimited 
    .TextFileTextQualifier = xlTextQualifierDoubleQuote 
    .TextFileConsecutiveDelimiter = False 
    .TextFileTabDelimiter = False 
    .TextFileSemicolonDelimiter = False 
    .TextFileCommaDelimiter = True 
    .TextFileSpaceDelimiter = False 
    .TextFileColumnDataTypes = Array(9, 9, 9, 9, 9, 9, 1) 
    .TextFileTrailingMinusNumbers = True 
    .Refresh BackgroundQuery:=False 

With Sheets("Sheet1") 
.Rows(62 & ":" & .Rows.Count).Delete 
End With 

'Copy on newsheet 

Set newsheet = ThisWorkbook.Sheets.Add 
    newsheet.Name = "Copie" 

ThisWorkbook.Sheets("Sheet1").Range("A12:D62").Copy 
    ThisWorkbook.Sheets("Copie").Range("A1").Select 
     ThisWorkbook.Sheets("Copie").Paste 

End With 

End Sub 
+1

B2 및 B3 셀 서식을 지정할 수 있습니다. 이 셀이 '일반'이고 입력 한 문자열이 mm/dd/yyyy이면 작동해야합니다. 또한 excel은 'xlOverwriteDeleteCells'가 정의되어 있지 않다는 것을 말합니다. – Amorpheuses

+0

날짜 셀 서식이 mm/dd/yyyy로되어 있고 여전히 작동하지 않습니다. 또한 전체 프로그램을 포함하도록 내 게시물을 편집했습니다. 죄송합니다. –

+0

왜 두 URL에 별표가 포함되어 있습니까? 그것들과 공백을 제거하면 첫 번째 링크가 잘 렌더링됩니다. – Parfait

답변

0

당신은 야후 금융의 연결을 확인하기 위해 매크로 사용을하는 URL 무엇을 확인해야합니다.

당신은 당신이 열려고하는 실제 링크를 볼 때이 줄을 추가하여 직전 ActiveSheet.QueryTables.Add

MsgBox ("http://chart.finance.yahoo.com/table.csv?s= " & Tick1 & " &a= " & smonth & " &b= " & sday & " &c= " & syear & " &d= " & emonth & " &e= " & eday & " &f= " & eyear & " &g=m&ignore=.csv") 

, 당신은 당신이 많은이 실현 것이라고 할 수있다 실제로 필요하지 않은 공백 문자. 각 따옴표 앞뒤에 공백 문자가 있으므로 필요하지 않습니다. 변경하여 문제를 해결해야합니다.

올바른 라인이 있어야한다 : 당신이 당신의 시작/끝 날짜 월 마이너스 일을하는 이유 또한

"TEXT;http://chart.finance.yahoo.com/table.csv?s=" & Tick1 & "&a=" & smonth & "&b=" & sday & "&c=" & syear & "&d=" & emonth & "&e=" & eday & "&f=" & eyear & "&g=m&ignore=.csv", _ 

, 나는 확실하지 않다?

smonth = 월 (범위() "B2") - 1

는 월에 날짜를 사용하는 경우 제대로 작동하지 않습니다.

+0

정말 고마워요. 공백 문자는 날짜 범위가 적용되지 못한다고 말한 것입니다. 한달 동안 마이너스 1에 관해서, 나는 선생님으로부터 Excel이 1 월을 0 개월이라고 생각한다고 말했으므로 -1을 추가한다고 말했고, 나는 정말로 정직하지 않습니다. 그러나 다소 효과가있는 것으로 보인다. 고마워요. 당신의 모든 도움에 감사드립니다. –