我整个下午都在寻找答案。
代码可以按照我的意愿工作(经过大量的时间研究,我对此非常绿色),除了我想填写前一列中使用的最后一行而不是整张表。
我无法准确引用上一栏,因为它并不总是在同一个地方,因此我为什么要查找它并根据查找结果做所有事情。
我找到的所有答案都使用了Range命令,但我无法找到如何使用我的colNum变量。
Sub cndob()
'
' cndob change dob
'
' find column number and select
'
Dim colNum As Integer
colNum = WorksheetFunction.Match("BDate", Range("1:1"), 0)
Columns(colNum + 1).Select
' insert column right
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
' formula fill down
Cells(2, colNum + 1).Select
ActiveCell.FormulaR1C1 = "=RIGHT(RC[-1],2)&CHAR(47)&MID(RC[-1],5,2)&CHAR(47)&LEFT(RC[-1],4)"
Range(ActiveCell, ActiveCell.End(xlDown)).FillDown
请帮忙
答案 0 :(得分:1)
Range.Offset
属性是完美的解决方案。将您的最后一行代码更改为:
S
Range(ActiveCell, ActiveCell.Offset(0, -1).End(xlDown)).FillDown
的第一个参数是行偏移量。我们不想改变。但是,列偏移量设置为活动列左侧的一个。
答案 1 :(得分:0)
我不确定你到底想做什么,但从我的理解,这样的事情将会起到作用:
Option Explicit
Sub TestMe()
Dim colNum As Long
Dim sht As Worksheet
Dim rng As Range
Set sht = ActiveSheet
colNum = WorksheetFunction.Match("BDate", Range("1:1"), 0)
Set rng = sht.Cells(1, colNum)
rng.Offset(0, 1).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
rng.Offset(0, 1).FormulaR1C1 = "=1+1"
Range(rng, rng.End(xlDown)).Offset(0, 1).FillDown
End Sub
它做什么?它在第一行查找单元格“Bdate”,如果找到它,则向右插入列(如果没有,则表示错误:))。在此之后,它会为每个单元格插入一个公式1+1
,该公式位于右侧。无论如何,这样的事情: