2016-02-18 22 views
0
If Worksheets("HR-Calc").Range("L2") = "01+" Then 

Application.ScreenUpdating = False 
    Range("A7").FormulaR1C1 = "1" 
    Range("A8").FormulaR1C1 = "2" 
    Range("A9").FormulaR1C1 = "3" 
    Range("A10").FormulaR1C1 = "4" 
    Range("A11").FormulaR1C1 = "5" 
    Range("A12").FormulaR1C1 = "6" 
    Range("A13").FormulaR1C1 = "7" 
    Range("A14").FormulaR1C1 = "8" 
    Range("A15").FormulaR1C1 = "9" 
    Range("A16").FormulaR1C1 = "10" 
    Range("A17").FormulaR1C1 = "11" 
    Range("A18").FormulaR1C1 = "12" 
    Range("A19").FormulaR1C1 = "13" 
    Range("A20").FormulaR1C1 = "14" 
    Range("A21").FormulaR1C1 = "15" 
    Range("A22").FormulaR1C1 = "16" 
    Range("A23").FormulaR1C1 = "17" 
    Range("A24").FormulaR1C1 = "18" 
    Range("A25").FormulaR1C1 = "19" 
    Range("A26").FormulaR1C1 = "20" 
    Range("A27").FormulaR1C1 = "21" 
    Range("A28").FormulaR1C1 = "22" 
    Range("A29").FormulaR1C1 = "23" 
    Range("A30").FormulaR1C1 = "24" 
    Range("A31").FormulaR1C1 = "25" 
    Range("A32").FormulaR1C1 = "26" 
    Range("A33").FormulaR1C1 = "27" 
    Range("A34").FormulaR1C1 = "28" 
    Range("A35").FormulaR1C1 = "29" 
    Range("A36").FormulaR1C1 = "30" 
    Range("A37").FormulaR1C1 = "31" 
    Range("A38").FormulaR1C1 = "32" 
    Range("A39").FormulaR1C1 = "33" 
    Range("A40").FormulaR1C1 = "34" 
    Range("A41").FormulaR1C1 = "35" 
    Range("A42").FormulaR1C1 = "36" 
' maximum nuber of strings is currently 36. To increase follow pattern shown ie A43/37 , A44/38 etc etc. 
'if maximum is changed it must be changed in all string format sections 01, 01/02, 01/02/03, & 01/02/03/04 

