首页 > 其他分享 >Excel中使用VBA写个函数,包含什么文字就显示什么文字。

Excel中使用VBA写个函数,包含什么文字就显示什么文字。

时间:2024-01-15 11:33:22浏览次数:45  
标签:文字 VBA Excel product cell CheckProduct Range

需求如下:

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

相关文章

  • 使用Tesseract做文字识别(OCR)
    使用Tesseract做文字识别(OCR)小糊糊​哈尔滨工业大学计算机科学与技术硕士 39人赞同了该文章前言OCR(opticalcharacterrecognition,光学字符识别)是指直接将包含文本的图像识别为计算机文字(计算机黑白点阵)的技术。图像中的文本一般为印刷体文本。T......
  • 使用 Python 将数据写入 Excel 工作表
    在数据处理和报告生成等工作中,Excel表格是一种常见且广泛使用的工具。然而,手动将大量数据输入到Excel表格中既费时又容易出错。为了提高效率并减少错误,使用Python编程语言来自动化数据写入Excel表格是一个明智的选择。Python作为一种简单易学且功能强大的编程语言,其丰富的......
  • 请使用scss写一个util,用于方便创建毛玻璃特效的背景图片,支持文字在图片上显示,不被遮挡
    下面是一个使用SCSS编写的util,用于创建毛玻璃特效的背景图片,并确保文字不被遮挡。该util使用::before伪元素来创建毛玻璃效果,同时在伪元素上添加文字,以确保文字显示在图片上方。@mixinglassBackground($imageUrl,$textColor:#fff,$blurAmount:10px){position:re......
  • css滑动门效果,文字两侧背景花纹自适应
    css滑动门效果:不同长度的文字,两侧的背景图案一致,如下图所示。效果预览:素材图片:t2.jpg源代码如下:<!DOCTYPEhtml><htmllang="zh-CN"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge">......
  • C#读取Excel表格中的内容
    随手记录,我自己也搞不明白。直接拿去用了publicstaticstringReadXLSX(stringfilePath){stringsb="";using(varfile=newFileStream(filePath,FileMode.Open,FileAccess.Read)){varhssfworkbook=ne......
  • C#生成Excel文件
    在实际运用当中,我是将数据插入到EXCEL模板中,然后生成出带有数据的文档,并将生成的文档传入到FTP当中去的,这篇文章用来记录怎么将数据插入到EXCEL模板中。我的项目是winform程序,我将模板存放在exe程序的根目录下。在写这个方法的时候,我传入了三个参数1、数据源DataModel ;我的数据......
  • 现代 CSS 解决方案:文字颜色自动适配背景色!
    现代CSS解决方案:文字颜色自动适配背景色! 在23年的CSS新特性中,有一个非常重要的功能更新-- 相对颜色。简单而言,相对颜色的功能,让我们在CSS中,对颜色有了更为强大的掌控能力。其核心功能就是,让我们能够基于一个现有颜色A,通过一定的转换规则,快速生成我们想要的颜色......
  • 制作包含中文字体和arthas的dockerfile
    背景1)在openjdk中使用中文字体时会报错,是因为里面不含中文字体。2)web项目经常会出现各种问题需要排查,将arthas装到docker中方便排查问题材料准备需要将宋体文件和最新版arthas-bin放到Dockerfile同级目录下Dockerfile文件编写FROMopenjdk:8-jdk-alpineRUNyuminstal......
  • vba抓取网页数据
    哈喽,哈喽,大家好!大家2024发大财啦!不知道,平时大家爱不爱看电影呢?从今年的贺岁档的拍片来看,今年的电影还挺多,而且国产优秀电影居多,元旦假期期间我也去看了部喜剧片,应该说在2023的年度还能看到一部优秀的国产喜剧片,还是挺开心的。大家看到这里是不是觉得走错频道了?难道我要来讲电影了?不......
  • 不雅文字过滤?springboot可以这样做!实战!
    这里主要讲敏感词过滤与替换两个功能,引入相关maven依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boo......