ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1653|回复: 17

[求助] VBA如何快速将每一行的第一个序号删除

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-1-30 21:02 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 喝酒的毛毛虫 于 2023-1-30 21:35 编辑

QQ截图20230130210020.jpg
如图,如何使用VBA的方式将前面的序号1.、2.、3.、……等需要删除,使用函数公式可以实现,但是我想用VBA的方式去做,因为需要做大量重复的工作,使用宏就比较方便一些。是否有VB代码可以实现批量删除每一行第一个数字序号呢?(因为有些行可能是多个数字序号的,如某一行显示:1.姓名.张三.X.李四,我只要删除1.即可)请高手支招,非常感谢。

TA的精华主题

TA的得分主题

发表于 2023-1-30 21:17 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 shiruiqiang 于 2023-1-30 21:24 编辑

直接替换"*."试试,vba里也可以吧,如果有多个"."的话,下面老师有说明

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-1-30 21:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
shiruiqiang 发表于 2023-1-30 21:17
直接替换"*."试试,vba里也可以吧

可以是可以,但是如果每一行后面还有序号也会被删,我要实现的是第一个序号删除

TA的精华主题

TA的得分主题

发表于 2023-1-30 21:22 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
split(cells(i,1),".")(1)

TA的精华主题

TA的得分主题

发表于 2023-1-31 01:30 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
图片1.png
自已ExcelDIY工具中的代码,里面CreateObject("ExDIY.F")相关的函数都是比较基础的,自己重新实现下就好。


  1. 'X:在文本中搜索的内容
  2. 'iIndexOfX:从第几个X处开始
  3. 'iNumToDelete:删除字符的数量
  4. 'bFromTop:删除的方向,向前或向后
  5. 'bReverseSearch:是否逆向搜索

  6. Sub RemoveTextByContents(WorkRange As Range, x$, iIndexOfX As Long, iNumToDelete As Long, bFromTop As Boolean, bReverseSearch As Boolean, _
  7.                 Optional bModifyFormula As Boolean, Optional bOmitHiddenCell As Boolean)

  8.     Dim a As Range
  9.     Dim CellCount As Long
  10.     Dim TotalCells As Long
  11.     Dim item As Range
  12.     Dim BeginPosition As Long
  13.     Dim iLenX As Long, iLenS As Long
  14.     Dim iNum As Long
  15.     iLenX = Len(x)
  16.    
  17.    
  18.     Dim sht As Worksheet, arr
  19.    

  20.     For Each sht In ActiveWindow.SelectedSheets
  21.         For Each item In CreateObject("ExDIY.F").GetValidRange(sht.Range(WorkRange.Address), bOmitHiddenCell).Areas

  22.             If bModifyFormula Then
  23.                 arr = CreateObject("ExDIY.F").Range2Array(item, "Formula")
  24.             Else
  25.                 arr = CreateObject("ExDIY.F").Range2Array(item)
  26.             End If

  27.             For i = LBound(arr, 1) To UBound(arr, 1)
  28.                 For j = LBound(arr, 2) To UBound(arr, 2)
  29.                     arr(i, j) = CStr(arr(i, j))
  30.                     
  31.                     iLenS = Len(arr(i, j))
  32.                     
  33.                     If iLenS = 0 Then GoTo Nexta

  34.                     '搜索X位置
  35.                     If bReverseSearch Then
  36.                         BeginPosition = CreateObject("ExDIY.F").InstrExRev(CStr(arr(i, j)), x, iIndexOfX)
  37.                     Else
  38.                         BeginPosition = CreateObject("ExDIY.F").InstrEx(CStr(arr(i, j)), x, iIndexOfX)
  39.                     End If

  40.                     '计算开始位置
  41.                     Dim iNumToDelete_ As Long
  42.                     If BeginPosition Then
  43.                         If bFromTop Then
  44.                             If BeginPosition < iLenS Then
  45.                                 If iLenS - BeginPosition - iLenX - iNumToDelete + 1 < 0 Then
  46.                                     iNumToDelete_ = iLenS - BeginPosition - iLenX + 1
  47.                                 Else
  48.                                     iNumToDelete_ = iNumToDelete
  49.                                 End If
  50.                                 arr(i, j) = Left(arr(i, j), BeginPosition + iLenX - 1) & Right(arr(i, j), iLenS - BeginPosition - iLenX - iNumToDelete_ + 1)
  51.                             End If
  52.                         Else
  53.                            
  54.                             If BeginPosition > 1 Then
  55.                                 If BeginPosition - iNumToDelete - 1 < 0 Then
  56.                                     iNumToDelete_ = BeginPosition - 1
  57.                                 Else
  58.                                     iNumToDelete_ = iNumToDelete
  59.                                 End If
  60.                                 arr(i, j) = Left(arr(i, j), BeginPosition - iNumToDelete_ - 1) & Right(arr(i, j), iLenS - BeginPosition + 1)
  61.                             End If
  62.                         End If

  63.                     End If
  64. Nexta:
  65.                 Next j
  66.             Next i
  67.                 CreateObject("ExDIY.F").FillRange item, arr
  68.         Next item
  69.     Next sht
  70. End Sub
