2017-11-23 9 views
0

私は銀行の財務モデルを開発しており、Excel VBAで解決できない以下の問題を抱えています。Excel VBAダイナミックレンジ/ループ問題

私は本質的に2つのことを行うシンプルなマクロを構築しました。(i)指定された範囲内の内容をクリアします。(ii)同じ範囲に数式を設定します。非常に簡略ようにして、次のようになります。L10を:

Sub AutoCalculateCashFlows() 
    Range(D208:L208).ClearContents 
    Range("L208").FormulaR1C1 = "=+R[-34]C-R[-34]C[-1]" 
    Range("L208").AutoFill Destination:=Range("E208:L208"), Type:=xlFillDefault 
End Sub 

私の問題は、人口オートであるべき範囲は、ユーザがE10の範囲内で記入しなかったどのように多くの細胞に依存しているということです。ユーザーはこの範囲を右から左に入力し始めますが、列Lから左にどのくらい離れているかはわかりません。マクロに自動入力される式には少なくとも2つのデータが必要です。少なくともL10とK10に値を設定する必要があります。後者の場合は、J10:L10が満たされてからマクロがL208:K208の範囲を自動入力する必要がある場合は、L208に式を自動的に取り込む必要があります完全なD10:L10の範囲が記入された場合、E208:L208に式を入力する必要があります。

私はこの問題を2つのルートで解決しようと考えていました。(1)ダイナミックレンジの問題として近づいています。その場合、ユーザーがD10の範囲内にある最後のセルを前に決定するために、 "宛先:=範囲(" E208:L 208 ")でそのセルの列コードを使用するか、または(ii)範囲E208:L208に式を挿入するループを実行して前の列のセルまでD10:L10の範囲内でユーザーが入力し、ユーザーが入力しない場合は停止します。

これは意味があり、助けを前もって感謝します。

答えて

1

VBAでダイナミックレンジが必要な場合は、単純に構築する必要があります。これは、最初のワークシートの行1の最後の使用される列に基づいて、動的である

Sub TestMe() 

    Dim colRange As Long 
    Dim rowRange As Long 
    Dim rngMain  As Range 

    rowRange = 10 

    With Worksheets(1) 
     colRange = .Cells(1, .Columns.Count).End(xlToLeft).Column 
     Set rngMain = .Range(.Cells(rowRange, colRange), .Cells(100, 200)) 
     MsgBox rngMain.Address 
    End With 

End Sub 

:これはおそらく最も簡単な方法です。行1における第二使用される列に関する

、これらの3の1は、おそらく正確にあなたが望む何をすべきかに応じて、あなたのためにそれを行うだろう:

.Cells(1, 1).End(xlToRight).End(xlToRight).Column 
.Cells(1, 1).End(xlToRight).Column 
.Cells(1, 1).End(xlToRight).Column + 1 
+0

感謝を。私はこれが正しい方向に向いていると思いますが、上記の解決策の観点からは、第1列の2番目の使用列からL1までの範囲が必要です。あなたのコードを修正する方法を私に教えてください。 –

+0

@TonyFiante - 編集を参照してください。 – Vityata

+0

3人目が私のトリックでした。ありがとう、Vityala。その後の自動入力コマンドでrngMainをどのように参照するのですか? ( "rngMain")、タイプ:= xlFillDefault –

関連する問題