If Worksheets("HR-Calc").Range("F2") = "STAGGER" Then 
    Range("C7").FormulaR1C1 = "STR.01+" 
    Range("C8").FormulaR1C1 = "STR.02+" 
    Range("C9").FormulaR1C1 = "STR.03+" 
    Range("C10").FormulaR1C1 = "STR.04+" 
    Range("C11").FormulaR1C1 = "STR.05+" 
    Range("C12").FormulaR1C1 = "STR.06+" 
    Range("C13").FormulaR1C1 = "STR.07+" 
    Range("C14").FormulaR1C1 = "STR.08+" 
    Range("C15").FormulaR1C1 = "STR.09+" 
    Range("C16").FormulaR1C1 = "STR.10+" 
    Range("C17").FormulaR1C1 = "STR.11+" 
    Range("C18").FormulaR1C1 = "STR.12+" 
    Range("C19").FormulaR1C1 = "STR.13+" 
    Range("C20").FormulaR1C1 = "STR.14+" 
    Range("C21").FormulaR1C1 = "STR.15+" 
    Range("C22").FormulaR1C1 = "STR.16+" 
    Range("C23").FormulaR1C1 = "STR.17+" 
    Range("C24").FormulaR1C1 = "STR.18+" 
    Range("C25").FormulaR1C1 = "STR.19+" 
    Range("C26").FormulaR1C1 = "STR.20+" 
    Range("C27").FormulaR1C1 = "STR.21+" 
    Range("C28").FormulaR1C1 = "STR.22+" 
    Range("C29").FormulaR1C1 = "STR.23+" 
    Range("C30").FormulaR1C1 = "STR.24+" 
    Range("C31").FormulaR1C1 = "STR.25+" 
    Range("C32").FormulaR1C1 = "STR.26+" 
    Range("C33").FormulaR1C1 = "STR.27+" 
    Range("C34").FormulaR1C1 = "STR.28+" 
    Range("C35").FormulaR1C1 = "STR.29+" 
    Range("C36").FormulaR1C1 = "STR.30+" 
    Range("C37").FormulaR1C1 = "STR.31+" 
    Range("C38").FormulaR1C1 = "STR.32+" 
    Range("C39").FormulaR1C1 = "STR.33+" 
    Range("C40").FormulaR1C1 = "STR.34+" 
    Range("C41").FormulaR1C1 = "STR.35+" 
    Range("C42").FormulaR1C1 = "STR.36+" 

    Else 

    Range("C7").FormulaR1C1 = "01+" 
    Range("C8").FormulaR1C1 = "02+" 
    Range("C9").FormulaR1C1 = "03+" 
    Range("C10").FormulaR1C1 = "04+" 
    Range("C11").FormulaR1C1 = "05+" 
    Range("C12").FormulaR1C1 = "06+" 
    Range("C13").FormulaR1C1 = "07+" 
    Range("C14").FormulaR1C1 = "08+" 
    Range("C15").FormulaR1C1 = "09+" 
    Range("C16").FormulaR1C1 = "10+" 
    Range("C17").FormulaR1C1 = "11+" 
    Range("C18").FormulaR1C1 = "12+" 
    Range("C19").FormulaR1C1 = "13+" 
    Range("C20").FormulaR1C1 = "14+" 
    Range("C21").FormulaR1C1 = "15+" 
    Range("C22").FormulaR1C1 = "16+" 
    Range("C23").FormulaR1C1 = "17+" 
    Range("C24").FormulaR1C1 = "18+" 
    Range("C25").FormulaR1C1 = "19+" 
    Range("C26").FormulaR1C1 = "20+" 
    Range("C27").FormulaR1C1 = "21+" 
    Range("C28").FormulaR1C1 = "22+" 
    Range("C29").FormulaR1C1 = "23+" 
    Range("C30").FormulaR1C1 = "24+" 
    Range("C31").FormulaR1C1 = "25+" 
    Range("C32").FormulaR1C1 = "26+" 
    Range("C33").FormulaR1C1 = "27+" 
    Range("C34").FormulaR1C1 = "28+" 
    Range("C35").FormulaR1C1 = "29+" 
    Range("C36").FormulaR1C1 = "30+" 
    Range("C37").FormulaR1C1 = "31+" 
    Range("C38").FormulaR1C1 = "32+" 
    Range("C39").FormulaR1C1 = "33+" 
    Range("C40").FormulaR1C1 = "34+" 
    Range("C41").FormulaR1C1 = "35+" 
    Range("C42").FormulaR1C1 = "36+" 
    End If 
' only adds the positive string numbers to the list, all negative will be added later on in code 



' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---------------------------- 01+ 

' ---------------------------------------------------------------------------- 01/02+ 
ElseIf Worksheets("HR-Calc").Range("L2") = "01/02+" Then 

Application.ScreenUpdating = False 
' 
    Range("A7").FormulaR1C1 = "1" 
    Range("A8").FormulaR1C1 = "2" 
    Range("A9").FormulaR1C1 = "3" 
    Range("A10").FormulaR1C1 = "4" 
    Range("A11").FormulaR1C1 = "5" 
    Range("A12").FormulaR1C1 = "6" 
    Range("A13").FormulaR1C1 = "7" 
    Range("A14").FormulaR1C1 = "8" 
    Range("A15").FormulaR1C1 = "9" 
    Range("A16").FormulaR1C1 = "10" 
    Range("A17").FormulaR1C1 = "11" 
    Range("A18").FormulaR1C1 = "12" 
    Range("A19").FormulaR1C1 = "13" 
    Range("A20").FormulaR1C1 = "14" 
    Range("A21").FormulaR1C1 = "15" 
    Range("A22").FormulaR1C1 = "16" 
    Range("A23").FormulaR1C1 = "17" 
    Range("A24").FormulaR1C1 = "18" 


If Worksheets("HR-Calc").Range("F2") = "STAGGER" Then 

    Range("C7").FormulaR1C1 = "STR.01/02+" 
    Range("C8").FormulaR1C1 = "STR.03/04+" 
    Range("C9").FormulaR1C1 = "STR.05/06+" 
    Range("C10").FormulaR1C1 = "STR.07/08+" 
    Range("C11").FormulaR1C1 = "STR.09/10+" 
    Range("C12").FormulaR1C1 = "STR.11/12+" 
    Range("C13").FormulaR1C1 = "STR.13/14+" 
    Range("C14").FormulaR1C1 = "STR.15/16+" 
    Range("C15").FormulaR1C1 = "STR.17/18+" 
    Range("C16").FormulaR1C1 = "STR.19/20+" 
    Range("C17").FormulaR1C1 = "STR.21/22+" 
    Range("C18").FormulaR1C1 = "STR.23/24+" 
    Range("C19").FormulaR1C1 = "STR.25/26+" 
    Range("C20").FormulaR1C1 = "STR.27/28+" 
    Range("C21").FormulaR1C1 = "STR.29/30+" 
    Range("C22").FormulaR1C1 = "STR.31/32+" 
    Range("C23").FormulaR1C1 = "STR.33/34+" 
    Range("C24").FormulaR1C1 = "STR.35/36+" 

