我需要一个Excel宏来将范围复制到新范围并重命名新范围内的命名范围

时间:2016-04-19 10:29:02

标签: excel vba excel-vba

我有一张名为Progress的工作表,其中有一个范围(C5:C56)。 在C5中,我进入了Wk1。 在C6中,我进入了Wk2。 此序列一直持续到Wk52在C56中。

在D5:E5中我有引用命名范围的公式。 在D5中,我有公式= COUNT(Wk1CountTrainingSessions)。 在E6中我有公式= Wk1HrsTraining

我需要一个宏将范围D5:E5复制到D6:E6,然后将范围D6:E6中的公式中的命名范围从Wk1开始更改为从Wk2开始。

我希望能够在接下来的每一周培训中重复这一点。 例如,对于Wk3,宏将复制D6:E6到D7:E7,并将公式中的命名范围更改为以Wk3开头。

我尝试了这段代码并且无法正常工作

    Sub ChangeNamedRangesOnProgressSheet()

Dim RangeName As Name
Dim RangeName2 As String
Dim NewRangeName As String
Dim j As Range
Dim ws As Worksheet
Dim Progress As Worksheet


Worksheets("Progress").Range("D5:E5").Copy _
    Destination:=Worksheets("Progress").Range("D6:E6")

'''''   Delete invalid named ranges
For Each RangeName In ws.Names
    If InStr(1, RangeName.RefersTo, "#REF!") > 0 Then
        RangeName.Delete
    End If
Next RangeName


j = Range("C6")
For Each RangeName In Worksheet.Progress
        If InStr(1, RangeName, "Wk1", 1) > 0 Then
            NewRangeName = Replace(RangeName.Name, "Wk1", j)
            RangeName2 = Replace(RangeName, "='Wk1'", j)

    Next RangeName
    j = j.Offset(1)

MsgBox "Done"

我也尝试过这个代码,类似于下面psot评论中的Karthicks建议。它不起作用

Sub test()

Dim i As Long
Dim CountTrainingSessions As String
Dim HrsTraining As String
Dim Wk As String

    For i = 5 To 56
  Range("D" & i).Value = Range("Wk" & i & "CountTrainingSessions").Count
  Range("E" & i).Value = Range("Wk" & i & "HrsTraining")
    Next i
End Sub

1 个答案:

答案 0 :(得分:0)

希望你能找到这个

Sub test()
    For i = 5 To 56
        Range("D" & i).Value = Application.WorksheetFunction.Count(Range("C" & i) & CountTrainingSessions)
        Range("E" & i).Value = Application.WorksheetFunction.Count(Range("C" & i) & HrsTraining)
    Next i
End Sub

如果您需要配方,请尝试以下

Sub test()
    Dim i As Long 
    Dim CountTrainingSessions As String
    Dim HrsTraining As String
    For i = 5 To 56
        Range("D" & i).Formula = "=Count(" & Range("C" & i) & "CountTrainingSessions)"
        Range("E" & i).Formula = "=Count(" & Range("C" & i) & "HrsTraining)"
    Next i
End Sub