

VBAでセルを足し算するんじゃなくって、  
式を埋め込みたいときに思いついた方法が文字列でゴリ押しする方法でした。  
一応成功しましたが。これだとさすがに冗長すぎると思いました。

前にも似たような質問をしたのですが、VBAでrubyのように式展開させる方法はないのでしょうか？

[code]

    sub cells_sum
      for i = 1 to sheets.count
        for j = 4 to 34
          sheets(i).cells(j, 5) = "=sum(b"+cstr(j)+":c"+cstr(j)+")" 
      next j: next i
    end sub
    
[/code]

format()で実現できそうな気配ですが、なかなか情報にたどりつきません。  

[code]

    sub fo
    dim s as string
    dim array(100) as integer
    for i = 0 to 100
      array(i) = i + 1
    next i
    for each a in array
      a = cstr(a)
      range("a1") = format(a,"=sum(a@:b@)")
    next a
    end sub 'NG
    
[/code]


CC BY-SA 3.0
2018-01-02T04:53:25.423
40663
2018-11-29T09:41:26.210
2018-01-02T07:52:54.930
26076
26076
question
vba
VBAでセルに式を埋め込むときに良い式展開の方法はないでしょうか


### 他の策（コピーしたものを貼り付ける）

[code]

    sub copy_calc
      range("c1").copy
      for i = 2 to 5
      sheets(1).paste destination:=cells(i, 3)
      next i
    end sub
    
[/code]

### formula

formulaという構文で数式を一括入力できるようです。こちらは試していません。


CC BY-SA 3.0
2018-01-02T07:51:52.533
40666
2018-01-02T07:51:52.533
26076
40663
answer


VBAの標準機能ではないですね。

いげ太さんという方が公開している Ariawase というライブラリを使えば、それっぽいことができます。

ライブラリの置き場所  
<https://github.com/vbaidiot/Ariawase>

解説  
<http://igeta-diary.blogspot.com/2014/03/>

Core.bas に入っている Formats 関数を使います。

[code]

    Sheets(i).Cells(j, 5).Formula = Formats("=SUM(B{0}:C{0})", j)
    
[/code]

こんな感じで書けます。


CC BY-SA 4.0
2018-11-29T09:08:07.750
50754
2018-11-29T09:08:07.750
31109
40663
answer


セル`E4`に数式`=SUM(B4:C4)`を埋め込みたいということでしょうか？
この数式はExcelで広く使われているA1形式での表現形式となっていますが、この他にR1C1形式があり、こちらを使うと`=SUM(RC[-3]:RC[-2])`と相対アドレスが簡単に表現できるようになります。その結果、数式が固定文字列になるため

[code]

    sub cells_sum
      for i = 1 to sheets.count
        for j = 4 to 34
          sheets(i).cells(j, 5).FormulaR1C1 = "=SUM(RC[-3]:RC[-2])" 
      next j: next i
    end sub
    
[/code]

で済みます。さらに言えば範囲指定で一気に代入できます。

[code]

    sub cells_sum
      for i = 1 to sheets.count
        sheets(i).range("E4:E34").FormulaR1C1 = "=SUM(RC[-3]:RC[-2])" 
      next i
    end sub
    
[/code]

より複雑な数式を扱う場合、[`ADDRESS`標準関数](https://support.office.com/ja-
jp/article/address-%E9%96%A2%E6%95%B0-d0c26c0d-3991-446b-8de4-ab46431d4f89)を使用することでセルを表す文字列を生成できます。この文字列を使用すれば柔軟に数式を組み立てることができます。


CC BY-SA 4.0
2018-11-29T09:41:26.210
50757
2018-11-29T09:41:26.210
4236
40663
answer