2017-04-12 6 views
0

私は以下のコードを書いています。レンジ( "AF9:AF50")&範囲(AK9:BI50 ")の範囲を停滞させる代わりに、9行目から始まるコードを実行するダイナミックレンジを実装しようとしています。列。私は、ダイナミックレンジを設定する方法について読んでてきたが、私はそれを動作させることはできません。何かアドバイス/支援が大幅に高く評価される。VBAでダイナミックレンジを設定する

Private Sub Worksheet_Change(ByVal target As Range) 

Dim cell As Range 
Dim controlRng As Range, nRng As Range 

Set cell = Range("AK9:BI50") 
Set controlRng = Range("AF9:AF50") 
Set nRng = Intersect(controlRng, target) 

Application.EnableEvents = False 

If Not nRng Is Nothing Then 
    Select Case target.Value 
     Case "No Promotion" 
      target.Offset(, 1).Value = Range("M" & target.Row).Value 
      target.Offset(, 4).Value = Range("P" & target.Row).Value 
      target.Offset(, 9).Value = "" 
     Case "Promotion" 
      target.Offset(, 1).Value = "" 
      target.Offset(, 4).Value = "" 
      target.Offset(, 9).Value = 0.07 
     Case "Demotion", "Partner", "" 
      target.Offset(, 1).Value = "" 
      target.Offset(, 4).Value = "" 
      target.Offset(, 9).Value = "" 
    End Select 
End If 

If Not Application.Intersect(cell, target) Is Nothing Then 
    Select Case target.Column 
     Case 37, 39, 43 
      target.Offset(, 1).Value = target.Value/Range("V" & target.Row).Value 
     Case 38, 40, 44 
      target.Offset(, -1).Value = WorksheetFunction.RoundUp((target.Value * Range("V" & target.Row).Value), -2) 
     Case 41, 60 
      target.Offset(, 1).Value = WorksheetFunction.RoundUp((target.Value * Range("V" & target.Row).Value), -2) 
     Case 42, 61 
      target.Offset(, -1).Value = target.Value/Range("V" & target.Row).Value 
    End Select 
End If 

Application.EnableEvents = True 

End Sub 

答えて

0

私はあなたの問題は、文字の側面を扱っていると仮定しています範囲などあなたが探しされる構文がある場合は?それを動的にしようとしている。

Set MyRange = MySheet.Range(MySheet.Cells(TopRow, LeftCol), MySheet.Cells(LastRow, RightCol)) 

だから、たとえば、次の2つの範囲が同等になりますが、最初はすることができ動的に生成される。

TopRow = 1 
LeftCol = 2 
LastRow = 100 
RightCol = 3 
Set MyRange = MySheet.Range(MySheet.Cells(TopRow, LeftCol), MySheet.Cells(LastRow, RightCol)) 

Set MyOtherRange = mysheet.range("B1:C100") 

は、列の最後の行は、他の状況他でより良いいくつかの仕事を見つけるためにはいくつかの方法があります。

https://www.thespreadsheetguru.com/blog/2014/7/7/5-different-ways-to-find-the-last-row-or-last-column-using-vbaが、私は通常、この

LastRow = sht.Cells(sht.Rows.Count, ColumnNumber).End(xlUp).Row 
+0

こんにちはジャレドを使用ここを見て。私が抱えている問題は、データのラインが変わる可能性があるということです。基本的には、コードを構成して最後の行を特定し、要求されたアクションを最後のデータ行に適用する必要があります。 – Kelsie

関連する問題