2016-07-31 31 views
0

私はいくつかの初期値を設定するために次のコードブロックを使用します。私はこの建築をたくさん使って自分自身を見つけました。もっと簡潔なものがあるのだろうか?Excelで複数回セルを参照する短い方法VBA

Sheets(AppTab).Select 
Cells(StartingRow, Range("AppTransEffDate").Column).Value = FirstPymtDueDate 
Cells(StartingRow, Range("AppTransAmt").Column).Value = RegularPymt 
Cells(StartingRow, Range("AppActionCode").Column).Value = SchPymtDueActionCode 
Cells(StartingRow, Range("AppDescr").Column).Value = TransDescr 

重要な場合は、これらの各範囲は1列幅です。

答えて

4

列番号を参照するために列挙を使用します。列挙はコードモジュールの最上位にあります。リスト内の次の列挙は、前の列から1だけ増分したものです。列を列挙する大きな利点は、列の順序を変更する必要がある場合です。列挙を更新するだけで、コードは以前と同じように実行されます。列挙はインテリセンスでも機能します。

enter image description here

Option Explicit 

Public Enum Cols 
    cnAppTransEffDate = 2 
    cnAppTransAmt = 4 
    cnAppActionCode = 5 
    cnAppDescr 
End Enum 


Sub FillData() 

    ' Some Code 

    With Worksheets(AppTab) 
     .Cells(StartingRow, cnAppTransEffDate).Value = FirstPymtDueDate 
     .Cells(StartingRow, cnAppTransAmt).Value = RegularPymt 
     .Cells(StartingRow, cnAppActionCode).Value = SchPymtDueActionCode 
     .Cells(StartingRow, cnAppDescr).Value = TransDescr 
    End With 
End Sub 
+0

このメソッドを使用し始めても、コードは機能しますが、Intellisenseでは列挙は表示されません(ただし別途動作します)。私はそれをピックアップ列挙にするために何か必要がありますか?私は入力した後に表示する必要があります:StartingRow、cn [intellisense here]? – WebUserLearner

+1

はい 'cn'とタイプし、[ctrl] + [スペースバー]を押し続けます。 –

3

With ... End Withステートメントを1つ以上使用してください。

with Sheets(AppTab) 
    .Cells(StartingRow, .Range("AppTransEffDate").Column) = FirstPymtDueDate 
    .Cells(StartingRow, .Range("AppTransAmt").Column) = RegularPymt 
    .Cells(StartingRow, .Range("AppActionCode").Column) = SchPymtDueActionCode 
    .Cells(StartingRow, .Range("AppDescr").Column) = TransDescr 
end with 
'alternate 
with Sheets(AppTab) 
    with .rows(StartingRow) 
     .Cells(1, .Range("AppTransEffDate").Column) = FirstPymtDueDate 
     .Cells(1, .Range("AppTransAmt").Column) = RegularPymt 
     .Cells(1, .Range("AppActionCode").Column) = SchPymtDueActionCode 
     .Cells(1, .Range("AppDescr").Column) = TransDescr 
    end with 
end with 

私は....端とを有する第二は、この場合の第1限り改善を示していますが参照している細胞を単離することは、より効率的で、親子関係を突き止めるために繰り返し呼び出しを回避します。とは思いません

親ワークシートを明示的に参照することは「ベストプラクティス」と広くみなされ、.Selectと.Activateの併用は避けてください。

+0

はにどのような方法があります.Cells(StartingRow、.Range( "AppTransEffDate")。Column)= FirstPymtDueDate (私は変数が変わるため、変数としてStartingRowを保持する必要があります) – WebUserLearner

+0

AppTransEffDate、AppTransAmt、AppActionCode、およびAppDescrが参照する場所や場所はわかりません。いいえ、何も示唆することはできません。 – Jeeped

+0

これらは範囲です。それぞれは、基本的にはF、Hなどの長さです。 – WebUserLearner

0

私の通常の方法は、行の範囲の最初のセルを設定し、その後、Range._Default財産

Set r = Sheets(AppTab).Range("A" & StartingRow) 
r(, Range("AppTransEffDate").Column) = FirstPymtDueDate 

を使用することですが、代わりに名前付き範囲で、私は次のようにEnum使用しますトーマス・インジナの答えです

あなたの名前付き範囲が、これは

Range("AppTransEffDate")(StartingRow) = FirstPymtDueDate 

または

Set areas = Sheets(AppTab).Range("AppTransEffDate,AppTransAmt,AppActionCode,AppDescr").Areas 

areas(1)(StartingRow) = FirstPymtDueDate 
areas(2)(StartingRow) = RegularPymt 
areas(3)(StartingRow) = SchPymtDueActionCode 
areas(4)(StartingRow) = TransDescr 

または多分交差があまりにもうまくいくかもしれない仕事かもしれませんが、1行目から開始した場合:

Set areas = Sheets(AppTab).Range("(AppTransEffDate,AppTransAmt,AppActionCode,AppDescr) " & StartingRow & ":" & StartingRow).Areas 

areas(1) = FirstPymtDueDate 
areas(2) = RegularPymt 
areas(3) = SchPymtDueActionCode 
areas(4) = TransDescr 
関連する問題