2017-07-13 6 views
0

ユーザーがExcelブックにテキストファイルをインポートするExcelブックがあります。そこから計算が自動的に完了するようにします。私は最初から現在のデータを減算する計算に取り組んでいます。青い輪郭のボックスが現在のデータである画像を参照してください(現在のデータの量は動的ですが、ユーザーがインポートするテキストファイルの数によって異なります)。だから私は赤の列から青の列を引いたがっています。 enter image description here範囲として定義された2つの列を減算するVBA

そして計算の値を "Calculations1"という別のシートに印刷したいのですが、今のところ、値がどこにある列でコードを実行して#NAMEを印刷するのでしょうか?下の画像のようになります。ここで enter image description here

私のコード

Sub Calculations1() 

Dim LastCol As Integer 
Dim LastRow As Integer 
Dim i As Integer 
Dim A As Integer 
Dim B As Integer 
Dim hiddenws As Worksheet 
Dim calcws As Worksheet 
Dim iRng As Range 
Dim cel As Range 
Dim Rng1 As Range 
Dim Rng2 As Range 
Dim Rng3 As Range 
Dim Rng4 As Range 
Dim Rng5 As Range 
Dim Rng6 As Range 
Dim NewRng1 As Range 
Dim NewRng2 As Range 

A = Worksheets("Information Sheet").Range("E12").Value 
B = Worksheets("Hidden").Range("B2").Value 

Set calcws = Worksheets("Calculations1") 
Set hiddenws = Worksheets("Hidden 2") 
Set iRng = hiddenws.Range(hiddenws.Cells(1, 1), hiddenws.Cells(1, hiddenws.Cells(1, Columns.Count).End(xlToLeft).Column)) 

For i = 1 To B 
If i <> B Then 
    For Each cel In iRng 
     If cel.Value = "A0_ " & i Then 
     With hiddenws 
      Set Rng1 = cel.EntireColumn.Find(What:="", LookIn:=xlValues, lookat:=xlPart) 
      Debug.Print Rng1.FormulaR1C1 
      Set Rng2 = hiddenws.Cells(Rng1.Row - 1, Rng1.Column) 
      Debug.Print Rng2.FormulaR1C1 
      Set Rng3 = Cells(cel.Row + 1, cel.Column) 
      Debug.Print Rng3.FormulaR1C1 
     End With 
     End If 

     If cel.Value = "A0_ " & A Then 
     With hiddenws 
      Set Rng4 = cel.EntireColumn.Find(What:="", LookIn:=xlValues, lookat:=xlPart) 
      Debug.Print Rng4.FormulaR1C1 
      Set Rng5 = hiddenws.Cells(Rng4.Row - 1, Rng4.Column) 
      Debug.Print Rng5.FormulaR1C1 
      Set Rng6 = Cells(cel.Row + 1, cel.Column) 
      Debug.Print Rng6.FormulaR1C1 
     End With 
     End If 
    Next cel 

    With hiddenws 
    Set NewRng1 = .Range(Rng3.Address & ":" & Rng2.Address) 
    Debug.Print NewRng1.Address 
    Set NewRng2 = .Range(Rng6.Address & ":" & Rng5.Address) 
    Debug.Print NewRng2.Address 
    End With 

    With calcws 
    Sheets("Calculations1").Activate 
    LastCol = Cells(1, Columns.Count).End(xlToLeft).Column 
    If LastCol > 1 Then 
    LastCol = LastCol + 1 
    End If 
    LastRow = Cells(Rows.Count, 1).End(xlUp).Row 
    Cells(1, LastCol) = "Incre_Disp_A_" & i 
    Cells(1, LastCol + 1) = "Cumul_Disp_A_" & i 
    End With 

    With calcws 
    Set Rng7 = Cells(2, LastCol) 
    Debug.Print Rng7.Address 
    Set Rng8 = Cells(LastRow, LastCol) 
    Debug.Print Rng8.Address 
    Set NewRng3 = .Range(Rng7.Address & ":" & Rng8.Address) 
    Debug.Print NewRng3.Address 
    NewRng3.Formula = "=NewRng1 - NewRng2" 
    End With 

End If 
Next i 
End Sub 

はCalculations1用紙に印刷する実際の値を取得する方法の任意のアイデアですか?すべてのヒント/助けをいただければ幸いです。前もって感謝します!

+0

する必要があり、それは読み、コードがはるかに容易になります。 – wizlog

答えて

2
NewRng3.Formula = "=NewRng1 - NewRng2" 

はあなたのループをインデントしてください

NewRng3.Formula = "=" & NewRng1.Address() & "-" & NewRng2.Address() 
関連する問題