Excel VBA技术问询:提取字符串特定单词行号及东证股票价格
Excel VBA问题解决方案
嘿,针对你提的两个Excel VBA问题,我来分享下实际工作里常用的解决办法:
一、如何用Excel VBA获取字符串中特定单词所在的行号?
如果是在工作表的单元格区域里查找包含特定单词的单元格,并返回它的行号,我通常会写一个可复用的自定义函数,不管是在工作表公式里调用,还是在其他VBA过程里使用都很方便。
比如这段代码:
Function FindWordRow(targetWord As String, searchRange As Range) As Long Dim cell As Range ' 遍历指定的搜索区域 For Each cell In searchRange ' 用InStr检查单元格内容是否包含目标单词,vbTextCompare表示不区分大小写 If InStr(1, cell.Value, targetWord, vbTextCompare) > 0 Then FindWordRow = cell.Row Exit Function ' 找到第一个匹配项就退出,要是需要所有匹配项可以去掉这句,把行号存数组 End If Next cell ' 如果遍历完没找到,返回0作为标记 FindWordRow = 0 End Function
使用的时候很简单:
- 在工作表单元格里输入
=FindWordRow("你要找的单词", A1:A200),就能直接得到第一个匹配单元格的行号 - 要是需要找出所有包含目标单词的行号,可以修改函数,把结果存到数组里,或者直接在工作表的对应行做标记。
二、从谷歌财经返回字符串中提取东京证券交易所股票价格
确实,谷歌财经的JSON接口停了之后,只能从它返回的纯文本字符串里抠数据了。我之前处理过类似需求,思路就是拆分字符串,定位到我们需要的COLUMNS和DATA字段,再提取对应内容。
给你一个完整的示例代码,假设你已经通过XMLHTTP拿到了谷歌财经的返回字符串:
Sub ExtractTSEStockData() Dim responseStr As String Dim dataParts() As String Dim columnPart As String, dataPart As String Dim columns() As String, values() As String ' 这里替换成你实际请求到的谷歌财经返回内容 responseStr = "EXCHANGE%3DTYO MARKET_OPEN_MINUTE=540 MARKET_CLOSE_MINUTE=900 INTERVAL=86400 COLUMNS=DATE,CLOSE,HIGH,LOW DATA_SESSIONS=[MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY] DATA=(1699113600,285.2,286.5,284.1)" ' 第一步:把整个字符串按空格拆分成一个个参数块 dataParts = Split(responseStr, " ") ' 第二步:遍历参数块,找到列名和数据部分 For Each part In dataParts ' 定位COLUMNS字段,提取列名 If Left(part, 7) = "COLUMNS=" Then columnPart = Mid(part, 8) columns = Split(columnPart, ",") ' 定位DATA字段,提取具体数值 ElseIf Left(part, 5) = "DATA=" Then ' 去掉前后的括号,拿到纯数据内容 dataPart = Mid(part, 6, Len(part) - 6) values = Split(dataPart, ",") End If Next part ' 第三步:把提取到的数据写入工作表(这里从A1单元格开始) Dim i As Integer For i = LBound(columns) To UBound(columns) Cells(1, i + 1).Value = columns(i) Cells(2, i + 1).Value = values(i) Next i MsgBox "东证股票数据提取完成!" End Sub
小提示:
如果谷歌财经的返回格式有调整(比如DATA部分包含多组数据),只需要修改处理DATA=部分的逻辑就行,比如循环拆分多个括号里的内容,把每一组数据都写入工作表。
内容的提问来源于stack exchange,提问作者T.PC




