Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3816|回复: 8

[已解决]关于关键字提取的问题

[复制链接]
发表于 2013-8-28 08:37 | 显示全部楼层 |阅读模式
本帖最后由 xzwdk 于 2013-8-28 14:22 编辑

我想在K28单元格内输入信息,然后将内容的各关键字分解到指定的单元格内。目前我用函数已经实现了结果,由于此部分为我的表格的一项内容,但是由于函数公式较复杂,所以运行比较慢,希望各位老师根据我目前的运算函数,帮我用VBA实现以上功能(需要维持表格的目前框架)。鉴于K28中的输入内容比较丰富,特别是“-”前的位数可能为4位数也可能是5位数,字符“-”后面可能是2位数字或3位数字加字母,字符“DN”后面可能是2位数字、3位数字或者4位数字,同时,输入内容还需要保留一定数量的空格,见举例。所以上面的函数判断条件比较多。辛苦各位老师了。谢谢。
最佳答案
2013-8-28 10:24
本帖最后由 redsheep 于 2013-8-28 10:57 编辑

给你做了一个试试吧
分解关键字.zip (15.39 KB, 下载次数: 37)
信息表.JPG

分解关键字.zip

12.01 KB, 下载次数: 13

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-8-28 08:53 | 显示全部楼层
回复

使用道具 举报

发表于 2013-8-28 08:59 | 显示全部楼层
回复

使用道具 举报

发表于 2013-8-28 09:30 | 显示全部楼层
你应该把你涉及问题的各举一个例子,那样便于别人理解后再帮助你的。
回复

使用道具 举报

 楼主| 发表于 2013-8-28 10:01 | 显示全部楼层
w2001pf 发表于 2013-8-28 09:30
你应该把你涉及问题的各举一个例子,那样便于别人理解后再帮助你的。

我的VB基础比较薄,目前不知道如何用VBA实现以上功能。还请给以指导,谢谢!
回复

使用道具 举报

发表于 2013-8-28 10:24 | 显示全部楼层    本楼为最佳答案   
本帖最后由 redsheep 于 2013-8-28 10:57 编辑

给你做了一个试试吧
分解关键字.zip (15.39 KB, 下载次数: 37)
回复

使用道具 举报

 楼主| 发表于 2013-8-28 14:21 | 显示全部楼层
本帖最后由 xzwdk 于 2013-8-28 14:28 编辑
redsheep 发表于 2013-8-28 10:24
给你做了一个试试吧

谢谢老师的支持。我修改了一部分内容后,虽然已经实现我的要求了,还请老师看看还有没有需要优化的地方?

'取第8-10个关键字
KyWrd(8) = Char(3)
If InStr(1, Char(4), "Ex") Or InStr(1, Char(4), "EX") Or InStr(1, Char(4), "ex") Then
  KyWrd(9) = Char(4)
  If KyWrd(2) = 6 Then KyWrd(10) = Char(5)
Else
  If KyWrd(2) = 6 Then KyWrd(10) = Char(4)
End If



回复

使用道具 举报

发表于 2013-8-28 22:24 | 显示全部楼层
xzwdk 发表于 2013-8-28 14:21
谢谢老师的支持。我修改了一部分内容后,虽然已经实现我的要求了,还请老师看看还有没有需要优化的地方? ...

原来最后几个也有要求   当时没看明白

是不是第2个得有数字  并且含"ex"字符的才是关键词9?
是不是第2个是6,且含"作用"字符的才是关键词10?
你原来的公式真的让人头大啊   谁能根据你那个公式把每条定义都看全了啊

刚刚研究了一下like这个功能  判断条件简化了一下    增加了上面说的功能
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. If Target.Address <> "$K$28" Then Exit Sub
  3. On Error Resume Next '忽略错误
  4. Dim Char(5), KyWrd(10)
  5. Dim Txt, A, B, C, D, i, m, q

  6. Txt = Replace(Sheet1.[k28].Value, "-", " ")

  7. '将原数据按照分隔符分成5部分
  8. D = 1
  9. For i = 1 To Len(Txt)
  10.     If Mid(Txt, i, 1) <> " " Then
  11.         Char(D) = Char(D) & Mid(Txt, i, 1)
  12.     Else
  13.         D = D + 1
  14.     End If
  15. Next

  16. '取前2个关键字
  17. A = Len(Char(1))
  18. If Char(1) Like "?[0-9]*" Then '判断第二个字符是不是数字
  19.     KyWrd(1) = Left(Char(1), 1)
  20.     If A = 5 Then KyWrd(2) = Mid(Char(1), 2, 1)
  21. Else
  22.     KyWrd(1) = Left(Char(1), 2)
  23. End If

  24. '取第3-5个关键字
  25. KyWrd(3) = Mid(Char(1), A - 2, 1)
  26. KyWrd(4) = Mid(Char(1), A - 1, 1)
  27. KyWrd(5) = Mid(Char(1), A - 0, 1)


  28. '取第6-7个关键字
  29. If Char(2) Like "*[0-9]" Then '判断压力等级最后的字符是不是数字
  30.     KyWrd(6) = Char(2)
  31. Else
  32.     KyWrd(6) = Left(Char(2), Len(Char(2)) - 1)
  33.     KyWrd(7) = Right(Char(2), 1)
  34. End If


  35. '取第8关键字
  36. KyWrd(8) = Char(3)

  37. '取第9关键字
  38. If UCase(Char(4)) Like "EX*" And KyWrd(2) <> "" Then KyWrd(9) = Char(4)

  39. '取第10关键字
  40. If KyWrd(2) = 6 Then
  41.     If Char(4) Like "*作用*" Then KyWrd(10) = Char(4)
  42.     If Char(5) Like "*作用*" Then KyWrd(10) = Char(5)
  43. End If

  44. '把关键字传递到表格
  45. For q = 1 To 10
  46.     Sheet1.Cells(q * 2 + 3, 12).Value = KyWrd(q) '测试的时候中间那个 12 是把结果写道了L列  如果你测试完觉得没问题,就改成 11
  47. Next

  48. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2013-8-29 11:19 | 显示全部楼层
redsheep 发表于 2013-8-28 22:24
原来最后几个也有要求   当时没看明白

是不是第2个得有数字  并且含"ex"字符的才是关键词9?

非常感谢。赞一个,收下了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-25 15:25 , Processed in 0.673361 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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