You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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接口停了之后,只能从它返回的纯文本字符串里抠数据了。我之前处理过类似需求,思路就是拆分字符串,定位到我们需要的COLUMNSDATA字段,再提取对应内容。

给你一个完整的示例代码,假设你已经通过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

火山引擎 最新活动