使用Excel VBAsearch列标题并插入新列

我有一个定期更新的电子表格。 因此列标题位置会定期更改。 例如。 今天“用户名”是K列,但明天的“用户名”可能是L列。我需要在“用户名”右侧添加一个新的列,但是它改变的地方我不能引用单元格/列引用。

到目前为止我有:

Dim rngUsernameHeader As Range Dim rngHeaders As Range Set rngHeaders = Range("1:1") 'Looks in entire first row. Set rngUsernameHeader = rngHeaders.Find("Username") 

当我去添加一个新的列的权利,我select该行,但它回到单元格/列引用…

 Columns("K:K").Select Selection.Insert Shift:=xlToRight Range("K1").Select ActiveCell.FormulaR1C1 = "Role" 

我怎样才能用macros执行这一步?

编辑:我认为需要给这个列标题名称,并开始用数据填充行 – 每次我开始单元格引用,我想尽可能避免。

提前谢谢了。

怎么样:

 Sub qwerty() Dim rngUsernameHeader As Range Dim rngHeaders As Range Set rngHeaders = Range("1:1") 'Looks in entire first row. Set rngUsernameHeader = rngHeaders.Find(what:="Username", After:=Cells(1, 1)) rngUsernameHeader.Offset(0, 1).EntireColumn.Insert rngUsernameHeader.Offset(0, 1).Value = "role" End Sub 
 Sub AddColumn Dim cl as Range For each cl in Range("1:1") If cl = "username" Then cl.EntireColumn.Insert Shift:= xlToRight End If cl.Offset(0, 1) = "role" Next cl End Sub 

未经testing的代码不在我的桌面上

像这样的东西应该工作。 这个想法是,你find列,然后你插入到右边。 这就是为什么你在TestMe+1 。 函数l_locate_value_col返回find该值的列。 如果你愿意,你可以改变可选参数l_row ,这取决于你想要查找哪一行。

 Option Explicit Public Sub TestMe() Dim lngColumn As Long lngColumn = l_locate_value_col("Username", ActiveSheet) Cells(1, lngColumn + 1).EntireColumn.Insert End Sub Public Function l_locate_value_col(target As String, _ ByRef target_sheet As Worksheet, _ Optional l_row As Long = 1) Dim cell_to_find As Range Dim r_local_range As Range Dim my_cell As Range Set r_local_range = target_sheet.Range(target_sheet.Cells(l_row, 1), target_sheet.Cells(l_row, Columns.Count)) For Each my_cell In r_local_range If target = Trim(my_cell) Then l_locate_value_col = my_cell.Column Exit Function End If Next my_cell l_locate_value_col = -1 End Function 

你可以命名你的范围:

 Sub Test() Dim rngUsernameHeader As Range 'UserName is in column F at the moment. Set rngUsernameHeader = Range("UserName") Debug.Print rngUsernameHeader.Address 'Returns $F$1 ThisWorkbook.Worksheets("Sheet2").Range("E:E").Insert Shift:=xlToRight Debug.Print rngUsernameHeader.Address 'Returns $G$1 End Sub 

编辑:已经重写,所以它插入列后面的命名列并返回该引用:

 Sub Test() Dim rngUsernameHeader As Range Dim rngMyNewColumn As Range Set rngUsernameHeader = Range("UserName") rngUsernameHeader.Offset(, 1).Insert Shift:=xlToRight 'You'll need to check the named range doesn't exist first. ThisWorkbook.Names.Add Name:="MyNewRange", _ RefersTo:="='" & rngUsernameHeader.Parent.Name & "'!" & _ rngUsernameHeader.Offset(, 1).Address Set rngMyNewColumn = Range("MyNewRange") MsgBox rngMyNewColumn.Address End Sub