• 締切済み

関数をVBAで簡素化する

よろしくお願いします シート枚数22枚 各シート セルG11からG71まで 各シートの各行にこの関数を入力するのは労を要します。 また、VBAに下のように1ツづつ入力するのも同じです。 Range("G11").Value="=IF(E11+F11=0,0,G10+E11-F11)"          ↓ Range("G71").Value="=IF(E71+F71=0,0,G70+E71-F71)" VBAで簡素化ができないでしょうか

みんなの回答

回答No.4

Sub test() For i = 11 To 71 Range("G" & i).Value = "=IF(E" & i & "+F" & i & "=0,0,G" & i - 1 & "+E" & i & "-F" & i & ")" Next End Sub このマクロを各シートで実行すればできると思います 22枚のシート以外にシートが存在しない又は最初(一番左)のシートから22枚横のシートまで処理したいのなら、 Sub test() For s = 1 To 22 Sheets(s).Select For i = 11 To 71 Range("G" & i).Value = "=IF(E" & i & "+F" & i & "=0,0,G" & i - 1 & "+E" & i & "-F" & i & ")" Next Next End Sub このマクロ実行で大丈夫かと

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

読者、回答者のことを考えて、こんなのシート数3,4枚で セルもA1近くの例に直して質問を書くこと。 ーーー VBAでやるとすれば、 A.全シートの名前を捉えて指定する BシートのIndexというもので指定する。 などすればよい。 データを入れる前や、他のデータも同じなら、コピー的な作り方でよければ、シートのコピーも有る。 ーーー 普通VBAでは関数式を入れて計算するより、セルの値を使って、プログラムで計算処理など刷るのが普通で、質問の発想は珍奇だと思うが。 ーー 各シートのC3に=A3+B3と入れて、C4:C10にその式を複写するVBA。 標準モジュールに Sub test01() Dim sh As Worksheet For Each sh In Worksheets MsgBox sh.Name sh.Activate sh.Range("C3").Select Selection.Formula = "=A3+B3" Selection.AutoFill Destination:=Range("C3:C10"), Type:=xlFillDefault Next End Sub 式を複写する操作の、マクロの記録を参考にすればよい。 ーー 22シートが間に有るなら、22枚のシートのシートタグを左の(一団の)位置に鞘寄せして 1-3シートの例だが、各シートを捉えるのは、(シートIndex番号を使うやり方だが) Sub test02() For i = 1 To 3 MsgBox Sheets(i).Name Next i End Sub を参考に、上記Test01を修正する。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

G11~G71まで同じ値ということでいいのですよね? 手作業でもそれほどの手間ではありません。 (1)22枚のシートをShift+クリックで全部選択状態にします。   (以後の作業が全部のシートに反映されます) (2)G11セルに =IF(E11+F11=0,0,G10+E11-F11) を入力 (3)G12セルに =$G$11 を入力し、そのままG71までフィルコピー 以上で、お望みの内容になると思いますが… 質問文を間違って解釈していたら失礼。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

Range("G11:G71").Value = "=IF(E11+F11=0,0,G10+E11-F11)"

1211M
質問者

お礼

早速の回答ありがとうございました 解決しました

関連するQ&A