Else 

    Range("C7").FormulaR1C1 = "01/02+" 
    Range("C8").FormulaR1C1 = "03/04+" 
    Range("C9").FormulaR1C1 = "05/06+" 
    Range("C10").FormulaR1C1 = "07/08+" 
    Range("C11").FormulaR1C1 = "09/10+" 
    Range("C12").FormulaR1C1 = "11/12+" 
    Range("C13").FormulaR1C1 = "13/14+" 
    Range("C14").FormulaR1C1 = "15/16+" 
    Range("C15").FormulaR1C1 = "17/18+" 
    Range("C16").FormulaR1C1 = "19/20+" 
    Range("C17").FormulaR1C1 = "21/22+" 
    Range("C18").FormulaR1C1 = "23/24+" 
    Range("C19").FormulaR1C1 = "25/26+" 
    Range("C20").FormulaR1C1 = "27/28+" 
    Range("C21").FormulaR1C1 = "29/30+" 
    Range("C22").FormulaR1C1 = "31/32+" 
    Range("C23").FormulaR1C1 = "33/34+" 
    Range("C24").FormulaR1C1 = "35/36+" 

    End If 
    ' only adds the positive string numbers to the list, all negative will be added later on in code 
' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---------------------------- 01/02+ 

显示的代码只有一半的宏,01+,01/02 +显示,但也有01/02/03 +和01/02/03/04 +。目前上面的代码工作得很好,唯一的问题是,如果我的列表中需要超过36个项目,我必须运行宏然后进入并手动添加更多数据点。由于不同的项目,我不得不三次扩展这个宏。单元格M2有最大数量的列表将会去(目前36),有没有更快的方式来做到这一点,而不是我的手动方法,它允许用户输入他们需要的任何数字?excel 2010宏根据用户的最大值生成列表

更新:循环代码(从拉尔夫一些帮助)。更清洁的方法和少得多的代码

' ---------------------------------------------------------------------------- 01+ string format 
If Range("L2") = "01+" Then 

Dim i As Integer 
For i = 1 To Range("m2") 
Cells(6 + i, 1).Value = 0 + i 
If Worksheets("HR-Calc").Range("F2") = "STAGGER" Then 
    Range("c" & 6 + i).FormulaR1C1 = "STR." & Right("0" & i, 2) & "+" 
     Else 
      Range("c" & 6 + i).FormulaR1C1 = Right("0" & i, 2) & "+" 
       End If 
Next i 
' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---------------------------- 01+ 

' ---------------------------------------------------------------------------- 01/02+ string format 
ElseIf Range("L2") = "01/02+" Then 
maxn = Range("m2")/2 
For i = 1 To maxn 
Cells(6 + i, 1).Value = 0 + i 
If Worksheets("HR-Calc").Range("F2") = "STAGGER" Then 
    Range("c" & 6 + i).FormulaR1C1 = "STR." & Right("0" & (2 * i) - 1, 2) & "/" & Right("0" & (2 * i), 2) & "+" 
     Else 
      Range("c" & 6 + i).FormulaR1C1 = Right("0" & (2 * i) - 1, 2) & "/" & Right("0" & (2 * i), 2) & "+" 
       End If 
Next i 
' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---------------------------- 01/02+ 

' ---------------------------------------------------------------------------- 01/02/03+ string format 
ElseIf Range("L2") = "01/02/03+" Then 
maxn = Range("m2")/3 
For i = 1 To maxn 
Cells(6 + i, 1).Value = 0 + i 
If Worksheets("HR-Calc").Range("F2") = "STAGGER" Then 
    Range("c" & 6 + i).FormulaR1C1 = "STR." & Right("0" & (3 * i) - 2, 2) & "/" & Right("0" & (3 * i) - 1, 2) & "/" & Right("0" & (3 * i), 2) & "+" 
     Else 
      Range("c" & 6 + i).FormulaR1C1 = Right("0" & (3 * i) - 2, 2) & "/" & Right("0" & (3 * i) - 1, 2) & "/" & Right("0" & (3 * i), 2) & "+" 
       End If 
