ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: jeros

[求助] 能够自动根据新闻标题抽取关键词,分类和品牌的新闻分类表

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-6-25 16:08 | 显示全部楼层
lsdongjh 发表于 2019-6-25 10:03
这可以说是偷懒,也可以说是技巧
初始时 strval  为空
本来可以这么写

嗯,这个明白了。

我实际运行的时候发现一个问题,就是Brand和keyword在标题里发现几次的话,它最后就会重复几次显示,比如‘sales,sales,sales',这个怎么把它去重?
我知道可能需要使用正则元字符,但我不知道怎么把这个需求整合到您的代码中去,能麻烦您帮个忙教教我吗?
谢谢!

TA的精华主题

TA的得分主题

发表于 2019-6-25 16:17 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-6-25 16:41 | 显示全部楼层

复杂吗? 有没有啥例子可以看看,我完全不会。
这两天我研究正则已经头晕眼花了,勉强看了个半饱。

TA的精华主题

TA的得分主题

发表于 2019-6-25 20:40 | 显示全部楼层
这题用正则匹配并不合适 ,上百个关键字 全放到一个表达式中?
所以字典匹配更方便。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-6-26 08:42 | 显示全部楼层
zopey 发表于 2019-6-25 20:40
这题用正则匹配并不合适 ,上百个关键字 全放到一个表达式中?
所以字典匹配更方便。

那我回头再看看字典相关知识(又是满头包,你们搞搞十几分钟,我估计得几天,哈哈)
您能就去重那个给个例子吗?
需求很简单,就是有一列,每一个单元格里都有例如‘sales,sales,sales’的字符,格式一样,两头无空格,中间逗号隔开。要求去重。
我就想看个例子我好对照着去找资料学习下字典。。。谢谢啊~

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-6-26 08:44 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-6-26 10:45 | 显示全部楼层

今天又发现一个问题,如果标题里存在类似这样的语句:...sales market... 而sales和market又都是keyword的话,第二个词market就会无法检索到,这个有什么方便的方法改一下代码就可以修正吗?

感谢您一直指导我,谢谢!

TA的精华主题

TA的得分主题

发表于 2019-6-26 12:47 | 显示全部楼层
修正了一下:
1、不再采用空格符,直接用单词边界
2、用字典去重
  1. Option Explicit

  2. Sub Test()
  3.     Dim SH As Worksheet, lngRows As Long, arr As Variant
  4.     Dim strPat_KeyWord As String, strPat_Category As String, strPat_Brand As String, arrPat As Variant
  5.    
  6.     Set SH = Sheets("Keywords_Catalog_Brand")
  7.    
  8.     lngRows = SH.Range("A" & Rows.Count).End(xlUp).Row
  9.     arr = SH.Range("A2:A" & lngRows)
  10.     arr = Application.WorksheetFunction.Transpose(arr)
  11.     strPat_KeyWord = "\b" & Join(arr, "\b" & "|" & "\b") & "\b"
  12.    
  13.     lngRows = SH.Range("B" & Rows.Count).End(xlUp).Row
  14.     arr = SH.Range("B2:B" & lngRows)
  15.     arr = Application.WorksheetFunction.Transpose(arr)
  16.     strPat_Category = "\b" & Join(arr, "\b" & "|" & "\b") & "\b"
  17.    
  18.     lngRows = SH.Range("D" & Rows.Count).End(xlUp).Row
  19.     arr = SH.Range("D2:D" & lngRows)
  20.     arr = Application.WorksheetFunction.Transpose(arr)
  21.     strPat_Brand = "\b" & Join(arr, "\b" & "|" & "\b") & "\b"
  22.    
  23.     ReDim arrPat(1 To 3)
  24.     arrPat(1) = strPat_Brand
  25.     arrPat(2) = strPat_Category
  26.     arrPat(3) = strPat_KeyWord
  27.    
  28.    
  29.     Set SH = Sheets("2018")
  30.     lngRows = SH.Range("H" & Rows.Count).End(xlUp).Row
  31.     arr = SH.Range("H3:H" & lngRows)
  32.    
  33.     arr = GetInfo(arr, arrPat)

  34.     SH.Range("E3").Resize(UBound(arr), 3) = arr
  35. End Sub


  36. Function GetInfo(arr As Variant, arrPat As Variant) As Variant
  37.     Dim objReg As Object, strTemp As String, strPat As String, lngID As Long
  38.     Dim objMatchs As Object, objMatch As Object, strVal As String
  39.     Dim lngRow As Long, arrResult As Variant
  40.     Dim objDic As Object
  41.    
  42.     lngRow = UBound(arr)
  43.     ReDim arrResult(1 To lngRow, 1 To 3)
  44.    
  45.     Set objDic = CreateObject("Scripting.Dictionary")
  46.    
  47.     Set objReg = CreateObject("VBScript.RegExp")
  48.     objReg.Global = True
  49.     objReg.IgnoreCase = True
  50.    
  51.     For lngRow = LBound(arr) To UBound(arr)
  52.         strTemp = "\b" & Trim(arr(lngRow, 1)) & "\b"
  53.         For lngID = 1 To 3
  54.             objReg.Pattern = arrPat(lngID)
  55.             Set objMatchs = objReg.Execute(strTemp)
  56.             objDic.RemoveAll
  57.             For Each objMatch In objMatchs
  58.                 objDic(Trim(objMatch)) = ""
  59.             Next
  60.             arrResult(lngRow, lngID) = Join(objDic.keys, ",")
  61.         Next
  62.     Next
  63.    
  64.     GetInfo = arrResult
  65.    
  66. End Function
复制代码

TA的精华主题

TA的得分主题

发表于 2019-6-26 12:50 | 显示全部楼层
修正:
1、用边界符
2、字典去重
见附件: News to Columns.rar (52.32 KB, 下载次数: 15)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-6-26 14:00 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
lsdongjh 发表于 2019-6-26 12:50
修正:
1、用边界符
2、字典去重

太感谢了,感激涕零,马上去研究下,突然想起公司电脑自动会删除文件含marco的部分。。。sigh。。。
我回家看吧,艾玛想搞个东西真累。或者可以麻烦您把代码贴出来那我上班就能研究了。
感谢大神。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-19 20:56 , Processed in 0.041550 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表