我正在尝试通过excel创建一个股票筛选器。首先,Excel可能不是创建股票屏幕的最佳选择,因此我愿意接受替代方案,但是 我差不多完成了 2.我没有编程经验
所以在我告诉你我的问题之前,这是我到目前为止所做的事情(在ROIC标签上工作):https://jumpshare.com/v/OxlCrsMZa18tS9bB8N1S?b=D89mk1t3hPnWdxyYxL6p
我不能做什么,以及完成筛选器的内容是对每个单元格进行查询。现在我想,虽然我不知道,有可能创建一个宏来启动查询,告诉excel将数据放在哪里(从前一个输入向下50行),并告诉excel在哪里找到什么股票代码(从前一个股票代码下来一行)。查询制作也必须重复到代码的结尾。 (你可能会想:“excel行限制不是大约100万?”就是这样,我的解决方案是将A:A列的一半资产负债表,H:M的另一半。但是,你不需要包含它,我可以解决它。)
该查询从yahoo finance中提取公司资产负债表,然后将数据导入数据表。由于资产负债表的格式相同,因此很容易排序:每个指标比上一次搜索低50行。
我需要自动化这个查询创建过程的原因是大约有25,000个股票,为了做一个筛选器,我需要同时分析它们;因此,每只股票都需要自己的查询和自己的数据。
我已经尝试过录制一个宏,但我似乎无法让它重复,每次新数据查询都会偏移50行,并且每个新的自动收报机都会偏移1行。
我真的很感激帮助;我很擅长excel,我不完全确定做我要求的是多么可能。谢谢!
答案 0 :(得分:0)
我无法帮助,但您认为最好使用数据库(例如Microsoft Access)而不是Excel来存储此数据量。您仍然可以从电子表格运行计算并查询Access数据库中的数据表。开发自己的Excel应用程序是一个有趣(又令人发狂!)的旅程。说完了......
您需要在VBA中学习的是循环。首先在列中的一组股票代码值上进行简单循环:
Option Explicit
Sub test()
Dim ticker As String
Dim companyTicker As Range
Dim allTickers As Range
Dim lastRow As Long
'---sets up a range containing all your ticker strings
Dim lngMaxRow As Long
lastRow = Sheets("ROIC").Range("B" & Rows.Count).End(xlUp).Row
'---during your development, force your ticker set to be shorter
lastRow = 10
Set allTickers = Range("B5:B" & lastRow)
'---now loop through all the companies and get the info for each one
For Each companyTicker In allTickers
ticker = companyTicker.Value
'--- build up the query to Yahoo Finance using the company ticker string
' copy the data from your query to the cells in your workbook
Debug.Print "ticker is " & ticker 'use a debug.print to check as you write the code
Next companyTicker 'get the next company ticker
End Sub