Next i 
' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---------------------------- 01/02/03+ 

' ---------------------------------------------------------------------------- 01/02/03/04+ string format 
ElseIf Range("L2") = "01/02/03/04+" Then 
maxn = Round(Range("m2")/4, 0) 
For i = 1 To maxn 
Cells(6 + i, 1).Value = 0 + i 
If Worksheets("HR-Calc").Range("F2") = "STAGGER" Then 
    Range("c" & 6 + i).FormulaR1C1 = "STR." & Right("0" & (4 * i) - 3, 2) & "/" & Right("0" & (4 * i) - 2, 2) & "/" & Right("0" & (4 * i) - 1, 2) & "/" & Right("0" & (4 * i), 2) & "+" 
     Else 
     Range("c" & 6 + i).FormulaR1C1 = Right("0" & (4 * i) - 3, 2) & "/" & Right("0" & (4 * i) - 2, 2) & "/" & Right("0" & (4 * i) - 1, 2) & "/" & Right("0" & (4 * i), 2) & "+" 
      End If 
Next i 
' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---------------------------- 01/02/03/04+ 
End If 
+0

你可能要考虑循环(为你做的工作):http://www.homeandlearn.org/excel_vba_for_loops.html – Ralph

+0

我得到了简单的1第一回路最大计数时,下一部分在结尾添加了“+”我没有运气,与组合数字相同(01/02 +) –

+0

我在一个小代码片段下面添加了一些内容,只是为了向您展示如何使用“ +”。我想你会发现漂移,并且能够对其他“组合”数字做同样的处理。当您遇到任何严重问题时,请通知我们。此外,请更新您的问题以反映您的改进代码(您提到您已经能够完成某些工作)。 – Ralph

回答

1
For i = 1 to 36 
    Range("C" & 6 + i).FormulaR1C1 = Right("0" & i, 2) & "+" 
Next i 
+0

这适用于“01+”。午餐后我需要做一些修补,我认为这应该适用于01/02 +和其他 –

+0

我很高兴听到这个消息。祝你好运。如果您再次遇到问题,请告诉我们。 – Ralph

3

你在做什么有点痛苦。通过替换的代码块等开始:

Range("A7").FormulaR1C1 = "1" 
    Range("A8").FormulaR1C1 = "2" 
    Range("A9").FormulaR1C1 = "3" 
    Range("A10").FormulaR1C1 = "4" 
    Range("A11").FormulaR1C1 = "5" 
    Range("A12").FormulaR1C1 = "6" 
    Range("A13").FormulaR1C1 = "7" 
    Range("A14").FormulaR1C1 = "8" 
    Range("A15").FormulaR1C1 = "9" 
    Range("A16").FormulaR1C1 = "10" 
    Range("A17").FormulaR1C1 = "11" 
    Range("A18").FormulaR1C1 = "12" 
    Range("A19").FormulaR1C1 = "13" 
    Range("A20").FormulaR1C1 = "14" 
    Range("A21").FormulaR1C1 = "15" 
    Range("A22").FormulaR1C1 = "16" 
    Range("A23").FormulaR1C1 = "17" 
    Range("A24").FormulaR1C1 = "18" 
    Range("A25").FormulaR1C1 = "19" 
    Range("A26").FormulaR1C1 = "20" 
    Range("A27").FormulaR1C1 = "21" 
    Range("A28").FormulaR1C1 = "22" 
    Range("A29").FormulaR1C1 = "23" 
    Range("A30").FormulaR1C1 = "24" 
    Range("A31").FormulaR1C1 = "25" 
    Range("A32").FormulaR1C1 = "26" 
    Range("A33").FormulaR1C1 = "27" 
    Range("A34").FormulaR1C1 = "28" 
    Range("A35").FormulaR1C1 = "29" 
    Range("A36").FormulaR1C1 = "30" 
    Range("A37").FormulaR1C1 = "31" 
    Range("A38").FormulaR1C1 = "32" 
    Range("A39").FormulaR1C1 = "33" 
    Range("A40").FormulaR1C1 = "34" 
    Range("A41").FormulaR1C1 = "35" 
    Range("A42").FormulaR1C1 = "36" 

与:

Range("A7:A42").Formula = "=rows($1:1)" 
Range("A7:A42").Value = Range("A7:A42").Value 

或:

With Range("A7:A42") 
     .Formula = "=rows($1:1)" 
     .Value = .Value 
    End With 

会更容易具有比添加更多的参数来代替代码行。

+0

非常好,我使用循环形式的其他答案,但我喜欢你的方法来生产柜台列。 –