自动创建查询Excel

时间:2015-04-07 20:35:56

标签: mysql excel vba excel-vba

我正在尝试通过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,我不完全确定做我要求的是多么可能。谢谢!

1 个答案:

答案 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