需要循环增加到最后一列的公式

我环顾四周,但找不到完全符合我需要的function。 我基本上是做一个替代,但只有在一个X的单元格,并取而代之的是它自己的头的价值

Columns("B:B").Select Selection.Replace What:="X", Replacement:="=B2", LookAt:=xlPart, _ SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Columns("C:C").Select Selection.Replace What:="X", Replacement:="=C2", LookAt:=xlPart, _ SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Columns("D:D").Select Selection.Replace What:="X", Replacement:="=D2", LookAt:=xlPart, _ SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False 

这一直继续下去,直到最后一列为止。 在这种情况下,它是CD。 这显然是不切实际的,并且是循环的一种方式,其中Replacement:=“= B2”的值在每次通过时只会增加一个列值就是理想的。

我认为第2行是你应该在看到范围的基础上,因为这是在Range.Replace方法中传输的。

 Sub X_to_HDR() Dim c As Long With Worksheets("sheet1") With .Cells(2, 1).CurrentRegion With .Resize(.Rows.Count - 1, .Columns.Count - 1).Offset(1, 1) For c = 1 To .Columns.Count With .Columns(c) .Replace What:="X", Replacement:=Chr(61) & .Parent.Cells(2, c + 1).Address(0, 0), _ LookAt:=xlWhole, MatchCase:=False End With Next c End With End With End With End Sub 

我把你的xlPart改成xlWhole ; 如果您觉得原件更合适,请将其更改。

这里有一个循环,应该根据你的描述得到你需要的东西:

 Sub LoopColumns() Dim ws1 As Worksheet Set ws1 = Worksheets("Sheet1") 'chnage as needed Dim rColumns As Range, rCell As Range Set rColumns = ws1.Range(ws1.Range("B2"), ws1.Range("B2").End(xlToRight)) ' asssumes contiguous range of headers For Each rCell In rColumns rCell.EntireColumn.Replace What:="X", Replacement:=rCell.Value2, LookAt:=xlPart, _ SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Next End Sub