2011-09-18 13 views
0

セルをダブルクリックすると、そのセルの下に新しい行がいくつかの数式で挿入されます。私にとって重要なことは、セルをもう一度ダブルクリックすると、以前に挿入された行の数式が正しいインデックスで更新されるということです。excel:行更新式を挿入する

たとえば、次のコードでは、A1をダブルクリックすると2行目に式= B2 + 1が挿入されます。再度ダブルクリックすると2行目に挿入されますが、2行目のシフターは3行目になります。 A3では= B3 + 1でなければなりません。

Option Explicit 

Const MYRANGE As String = "A:A" 

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) 
    'If Sh.Name <> "Sheet1" Then Exit Sub 
    If Target.Cells.Count > 1 Then Exit Sub 
    If Intersect(Target, Sh.Range(MYRANGE)) Is Nothing Then Exit Sub 
    Cancel = True 
    Target.Rows(2).Insert 
    Dim newRow As Range 
    Set newRow = Target.Rows(2) 
    Dim rowIndex As Long 
    rowIndex = newRow.row 
    newRow.Cells(1, 1).Formula = "=B" & rowIndex & "+1" 
End Sub 

UPDATE:Target.Offset(1).EntireRow.InsertTarget.Rows(2).Insertを変更しても問題が解決ここで

は、私がこれまで持っているコードです。オフセットと行との相違点についての質問を残しておきます(行(2)のEntireRowプロパティは存在しません)

+1

Offsetを使用すると良い解決策が見つかりました。 行(2)は既に行全体であるため、EntireRowプロパティを持たない。 オフセットが何であるかを知るには、Googleまたはヘルプを試してみてください。単純に、行と列によるセルのオフセットです。つまり、newRowを、ダブルクリックされたセルの下に1つのセルを挿入する行と同じに設定するとします。 –

答えて

0

このコードを同じ結果に対して4行減らすことができます。

あなたのコードはターゲット行のセルを更新しています。つまり、ターゲットの上にある列Aの外側のセル式は更新されません。これはおそらく問題ではないが、言及する価値がある。完全な更新が必要な場合は、常にターゲットではなくrow2に挿入します。

Option Explicit 

Const MYRANGE As String = "A:A" 

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) 
    If Target.Cells.Count > 1 Then Exit Sub 
    If Intersect(Target, Sh.Range(MYRANGE)) Is Nothing Then Exit Sub 
    Cancel = True 
    Target.Offset(1).EntireRow.Insert 
    Target.Offset(1).Formula = "=B" & Target.Row + 1 & "+1" 
End Sub 
関連する問題