2017-02-09 8 views
1

私はコピーの列のn &ボタンを持っている私とn + 3 &に貼りI + 3が、列の後のn &私は3 + iの& 3 + nに変更する必要があります。私はコードの末尾にn = n + 3 i = i + 3を追加することでそれを試みたが、それは動作していない。変更変数番号恒久VBA

Sub Macro1() 

Dim n As Integer 
Dim i As Integer 

n = 22 
i = 24 
Range(Columns(n), Columns(i)).Copy 
Range(Columns(n + 3), Columns(i + 3)).PasteSpecial xlPasteAllMergingConditionalFormats 

Columns(n + 3).ClearContents 


n = n + 3 
i = i + 3 

End Sub 
+3

サブが終了するとスコープを失います。モジュールレベルの変数に入れたり、他の種類の永続性(隠しワークシートなど)を使用する必要があります。 – Comintern

+0

Docs.SOの[変数とスコープ](http://stackoverflow.com/documentation/vba/877/declaring-variables/2957/variables#t=201702091912202961978)を参照してください。 –

+0

ありがとうございました。別のワークシートに22と24の数字を置き、+3を追加することでそれを行うことができました。 – Serveira

答えて

2

別のオプションを試すことができますがStaticとして変数を宣言することです:

Sub Macro1() 
    Static n As Integer 
    Static i As Integer 

    If n = 0 Then n = 22 
    If i = 0 Then i = 24 

    Range(Columns(n), Columns(i)).Copy 
    Range(Columns(n + 3), Columns(i + 3)).PasteSpecial xlPasteAllMergingConditionalFormats 

    n = n + 3 
    i = i + 3 
End Sub 

注意あなたがこれを行うならば、あなたは "を追加する必要がありますことをマクロが最初に実行されるときに「初期化コード」が返されます。

1

変数をセルに割り当てます。たとえば、nの値をセルA1、iの値をセルB1に設定します。

Sub Macro1() 

Dim n As Integer 
Dim i As Integer 

n = Worksheets("Sheet1").Range("A1").Value 
i = Worksheets("Sheet1").Range("B1").Value 
Range(Columns(n), Columns(i)).Copy 
Range(Columns(n + 3), Columns(i + 3)).PasteSpecial xlPasteAllMergingConditionalFormats 

Columns(n + 3).ClearContents 


n = n + 3 
i = i + 3 

Worksheets("Sheet1").Range("A1").Value = n 
Worksheets("Sheet1").Range("B1").Value = i 

End Sub 
1

あなたはこの

Sub Macro1() 
    Dim n As Integer 
    Dim i As Integer 

    With ActiveSheet.UsedRange 
     n = WorksheetFunction.Min(.Columns(.Columns.Count).Column - 2, 22) 
    End With 
    i = n + 2 
    Range(Columns(n), Columns(i)).Copy 
    Range(Columns(n + 3), Columns(i + 3)).PasteSpecial xlPasteAllMergingConditionalFormats 

    Columns(n + 3).ClearContents 
End Sub