需求如下:
Excel 的 D列是包含文字,E列是显示文字,也即是对应表。
B列是数据,C列写公式呈现结果。
若B列的文字包含了D列其中某个单元格的文字,同时若E列对应行有文字,就显示E列的对应文字,否则显示D列的对应文字。
由于Excel的VBA年代久远,很少使用,因此决定使用AI来生成。
一开始用公式,不行,改用VBA。
本来以为是很简单的事情,结果我使用了ChatGPT4.0和其它多个大模型,花费大量时间,都无法解决问题。
最终参考了:在Excel中循环遍历区域的每一行 : https://cloud.tencent.com/developer/ask/sof/70391
轻松解决。
看来大语言模型还是长路漫漫啊。。。
代码如下:(写好后,Excel里按下F9来更新)
Function CheckProduct(CheckCell As Range, ProductRange As Range) As String 'excel,D列有很多产品名称,比如”国际货物“,“餐饮”,”标签“,等等。 '请在C1里写个excel公式, '例如B1里是:¥99999.00-国际货物运输代理服-044032200211 '如果B1的文字里包含D列里的产品名称,比如”国际货物“,那么C1就显示“国际货物”, '如果B1包含”餐饮“,那么C1就显示“餐饮”, '如B1包含“标签”C1就显示”标签“, '……直到不包含D列里的产品名称,其余就显示”其它“ 'C2里写的公式是:=CheckProduct(B2,$D$2:$D$50) 'D列是:包含文字,国际货物,汽油,标签,机票,住宿,餐饮,餐费 'E列是:显示文字,,差旅费,差旅费,差旅费,差旅费 Dim cell As Range Dim product As Variant CheckProduct = "其它" ' 默认返回值 '旧的方法,麻烦,必须写死Range在这里 ' 循环遍历每个产品名称 '注意不能直接使用 For Each cell In ProductRange,'更不能使用 Range(ProductRange),不知道为什么! ' For Each cell1 In Range("D1:D50") '必须把Range写死在这里! ' product = cell1.Value ' ' 如果单元格中包含产品名称,则返回该产品名称 ' If InStr(1, CheckCell.Value, product) > 0 And product <> "" Then ' CheckProduct = product ' Exit Function ' End If ' Next cell1 '新的方法,好用,解决了! Set rng = ProductRange ' Range("D1:D50") For Each Row In rng.Rows For Each cell In Row.Cells 'Do Something product = cell.Value '比如D列 ShowDetail = cell.Offset(0, 1).Value '比如E列 If InStr(1, CheckCell.Value, product) > 0 And product <> "" Then 'Debug.Print (product & "," & ShowDetail) 'MsgBox (product & "," & ShowDetail) If ShowDetail = "" Then CheckProduct = product Else CheckProduct = ShowDetail End If Exit Function End If Next cell Next Row End Function
标签:文字,VBA,Excel,product,cell,CheckProduct,Range From: https://www.cnblogs.com/harryglory/p/17965027