ExceLVBA学习笔记之Find+多列多行删除+列数字与列字母互转

2022-10-25 12:45:36 浏览数 (2)

整理工资表时:有如下工作

  1. 删除后面我工作时辅助的列,它是辅助的,没有必要下发
  2. 删除后面的行,它也是辅助的,没有必要下发

问题是:从那一列开始到那一列要删除,从那一行开始到那一列要删除

--------【思路方法】--------

列可以查找到“备注”所在的列,后面的都不要了

列可以查找到“合计”所在的行,后面的都不要了

--------【开始工作】--------

思路开始:例:

用columns(“26:40”).delete

Rows(“2474:2484”).deleteShift:=xlToLeft

--------【出现问题】--------

行的删除可以啦,但列的删除出问题了columns(“26:40”).deleteShift:=xlUp

--------【学习】--------

通过百度查找问题:学习知识:

Part 1:多行删除

<1>通过Rows和Range两种方法都可以

<2>多行使用行号数字来表示,注意需将行号放入双引号中""

Sub 多行删除()

Set te = ThisWorkbook.Worksheets("示例")

'te.Rows("3:5").Delete Shift:=xlUp

te.Range("3:5").Delete Shift:=xlUp

End Sub

========================

Part 2:多列删除

<1>通过Columns和Range两种方法都可以

<2>列号使用字母表示,注意需将行号放入双引号中""

<3>当使用数字表示列号时,报错

Sub 多列删除()

Set te = ThisWorkbook.Worksheets("示例")

te.Columns("B:D").Delete Shift:=xlToLeft

' te.Range("B:D").Delete Shift:=xlToLeft

End Sub

========================

--------【解决方法】--------

可以先用列数字转化为列字母,再进行删除就可以

--------【知识点1】--------

Address属性的语法如下:

Range对象.Address(RowAbsolute, ColumnAbsolute,ReferenceStyle, External,RelativeTo)

说明:

所有参数均为可选项。

参数RowAbsolute设置为True,则返回的地址行部分为绝对引用。默认值为True。

参数ColumnAbsolute设置为True,则返回的地址的列部分为绝对引用。默认值为True。

参数ReferenceStyle设置返回的地址的引用样式,可以设置为xlA1(A1样式)或xlR1C1(R1C1样式)。默认值为xlA1。

参数External设置为True,返回的地址包含工作簿名和工作表名。设置为False,返回本地地址(即不带工作簿名和工作表名)。默认值为False。

如果参数RowAbsolute和ColumnAbsolute设置为False,参数ReferenceStyle设置为xlR1C

代码:

ActiveCell.Address

返回当前工作表中当前单元格的地址。

代码:

Selection.Address

返回当前工作表中所选区域的地址。

代码:

Range('A1').CurrentRegion.Address

返回当前工作表中单元格A1所在单元格区域的地址。

代码:

ActiveSheet.UsedRange.Address

返回当前工作表中已使用单元格区域的地址。

例子:

Set mc = sheets(1).Cells(1, 1)

mc.Address —— 返回"

mc.Address(0,0) —— 返回 "A1"

简单的说:

Address(0, 0) 相对引用

Address(1, 1) 绝对引用

Address(1, 0) 混合引用(相对列绝对行)

Address(0,1) 混合引用 (相对行绝对列)

【解决代码】字母=Replace(Cells(1, 数字).Address(False, False), "1", "")

解析:先用cells取得第一行第几列的地址的相对位置如:D1,再用replace把1替换为空就可以啦

问题延伸:如果知识列字母如何求列数字呢

我们可以取得“a1:字母1”范围的总列数count就是所要的列数啦

Sub in字母get数字()

' Dim a As String

a= InputBox(prompt:="请输入列字母")

If a <> "" Then

MsgBox Range("a1:" & a & "1").Count

‘取得这个范围的总列数就是我们要的列数字啦

Else

MsgBox "你没输入"

Exit Sub

End If

End Sub

--------【最后完成的代码】--------

--------【小结】--------

1.Find方法,2.多列多行删除,3.列数字与列字母互转

0 人点赞