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

news2025/3/11 15:23:09

文章目录

  • 一、序
  • 二、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.coloradmin.cn/o/2278076.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis的过期策略、内存淘汰机制

Redis只能存5G数据&#xff0c;可是你写了10G&#xff0c;那会删5G的数据。怎么删的&#xff1f;还有&#xff0c;你的数据已经设置了过期时间&#xff0c;但是时间到了&#xff0c;为什么内存占用率还是比较高? 一、Redis的过期策略 Redis采用的是定期删除惰性删除策略。 1…

C语言结构体漫谈:从平凡中见不平凡

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言正文《1》 结构体的两种声明一、结构…

redis(2:数据结构)

1.String 2.key的层级格式 3.Hash 4.List 5.Set 6.SortedSet

OCP使用中的常见问题与解决方法

OCP的常见问题 页面卡顿&#xff1a; 遇到页面卡顿的问题时&#xff0c;首先需要区分是全局性的卡顿&#xff0c;即所有页面都出现延迟或响应缓慢&#xff0c;还是仅限于特定的监控页面。 监控数据看不到: 需要明确是全部数据都无法查看&#xff0c;还是仅限于特定集群的数…

第三十八章 Spring之假如让你来写MVC——适配器篇

Spring源码阅读目录 第一部分——IOC篇 第一章 Spring之最熟悉的陌生人——IOC 第二章 Spring之假如让你来写IOC容器——加载资源篇 第三章 Spring之假如让你来写IOC容器——解析配置文件篇 第四章 Spring之假如让你来写IOC容器——XML配置文件篇 第五章 Spring之假如让你来写…

【开源免费】基于SpringBoot+Vue.JS企业OA管理系统(JAVA毕业设计)

本文项目编号 T 135 &#xff0c;文末自助获取源码 \color{red}{T135&#xff0c;文末自助获取源码} T135&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

(12)springMVC文件的上传

SpringMVC文件上传 首先是快速搭建一个springMVC项目 新建项目mvn依赖导入添加webMoudle添加Tomcat运行环境.在配置tomcat时ApplicationContext置为"/"配置Artfact的lib配置WEB-INF配置文件&#xff08;记得添加乱码过滤&#xff09;配置springmvc-servlet文件&…

【华为路由/交换机的ftp文件操作】

华为路由/交换机的ftp文件操作 PC&#xff1a;10.0.1.1 R1&#xff1a;10.0.1.254 / 10.0.2.254 FTP&#xff1a;10.0.2.1 S1&#xff1a;无配置 在桌面创建FTP-Huawei文件夹&#xff0c;里面创建config/test.txt。 点击上图中的“启动”按钮。 然后ftp到server&#xff0c;…

虚拟拨号技术(GOIP|VOIP)【基于IP的语音传输转换给不法分子的境外来电披上一层外衣】: Voice over Internet Protocol

文章目录 引言I 虚拟拨号技术(GOIP|VOIP)原理特性:隐蔽性和欺骗性II “GOIP”设备原理主要功能III 基于IP的语音传输 “VOIP” (Voice over Internet Protocol)IV “断卡行动”“断卡行动”目的电信运营商为打击电诈的工作V 知识扩展虚拟号保护隐私虚拟运营商被用于拨打骚扰…

获取当前页面的url相关信息

引言&#xff1a;如何通过javascript获取当前html页面的链接信息 let currentUrl window.location.href; let protocol window.location.protocol; // 协议 let host window.location.host; // 主机名和端口 let hostname window.location.hostname; // 主机名 le…

【C++】size_t全面解析与深入拓展

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;一、什么是size_t&#xff1f;为什么需要size_t&#xff1f; &#x1f4af;二、size_t的特性与用途1. size_t是无符号类型示例&#xff1a; 2. size_t的跨平台适应性示例对…

Quinlan C4.5剪枝U(0,6)U(1,16)等置信上限如何计算?

