在金融分析和投资领域,我们经常需要根据股票代码获取股票名称。虽然有很多在线的金融数据平台可以提供这个功能,但是如果你正在使用Excel,同时没有Wind、同花顺iFind和Choice账号,并且需要处理大量的数据,那么在Excel中直接获取股票名称会更加方便和高效。在本文中,笔者将介绍如何使用Excel的VBA宏来根据股票代码获取股票名称。
首先,我们需要创建一个自定义的Excel函数。这个函数将发送一个HTTP请求到指定的URL,然后使用指定的字符编码来处理返回的数据。
步骤1:打开Excel的“开发工具”选项卡(如果已经有了,可以跳过)
- 打开Excel,点击菜单栏上的“文件”选项,然后选择“选项”。
- 在“Excel选项”窗口中,点击“自定义功能区”。
- 在右侧的列表中,找到并勾选“开发工具”,然后点击“确定”。
现在,你应该可以在菜单栏上看到“开发工具”选项卡了。
步骤2:打开VBA编辑器
- 点击“开发工具”选项卡,然后点击“Visual Basic”按钮。这将打开VBA编辑器。
步骤3:创建一个新的模块
- 在VBA编辑器中,点击菜单栏上的“插入”选项,然后选择“模块”。这将创建一个新的模块。
步骤4:编写自定义函数
现在,你可以在新的模块中编写你的自定义函数了。你可以将以下的代码复制并粘贴到模块中:
以下是这个函数的代码:
Function FetchStockName(key As String) As String
Dim URL As String
Dim http As Object
Dim response As String
Dim stream As Object
Dim start As Integer
Dim finish As Integer
Dim i As Integer
' 设置URL
URL = "https://suggest.sinajs.cn/suggest/type=&key=" & key
' 创建一个HTTP对象
Set http = CreateObject("MSXML2.ServerXMLHTTP")
' 发送GET请求
http.Open "GET", URL, False
http.send
' 创建一个Stream对象
Set stream = CreateObject("ADODB.Stream")
stream.Open
stream.Type = 1 ' Binary
stream.Write http.responseBody
' 转换字符编码
stream.Position = 0
stream.Type = 2 ' Text
stream.Charset = "gb2312" ' 使用GB2312编码
response = stream.ReadText
' 关闭Stream
stream.Close
' 跳过前3个逗号
start = 1
For i = 1 To 4
start = InStr(start, response, ",") + 1
Next i
' 查找第4个逗号
finish = InStr(start, response, ",")
' 提取股票名称
FetchStockName = Mid(response, start, finish - start)
End Function
步骤2:在Excel单元格中使用这个函数
一旦你创建了这个函数,你就可以关闭Visual Basic窗口,并在Excel单元格中使用它了。例如,你可以在Excel单元格里像这样使用这个函数:=FetchStockName("600019")
。这个函数将返回股票代码为"600019"的股票的名称。也可以将参数指定为对于单元格的引用,如=FetchStockName(A2)。
这样子,通过使用Excel的VBA宏,我们可以方便地在Excel中根据股票代码获取股票名称。这个技巧可以帮助我们更有效地处理金融数据,提高我们的工作效率。
反思:数据获取的原理
- HTTP请求:通过创建
MSXML2.ServerXMLHTTP
对象,VBA能够发送HTTP请求到指定的URL。这在本质上模拟了浏览器或其他HTTP客户端如何向服务器请求数据的过程。 - 数据编码处理:网络上的数据可以以不同的字符编码格式存在,例如UTF-8或GB2312。为了正确显示这些数据,接收方需要知道数据是如何编码的。在这个例子中,数据以GB2312编码返回,这是一种广泛用于简体中文字符的编码格式。使用
ADODB.Stream
对象,VBA能够将二进制的响应体转换为文本,并且指定字符集为GB2312,以正确解析和显示中文字符,这是这个方法的关键,因为如果直接使用WEBSERVICE函数会使用UTF-8解码导致返回乱码。 - 字符串处理:提取公司简称涉及到字符串分割和提取特定部分的操作。VBA的字符串函数(如
InStr
和Mid
)被用于定位和提取公司简称。