将公式从一列复制到可变列数

时间:2018-09-25 17:26:12

标签: excel vba excel-vba

我编写了一个宏,该宏根据在用户表单中输入的数字(小于3)在F列的左侧插入了可变数目的列。即,如果用户输入6,则该宏会将3列添加到F列的左侧(原始F,G和H列包含其他数据)。

'Code for "done" button in months prompt
Public Sub Done_Button_Click()

Dim ColumnNum%
Dim xNo As Variant

Application.ScreenUpdating = False

For Each Worksheet In Worksheets
    Worksheet.Unprotect
Next Worksheet


'refernces column "F"
xNo = 6
'References user input from text box (number of months)
y = Add_Columns.Months_Input.Value

For i = 1 To y - 3

    ThisWorkbook.Sheets("Input").Columns(xNo).Insert Shift:=xlRight

    lastColumn = ActiveSheet.Cells(10, Columns.Count).End(xlToLeft).Column  - 3

'Move to next column
    xNo = xNo + 1
Next i

'Hide prompt
Unload Me

Application.ScreenUpdating = False

'Protect All Sheets

On Error Resume Next
Worksheets("DATA").Protect
Worksheets("Input").Protect
Worksheets("Output").Protect
Worksheets("Chart").Protect

'Jump Back to Input Sheet
Sheets("Input").Select
Range("A1").Select

'Save Workbook
ActiveWorkbook.Save

Application.ScreenUpdating = True

End Sub
'User input for number of months
Public Sub Months_Input_Change()
Dim y As String
y = Add_Columns.Months_Input.Value
End Sub

'Tells prompt to reference cell B5 for number of months
Private Sub Userform_Activate()
CMiC_Months.Value = Format(ActiveSheet.Range("B5").Value, "0.0")
With Add_Columns
    .Top = Application.Top + 350
    .Left = Application.Left + 350
End With
End Sub

然后,我要将论坛从E列复制到新插入的列。但是,无论我如何尝试对copy + paste函数进行编程,似乎都可以从A和B列中复制论坛,也可以在论坛中复制到新插入范围的右侧。

将值从E列复制到新创建的列的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

目前尚不清楚您要做什么,是否要复制公式或值?即您要保留公式/格式,还是只保留在E列中计算出的实际值-我认为您需要公式。但这是两种解决方案:

  

然后,我要将论坛从E列复制到新插入的列。

For i = 1 To y - 3

    ThisWorkbook.Sheets("Input").Range("E:E").Copy
    ThisWorkbook.Sheets("Input").Columns(xNo).Insert Shift:=xlRight

    lastColumn = ActiveSheet.Cells(10, Columns.Count).End(xlToLeft).Column - 3

    'Move to next column
    xNo = xNo + 1
Next i
  

将值从E列复制到新创建的列的最佳方法是什么?

For i = 1 To y - 3

    ThisWorkbook.Sheets("Input").Columns(xNo).Insert Shift:=xlRight

    ThisWorkbook.Sheets("Input").Range("E:E").Copy
    ThisWorkbook.Sheets("Input").Columns(xNo).PasteSpecial xlPasteValues

    lastColumn = ActiveSheet.Cells(10, Columns.Count).End(xlToLeft).Column - 3

    'Move to next column
    xNo = xNo + 1
Next i