之前看到Quinlan中关于C4.5决策树算法剪枝环节中,关于错误率e置信区间估计,为啥 当E=0时,U(0,1)=0.75,U(0,6)=0.206,U(0,9)=0.143? 而当E不为0时,比如U(1,16)=0.157,如图: 关于C4.5决策树,Quinlan写了一本书,如下: J. Ross Quinlan (Auth.) - C4.5. Programs f…

怎么进行论文选题?有没有AI工具可以帮助~

论文选题听起来简单&#xff0c;做起来难&#xff01;尤其是对于我们这群即将毕业的“学术小白”。记得那天导师布置完任务&#xff0c;我整个人就陷入了深深的沉思&#xff08;其实是发呆&#xff09;。直到室友神秘兮兮地告诉我&#xff1a;“你知道AI现在能帮人选题了吗&…

windows 极速安装 Linux (Ubuntu)-- 无需虚拟机

1. 安装 WSL 和 Ubuntu 打开命令行&#xff0c;执行 WSL --install -d ubuntu若报错&#xff0c;则先执行 WSL --update2. 重启电脑 因安装了子系统&#xff0c;需重启电脑才生效 3. 配置 Ubuntu 的账号密码 打开 Ubuntu 的命令行 按提示&#xff0c;输入账号&#xff0c;密…

TCP-IP详解卷 TCP的超时与重传

TCP-IP详解卷1-21&#xff1a;TCP的超时与重传&#xff08;Timeout and Retransmission&#xff09; 一&#xff1a;介绍 1&#xff1a; 与数据链路层的ARQ协议相类似&#xff0c;TCP使用超时重发的重传机制。 即&#xff1a;TCP每发送一个报文段&#xff0c;就对此报文段设置…

【统计的思想】假设检验(一)

假设检验是统计学里的重要方法&#xff0c;同时也是一种“在理想与现实之间观察求索”的测试活动。假设检验从概率的角度去考察理想与现实之间的关系&#xff0c;籍此来缓解测试可信性问题。 我们先来看一个例子。民航旅客服务系统&#xff0c;简称PSS系统&#xff0c;有一种业…

欧拉Euler 21.10 安装Oracle 19c RAC( PDB )到单机ADG

环境说明 主库&#xff08;RAC&#xff09; 备库&#xff08;FS&#xff09; 数据库版本 Oracle19.22.0.0 Oracle19.22.0.0 IP 地址 192.168.40.90-94 192.168.40.95 主机名 hfdb90、hfdb91 hfdb95 DB_UNIQUE_NAME hfdb dghfdb DB_NAME hfdb hfdb DB Instance…

图数据库 | 18、高可用分布式设计(中)

上文我们聊了在设计高性能、高可用图数据库的时候&#xff0c;从单实例、单节点出发&#xff0c;一般有3种架构演进选项&#xff1a;主备高可用&#xff0c;今天我们具体讲讲分布式共识&#xff0c;以及大规模水平分布式。 主备高可用、分布式共识、大规模水平分布式&#xff…

为mysql开启error日志 - phpstudy的数据库启动失败

步骤 找到mysql的配置文件 “my.ini”&#xff0c; windows上直接进入mysql安装目录&#xff0c;或者直接全盘搜&#xff1b; linux上使用命令 locate my.ini 即可搜索 修改"my.ini"&#xff0c;找到 组[mysqld] 下面的“log_error”并设置日志文件绝对路径&#x…

Java设计模式——单例模式(特性、各种实现、懒汉式、饿汉式、内部类实现、枚举方式、双重校验+锁)

我是一个计算机专业研0的学生卡蒙Camel&#x1f42b;&#x1f42b;&#x1f42b;&#xff08;刚保研&#xff09; 记录每天学习过程&#xff08;主要学习Java、python、人工智能&#xff09;&#xff0c;总结知识点&#xff08;内容来自&#xff1a;自我总结网上借鉴&#xff0…