复制代码



TA的精华主题

TA的得分主题

发表于 2023-1-31 01:53 | 显示全部楼层
图片1.png

自己ExcelDIY中的一个工具,与楼主相关的代码如下,CreateObject("ExDIY.F")中的函数都是比较基础的,自己写下替换掉就好

  1. 'X:在文本中搜索的内容
  2. 'iIndexOfX:从第几个X处开始
  3. 'iNumToDelete:删除字符的数量
  4. 'bFromTop:删除的方向,向前或向后
  5. 'bReverseSearch:是否逆向搜索

  6. Sub RemoveTextByContents(WorkRange As Range, x$, iIndexOfX As Long, iNumToDelete As Long, bFromTop As Boolean, bReverseSearch As Boolean, _
  7.                 Optional bModifyFormula As Boolean, Optional bOmitHiddenCell As Boolean)

  8.     Dim a As Range
  9.     Dim CellCount As Long
  10.     Dim TotalCells As Long
  11.     Dim item As Range
  12.     Dim BeginPosition As Long
  13.     Dim iLenX As Long, iLenS As Long
  14.     Dim iNum As Long
  15.     iLenX = Len(x)
  16.    
  17.    
  18.     Dim sht As Worksheet, arr
  19.    

  20.     For Each sht In ActiveWindow.SelectedSheets
  21.         For Each item In CreateObject("ExDIY.F").GetValidRange(sht.Range(WorkRange.Address), bOmitHiddenCell).Areas

  22.             If bModifyFormula Then
  23.                 arr = CreateObject("ExDIY.F").Range2Array(item, "Formula")
  24.             Else
  25.                 arr = CreateObject("ExDIY.F").Range2Array(item)
  26.             End If

  27.             For i = LBound(arr, 1) To UBound(arr, 1)
  28.                 For j = LBound(arr, 2) To UBound(arr, 2)
  29.                     arr(i, j) = CStr(arr(i, j))
  30.                     
  31.                     iLenS = Len(arr(i, j))
  32.                     
  33.                     If iLenS = 0 Then GoTo Nexta

  34.                     '搜索X位置
  35.                     If bReverseSearch Then
  36.                         BeginPosition = CreateObject("ExDIY.F").InstrExRev(CStr(arr(i, j)), x, iIndexOfX)
  37.                     Else
  38.                         BeginPosition = CreateObject("ExDIY.F").InstrEx(CStr(arr(i, j)), x, iIndexOfX)
  39.                     End If

  40.                     '计算开始位置
  41.                     Dim iNumToDelete_ As Long
  42.                     If BeginPosition Then
  43.                         If bFromTop Then
  44.                             If BeginPosition < iLenS Then
  45.                                 If iLenS - BeginPosition - iLenX - iNumToDelete + 1 < 0 Then
  46.                                     iNumToDelete_ = iLenS - BeginPosition - iLenX + 1
  47.                                 Else
  48.                                     iNumToDelete_ = iNumToDelete
  49.                                 End If
  50.                                 arr(i, j) = Left(arr(i, j), BeginPosition + iLenX - 1) & Right(arr(i, j), iLenS - BeginPosition - iLenX - iNumToDelete_ + 1)
  51.                             End If
  52.                         Else
  53.                            
  54.                             If BeginPosition > 1 Then
  55.                                 If BeginPosition - iNumToDelete - 1 < 0 Then
  56.                                     iNumToDelete_ = BeginPosition - 1
  57.                                 Else
  58.                                     iNumToDelete_ = iNumToDelete
  59.                                 End If
  60.                                 arr(i, j) = Left(arr(i, j), BeginPosition - iNumToDelete_ - 1) & Right(arr(i, j), iLenS - BeginPosition + 1)
  61.                             End If
  62.                         End If

  63.                     End If
  64. Nexta:
  65.                 Next j
  66.             Next i
  67.                 CreateObject("ExDIY.F").FillRange item, arr
  68.         Next item
  69.     Next sht
  70. End Sub
复制代码


TA的精华主题

TA的得分主题

发表于 2023-1-31 11:42 | 显示全部楼层
sub test
dim cel as range,j as integer
for each cel in range("A1:A" & cells(rows.count,"A").end(xlup).row)
j=instr(cel.value,".")
if j then cel.value=mid(cel.value,j+1)
next
end sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-1-31 18:32 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-1-31 18:48 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
以A列为例
Columns("A:A").Replace What:="*.", Replacement:="", LookAt:=xlPart, SearchFormat:=False

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-1-31 19:59 | 显示全部楼层
tanglf188 发表于 2023-1-31 18:48
以A列为例
Columns("A:A").Replace What:="*.", Replacement:="", LookAt:=xlPart, SearchFormat:=False

删除每一行第一个数字序号呢?(因为有些行可能是多个数字序号的,如某一行显示:1.姓名.张三.X.李四,我只要删除1.即可)
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-19 13:18 , Processed in 0.045736 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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