いま以下のマクロで値のみをセルに入力していますが、

VBAでセルに数式を入力したいのですが、ネットで
検索しても良く判りませんでした。
あまり時間がなく、教えて頂けるとうれしいです。


Sub Sample()
L = 0
For i = 1 To 9
A = "処理" & i
Cells.Find(what:=A).Select
B = Cells.Find(what:=A).Offset(-6).Value - Cells.Find(what:=A).Offset(-7).Value - 1
C = ActiveCell.Column
D = Cells.Find(what:=A).Offset(-7).Value
E = Cells.Find(what:=A).Offset(-6).Value

L = (Cells(E, C).Value - Cells(D, C).Value) / (E - D)
For M = 1 To E - D - 1
Cells(D + M, C).Value = Cells(D, C).Value + (L * M)
Next M: L = 0
End Sub

例) セルA110に "処理1"の値があり
「処理1」より7つ上の数値が "10" (セルA103)
「処理2」より6つ上の数値が "15" (セルA104)の場合
さらにセル A10 の数値が "100"
      A15 の数値が "105" の時に
マクロを実行すると
A11=101
A12=102
A13=103
A14=104 の値が入力されますが、
以下の感じで数式を自動入力できないでしょうか?
LとMは直接数値で今回の例題の場合

A11=A100+(L*M)  '''L=1:M=1
A12=A100+(L*M) '''L=1:M=2
A13=A100+(L*M) '''L=1:M=3
A14=A100+(L*M) '''L=1:M=4

よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:2009/09/28 21:55:50
  • 終了:2009/10/05 22:00:02

ベストアンサー

id:SALINGER No.1

SALINGER回答回数3454ベストアンサー獲得回数9692009/09/28 23:22:07

ポイント35pt

ここのところを

Cells(D + M, C).Value = Cells(D, C).Value + (L * M)

Cells(D + M, C).FormulaR1C1 = "=R" & D & "C" & C & "+" & L * M

のようにFormulaR1C1を使えば、数式が入ります。


求めてる回答ではない場合はご指摘ください。

http://www.moug.net/tech/exvba/0050098.htm

その他の回答(2件)

id:SALINGER No.1

SALINGER回答回数3454ベストアンサー獲得回数9692009/09/28 23:22:07ここでベストアンサー

ポイント35pt

ここのところを

Cells(D + M, C).Value = Cells(D, C).Value + (L * M)

Cells(D + M, C).FormulaR1C1 = "=R" & D & "C" & C & "+" & L * M

のようにFormulaR1C1を使えば、数式が入ります。


求めてる回答ではない場合はご指摘ください。

http://www.moug.net/tech/exvba/0050098.htm

id:Mook No.2

Mook回答回数1312ベストアンサー獲得回数3912009/09/28 23:46:51

ポイント35pt

変数が分かりずらかったので、名前を変えました。


ちょっと見た感じが分かりずらくなったかもしれませんが、計算そのものは変えていません。

Sub Sample()
    Dim findWord As String '// A
    Dim baseRange As Range
    
    Dim L As Double
    
    Dim startRow As Long
    Dim endRow As Long
    
    Dim i As Long
    Dim r As Long
    For i = 1 To 9
        findWord = "処理" & i
        Set baseRange = Cells.Find(what:=findWord)
        If Not baseRange Is Nothing Then
            With baseRange
                startRow = .Offset(-7).Value
                endRow = .Offset(-6).Value
                L = CDbl(Cells(endRow, .Column).Value - Cells(startRow, .Column).Value) / (endRow - startRow)
                
                For r = startRow + 1 To endRow - 1
                    Cells(r, .Column).FormulaR1C1 = "=R" & startRow & "C+(" & L & "*" & r - startRow & ")"   '// r - startRow = M
                Next
            End With
        End If
    Next
End Sub

質問者が未読の回答一覧

 回答者回答受取ベストアンサー回答時間
1 maruyama2 4 3 1 2009-09-29 00:05:12

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません