当前位置: 首页 > article >正文

【excel】VBA股票数据获取(搜狐股票)

文章目录

  • 一、序
  • 二、excel 自动刷新股票数据
  • 三、付费获取

一、序

我其实不会 excel 的函数和 visual basic。因为都可以用matlab和python完成。

今天用了下VBA,还挺不错的。分享下。

上传写了个matlab获取股票数据的,是雅虎财经的。这次是搜狐股票的数据。


搜狐股票:https://q.stock.sohu.com/

其实都大同小异,就是发送一个http请求,然后解析获取的数据即可。


随便找个股票:
在这里插入图片描述

点击左侧栏的“历史行情”:这里就是我们要下载的数据,我前面文章使用matlab、python都可以爬取的。

在这里插入图片描述

二、excel 自动刷新股票数据

无法就是拿VBA 发送个http请求,然后把返回的数据保存到excel相应的位置。

随便拿个api post测试一下api,返回数据如下:

			0	"2024-12-31", 日期
			1	"3.00", 开盘
			2	"2.90", 收盘
			3	"-0.13",涨跌额
			4	"-4.29%",涨跌幅
			5	"2.88", 最低
			6	"3.04", 最高
			7	"1179628", 总手
			8	"34640.35",成交金额
			9	"4.39%" 换手率

office 版本:Microsoft 365

excel 中:

  • 点击 文件 -> 选项。
  • 在左侧选择 自定义功能区,然后勾选 开发工具 选项,点击 确定。

在这里插入图片描述

插入一个按钮:按下即可执行VBA代码,刷新数据
在这里插入图片描述

要修改这个按钮的文字大小之类的,右键然后编辑文字、或者设置控件格式即可。

点一下其它地方,即可取消编辑状态,这时候鼠标左键点下即代表按下按钮。
在这里插入图片描述

自己弄一下表格样式: 把下面需要填入数据的区域的单元格格式设置为“文本”。

在这里插入图片描述

开发工具:Visual Basic 编写VBA代码
在这里插入图片描述


源码:

' 获取数据的主程序
Sub get_data()
   ' 清空工作表中的数据
   clear_cells
   ' 加载页面数据
   load_page1
   ' 选择 A1 单元格
   Range("A1").Select
End Sub


' 加载页面数据
Public Sub load_page1()
     Dim url As String, sSp() As String, aaa As String, line As String, sArray() As String
     ' 获取工作表1中的日期范围
     cd = Sheets(1).[c1]   ' 获取开始日期
     sd = Sheets(1).[e1]   ' 获取结束日期
     ed = Sheets(1).[g1]   ' 获取股票代码
     
     ' 构造 URL 地址,连接股票数据请求的 API
     url = "https://q.stock.sohu.com/hisHq?code=cn_" & cd & "&start=" & sd & "&end=" & ed
     
     ' 创建一个 HTTP 请求对象,用于发送请求并获取响应数据
     With CreateObject("msxml2.xmlhttp")
            .Open "post", url, False  ' 发送 POST 请求
            .send  ' 发送请求
     
     ' 获取响应文本并去除回车符
     aaa = Replace(.responsetext, Chr(13), "")
     
     ' 查找响应中是否包含"Not Found"字符串,若有则提示数据源无法访问
     Dim inte As Integer
     inte = InStr(aaa, "Not Found")
     If inte <> 0 Then
         MsgBox ("数据源无法访问!")  ' 弹出提示框
         Debug.Print "数据源无法访问!退出"
         Exit Sub  ' 如果数据源不可访问,退出程序
     End If
        
     ' 'Debug.Print "响应数据:" & aaa  ' 可以用来打印调试信息,取消注释来查看响应数据
     
     ' 将响应数据按 '],[' 分割,分割成单个记录
     sSp = Split(aaa, "],[")
     
     ' 如果有超过一个数据项,开始处理每一行的数据
     If UBound(sSp) > 1 Then
         For i = 0 To UBound(sSp) - 1
             line = sSp(i)  ' 取得一行数据
             
             ' 'Debug.Print "  行:" & line  ' 调试信息,打印每一行数据
             
             ' 如果是第一行数据,去掉多余的部分
             If i = 0 Then
                 line = Mid(line, 22, Len(line))
             End If
             
             ' 移除双引号
             line = Replace(line, Chr(34), "")
             
             ' 'Debug.Print "  行2:" & line  ' 打印去除双引号后的数据行
             
             ' 将行数据按逗号分割
             sArray = Split(line, ",")
             
             ' 'Debug.Print "   单元格:" & sArray(0)  ' 打印每一项数据的值
             
             ' 将分割后的数据填充到工作表中,从第3行开始
             Worksheets("sheet1").Cells((i + 3), 1) = sArray(0)
             Worksheets("sheet1").Cells((i + 3), 2) = sArray(1)
             Worksheets("sheet1").Cells((i + 3), 3) = sArray(2)
             Worksheets("sheet1").Cells((i + 3), 4) = sArray(4)
             Worksheets("sheet1").Cells((i + 3), 5) = sArray(5)
             Worksheets("sheet1").Cells((i + 3), 6) = sArray(6)
             Worksheets("sheet1").Cells((i + 3), 7) = sArray(7)
             Worksheets("sheet1").Cells((i + 3), 8) = sArray(8)
             Worksheets("sheet1").Cells((i + 3), 9) = sArray(9)
         Next i
     End If
     End With
End Sub

' 清空指定范围的单元格内容
Public Sub clear_cells()
    Range("A3").Select  ' 选择 A3 单元格
    ActiveWindow.SmallScroll Down:=45  ' 滚动页面,确保可见范围内有 A4
    Range("A3:I477").Select  ' 选择 A3 到 I477 范围
    Selection.ClearContents  ' 清空所选范围的内容
    Range("A1").Select  ' 选择 A1 单元格
End Sub


运行效果:
在这里插入图片描述

三、付费获取

我还写了升级版,可以获取多个股票数据。

不愿意自己写的就付款哈哈:链接

在这里插入图片描述


http://www.kler.cn/a/505391.html

相关文章:

  • JSON 文本的多层嵌套格式
  • ImageSharp图形库学习
  • 【算法学习笔记】31:试除法分解质因数及求解欧拉函数
  • 【Vue】分享一个快速入门的前端框架以及如何搭建
  • JVM之垃圾回收器ZGC概述以及垃圾回收器总结的详细解析
  • 解决 VSCode 调试时 Python 文件出现相对路径报错问题‘FileNotFoundError’
  • xilinx FPGA 平台实现数字信号 -- 低通滤波
  • word添加参考文献并批量上标
  • ASP.NET Core - IStartupFilter 与 IHostingStartup
  • 【网络 MAC 学习专栏 -- 如何理解 PHY 的 Link Up】
  • 《数据思维》之数据可视化_读书笔记
  • Mysql 之 阻塞与死锁详解
  • 2025 年将是统一网络安全的一年
  • 港科夜闻 | 香港科大与微软亚洲研究院签署战略合作备忘录,推动医学健康教育及科研协作...
  • 解锁企业数据管理统一身份认证难题,EasyMR助力企业敏捷提效
  • Asp.net 如何使用任务调度
  • Elasticsearch搜索引擎(二)
  • 数据结构《MapSet哈希表》
  • 68_Redis数据结构-QuickList
  • 【make】makefile 函数全解
  • 迅为RK3568开发板篇OpenHarmony配置HDF驱动控制LED-新增 topeet子系统-编写 bundle.json文件
  • 初学stm32 --- SPI驱动25Q128 NOR Flash
  • day08_Kafka
  • C++实现设计模式---状态模式 (State)
  • MySQL程序之:指定程序选项
  • Kotlin 协程基础十 —— 协作、互斥锁与共享变量