今天跟大家分享下我们如何自定义一个ExcelAI函数,帮助我们解决各种问题,操作也非常的简单,只需选择单元格,然后提出对应的要求即可,具体的效果如下图所示。

一、原理解析
这个AI函数其实是一个自定义函数,它的本质就是使用VBA代码来调用大模型的API,如果你感觉用起来比较卡,可以调用一些轻量化的模型,或者换个云服务商。今天我们就以火山云为例调用的豆包的大模型,速度也比较快了

二、调用别的模型
调取大模型的API需要三个关键的参数:KEY、模型的URL以及模型ID,这些在调用的时候有提示的,根据操作来一步一步的操作即可,具体如下图所示,怕大家看不懂,最下方也有视频演示。

三、更改代码
下面的代码我需要更改3处,具体操作如下所示,大家可直接粘贴代码的时候修改下
Const API_KEY As String = "你的API"
Const API_URL As String = "模型的URL地址"
BuildSafeInput = "{""model"":""模型的ID"",""messages""
Function ExcelAI(TargetCell As Range, Question As String) As VariantOn Error GoTo ErrorHandlerConst API_KEY As String = "你的API" ' 需替换有效密钥Const API_URL As String = "模型的URL地址"' 构建安全请求Dim safeInput As StringsafeInput = BuildSafeInput(TargetCell.Text, Question)' 发送API请求Dim response As Stringresponse = PostRequest(API_KEY, API_URL, safeInput)' 解析响应内容If Left(response, 5) = "Error" ThenExcelAI = responseElseExcelAI = ParseContent(response)End IfExit FunctionErrorHandler:ExcelAI = "Runtime Error: " & Err.DescriptionEnd Function' 构建安全输入内容Private Function BuildSafeInput(Context As String, Question As String) As StringDim sysMsg As StringIf Len(Context) > 0 ThensysMsg = "{""role"":""system"",""content"":""上下文:" & EscapeJSON(Context) & """},"End IfBuildSafeInput = "{""model"":""模型的ID"",""messages"":[" & _sysMsg & "{""role"":""user"",""content"":""" & EscapeJSON(Question) & """}]}"End Function' 发送POST请求Private Function PostRequest(apiKey As String, url As String, payload As String) As StringDim http As ObjectSet http = CreateObject("MSXML2.XMLHTTP")On Error Resume NextWith http.Open "POST", url, False.setRequestHeader "Content-Type", "application/json".setRequestHeader "Authorization", "Bearer " & apiKey.send payloadIf Err.Number <> 0 ThenPostRequest = "Error: HTTP Request Failed"Exit FunctionEnd If' 增加10秒超时控制Dim startTime As DoublestartTime = TimerDo While .readyState < 4 And Timer - startTime < 10DoEventsLoopEnd WithIf http.Status = 200 ThenPostRequest = http.responseTextElsePostRequest = "Error " & http.Status & ": " & http.statusTextEnd IfEnd Function' JSON特殊字符转义Private Function EscapeJSON(str As String) As Stringstr = Replace(str, "\", "\\")str = Replace(str, """", "\""")str = Replace(str, vbCr, "\r")str = Replace(str, vbLf, "\n")str = Replace(str, vbTab, "\t")EscapeJSON = strEnd Function' 智能解析响应内容Private Function ParseContent(json As String) As StringDim regex As Object, matches As ObjectSet regex = CreateObject("VBScript.RegExp")' 增强版正则表达式With regex.Pattern = """content"":\s*""((?:\\""|[\s\S])*?)""".Global = False.MultiLine = True.IgnoreCase = TrueEnd WithSet matches = regex.Execute(json)If matches.Count > 0 ThenDim rawText As StringrawText = matches(0).SubMatches(0)' 反转义处理rawText = Replace(rawText, "\""", """")rawText = Replace(rawText, "\\", "\")rawText = Replace(rawText, "\n", vbCrLf)rawText = Replace(rawText, "\r", vbCr)rawText = Replace(rawText, "\t", vbTab)ParseContent = rawTextElse' 错误信息提取Dim errMatch As Objectregex.Pattern = """message"":\s*""(.*?)"""Set errMatch = regex.Execute(json)If errMatch.Count > 0 ThenParseContent = "API Error: " & errMatch(0).SubMatches(0)ElseParseContent = "Invalid Response"End IfEnd IfEnd Function
四、复制代码
打开Excel点击【开发工具】最左侧点击VB的编辑窗口,然后在右侧点击窗口,找到【模块】插入模块后将代码直接粘贴到右侧的空白区域即可,一定需要记得将上面的三处做一下修改,才能正确的调用到这个模型,至此就设置完毕了
用法:=ExcelAI(单元格,”你需要的结果”)

五、参考视频
想学跟我Excel,可以在下方了解下我的课程,函数、透视表、图表、数据看板、AI都有,购买后免费答疑,点击下方链接了解详情

Excel系列课程(Deepseek、函数、透视表、图表、数据看板)

END