Excel列的变量。列分配给变量

时间:2016-01-29 21:57:28

标签: excel vba excel-vba

我有一个宏,在我当前的工作表上插入2列并粘贴另一张工作表中的信息。

我想创建分配给每个列的2个变量,这些变量将在下次运行宏时将更改,以便将信息粘贴到接下来的两列中。

Columns("BO:BO").Select

Selection.Insert Shift:=xlToRight

Range("BO2").Select
ActiveCell.FormulaR1C1 = "Feb weekly-wk 2"
Range("BO19").Select
ActiveCell.FormulaR1C1 = _
    "=VLOOKUP(Comparison!RC2,'Jan16 wk4'!R3C15:R34C24,9,FALSE)"
Range("BO19").Select
Selection.AutoFill Destination:=Range("BO19:BO47"), Type:=xlFillDefault
Range("BO19:BO47").Select

Columns("BP:BP").Select

Selection.Insert Shift:=xlToRight
Range("BP2").Select
Selection.Style = "20% - Accent6"
Range("BP2").Select
ActiveCell.FormulaR1C1 = "Diff"
Range("BP19").Select
ActiveCell.FormulaR1C1 = "=RC[-2]-RC[-1]"

我的想法是设置一个变量,我将替换当前的“BO”和“BP”代码。

Dim X as String, Y as String

X = "BO"

y = "BP"

当我运行宏时,它会将此示例“BO”的变量更改为“BQ”,将“BP”更改为“BR”。下次运行宏时,会将“BQ”更改为“BS”,将“BR”更改为“BT”。

3 个答案:

答案 0 :(得分:0)

如果您实际上没有将BO / BP写入您正在转换的范围,我将使用两个整数,存储在隐藏的工作表中。每次运行宏时都可以读/写。

在我看来,这是一个更简单的解决方案,其他地方可能是global variables或将其存储到文件中。

答案 1 :(得分:0)

我刚刚清理了一下你的代码:

Dim ColBO As Integer
Dim ColBP As Integer

Dim StrBO As String
Dim StrBP As String

StrBO = "BO"
StrBP = "BP"

ColBO = ActiveWorkbook.Range(StrBO & 1).Column 'instead of StrBO you could directly write ("BO" & 1)
ColBP = ActiveWorkbook.Range(StrBP & 1).Column 'Then you wouldnt need these two variables

Columns(ColBO).Insert Shift:=xlToRight
'Columns(ColBO).Select   ' Trying to avoid selection but not sure if this works here...
'Selection.Insert Shift:=xlToRight

Range(1, ColBO).FormulaR1C1 = "Feb weekly-wk 2"
Range(19, ColBO).FormulaR1C1 = "=VLOOKUP(Comparison!RC2,'Jan16 wk4'!R3C15:R34C24,9,FALSE)"
Range(19, ColBO).AutoFill Destination:=Range("BO19:BO47"), Type:=xlFillDefault

Columns(ColBP).Insert Shift:=xlToRight  'Same here as above
Range(2, ColBP).Style = "20% - Accent6"
Range(2, ColBP).FormulaR1C1 = "Diff"
Range(19, ColBP).FormulaR1C1 = "=RC[-2]-RC[-1]"

对于未来:如果可以,请尽量避免。选择/选择/。如果可能,请激活。代码几乎可以在没有这些命令的情况下运行,也无需激活单元。 ;)

答案 2 :(得分:0)

如果您想使用数字变量,您可以更改方法并使用Cells代替Range

'You can use the rows below to know the column number
Range("BO1").Activate
ActiveCell.Value = ActiveCell.Column 'This way you get the column number into the cell
ColNum = ActiveCell.Column 'This way you get the column number into the variable
'So now you know that BO column number is 67 and you can use
Cells(1, 67) = "OK"
'Or, using variables:
RowNum = 1
ColNum = 67
Cells(RowNum, ColNum) = "You Got It!"

这使您只需使用for ... next来循环列 如果你需要从BO循环到BR,你可以使用

For ColNum = 67 To 70
    Cells(1, ColNum) = "OK"
Next ColNum

希望它有所帮助。