EXCEL VBAマクロでセル中の式の値を更新する方法

このQ&Aのポイント
  • EXCELのVBAマクロを使用して、セル中の式の値だけを更新する方法について教えてください。
  • セルA1には{14}+(7.75*4)+(7.75*3)という計算式があります。別のシートで計算した週の実績時間が24だったとして、(7.75*4)の部分を実績時間の{24}に置き換えたいと思っています。
  • Range("A1").Formulaで式の取り出しはできましたが、置き換えの方法がわかりません。VBAマクロを使用して、このような操作を行う方法を教えてください。
回答を見る
  • ベストアンサー

EXCEL VBAマクロで質問です。セル中の式で値だけ更新したいのです

EXCEL VBAマクロで質問です。セル中の式で値だけ更新したいのですが、方法がわかりません。 セルA1に={14}+(7.75*4)+(7.75*3)の様に計算式が入っています。()内に記述された数値は週ごとの予想作業時間だとします。{}内に記述された数値は実績時間です。 別のシートで計算した週の実績時間が24だったとして、セルA1の式中の(7.75*4)の予想時間部分を実績時間の{24}に置き換えたいと思っています。セルA1に={14}+{24}+(7.75*3)の様に。。。。 とりあえずRange("A1").Formulaで式の取り出しができるところまではできました。 が置き換えの方法がわかりません。このような事をVBAマクロで行いたいのですが教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • hananoppo
  • ベストアンサー率46% (109/235)
回答No.4

添付画像のような表を作ってはどうでしょう。 C2~G2セルに週ごとの予想時間を入力し、H2セルに「=SUM(C2:G2)」と入力します。 C3~H3セルには次の数式を入力します。 C3 =C2 D3 =D2 E3 =E2 F3 =F2 G3 =G2 H3 =SUM(C3:G3) この後、C3~H3セルをC4~H7セルにコピーし、C3、D4、E5、F6、G7を空欄にします。 マクロで2週目の実績時間を入力するには次のようにします。 Range("D4").Value = 24

starpochi
質問者

お礼

マクロでは、置換できないようなので質問締め切ります。 ほかのツール(Perl)で行う様にしてみます。 回答ありがとうございました。

その他の回答 (3)

回答No.3

マクロを使用しなくてもエクセルの置換は数式も置換できるため メニューの編集→置換で 検索する文字列:(7.75*4) 置換後の文字列:{24} と設定すれば更新できるのではないでしょうか?

starpochi
質問者

補足

回答ありがとうございます。説明が足りなかったようです。人間の入力では間違うので、マクロでボタン押したら全て更新できるようなものを考えています。

  • chie65535
  • ベストアンサー率43% (8518/19364)
回答No.2

追記。   「別のシートで計算した週の実績時間」が「Sheet2」シートの「D9」セルに入っているなら Range("A1").Formula = "=14+Sheet2!D9+(7.75*3)" でオッケー。

starpochi
質問者

補足

意図した回答には近いのですが、 これですと他のシートとリンクされています。元ファイルは無くなるという前提とA1セルに数値の合計式で残しておきたいという前提で考えています。少し詳細な仕様は以下の様になっています。 以下(1)~(4)をマクロボタン操作で自動に行いたいと思っています。(3)が不明です。 (1)別のXlsシートを開いて、合計時間算出と取り込み (2)集計シートのセルA1の式取り込み。14+(7.75*4)+(7.75*3) (3)集計シート内のセルA1の該当の週(最初の()内)を(1)で取り込んだ時刻に置換する。  2週目、3週目では以下の様になります。  2週間目:=14+(7.75*4)+(7.75*3) ⇒ =14+[24]+(7.75*3)             ^^^^^  3週間目:=14+[24]+(7.75*3)   ⇒ =14+[24]+[15]                ^^^^^  A1の式はそのまま数値の合計として残しておきたいので  "=14+Sheet2!D9+(7.75*3)"の様な記述ではなく。 "=14+[24]+(7.75*3)"の様に実績と予定の時間で残しておきたい。  又、次の週の集計時は同じように"=14+[24]+[15]"の様に更新を行いたいです。 (4)集計シートを保存。 以上 よろしくお願い致します。

  • chie65535
  • ベストアンサー率43% (8518/19364)
回答No.1

Range("A1").Formula = "=14+24+(7.75*3)" でオッケー。

関連するQ&A

  • エクセルのセルに記述した式をVBAで読込む方法

    エクセルのセルに  a*x^2+b*x+c という式を埋め込んでおいて  (式はa,b,cの数値は定数、xはマクロ側でいろいろな数値を指定されます。) VBAのマクロに  ε=a*x^2+b*x+c のように式を埋め込む方法はないでしょうか。 例えば  n=....  x=sin(n*3.14/180) ε=a*x^2+b*x+c  Range(”D2”).value=ε   この中段の行にエクセルのセルの式を呼び出したいのです。 この式はセルにはいろいろな2次式、3次式が任意に組み込まれ、VBAを実行するたびに埋め込まれた式に自動的に記述し直すようにしたいのです。 (数式の結果の数値を入れるのではなくて式を入れたいのです) 可能でしょうか。その場合どのようなコードが考えられるでしょうか。 よろしくお願いします。

  • excel VBAについて質問します

    excel VBAについて質問します A列のセルには単なる数値や「44+30」のようなデータが入っているものがある。 ' + の記号があったら、セルの先頭に = を追加して計算させて答えを表示しなさい。 'マクロ実行後、A列には、数値だけが表示されることとする。 マクロ実行前   ⇒  マクロ実行後 22   --------------- 22 44+30 --------------- 77 35 -------------------- 35 22+11 --------------- 33 こういった感じにしたいんですがなかなか上手く行きません。

  • EXCELマクロでの formula の使用に関して

    マクロ内で、 Range(c1).formula = "=A1+B1" と記述すれば セルC1に「=A1+B1」という式が入ります。 これはいいのですが・・・・ セルC1に 「=CONCATENATE(A1,"~",B1)」 というような「"」を使った数式を入れる場合、 どうにように formula文を作成すればいいのでしょうか? Range(C1).formula = "=CONCATENATE(A1,"~",B1)" ではダメです。 「"」の前に何か記号でもつけるのでしょうか?

  • 値によって違うマクロの実行

    表題の質問をさせていただきます。よろしくお願いいたします。 A1セルには、別シートで計算された値が転記されるようになっており、1から45までのいずれかの数値が入っています。 その数値によって異なる動きをするマクロが3個あります。  1から15の時はマクロA  16から30の時はマクロB  31から45の時はマクロC おのおののマクロはフォームのボタンから実行できるように登録してあります。 現在はA1セルの数値を見て該当するボタンを押してマクロを実行しています。 たとえばA1の値が「25」の時はマクロCが登録してあるボタンCを押しています。 そこで質問させていただきたいのは 既存のボタンを撤廃し 新たに設置するひとつのボタンで3個のマクロを制御したいと思ったのです。 新たなマクロでA1の値を取得し、そのマクロ内で既存のマクロへ割り振るためには どのような記述をすればよいのでしょうか。 よろしくお願いいたします。

  • エクセル2000:決まったセルに数値が入力されたらマクロを起動させたい

    エクセル2000:決まったセルに数値が入力されたらマクロを起動させたい。 たとえばセルA1に、1以上の数値が入力されたときに、セルA2に今日の日付を入力させる マクロの記述はどうすれば宜しいでしょうか? 以下の記述で、セルA2に日付は入力させられるのですが、 セルA1に1以上の数値が入力された場合に起動させる方法が分かりません。 Range("A2").Select SendKeys "^(;){ENTER}" ご教授の程、宜しくお願い申し上げます。

  • VBAのマクロをシート内の式で使いたい

    VBAで、マクロの関数をエクセルの式で使うことは可能でしょうか? 引数や戻り値の制約も知りたいです。 引数はExcel側ではセル値B1とかになりますが、VBA側では何か対策でもあるのでしょうか? 'VBA public function test(byval a as integer, byval b as integer) as integer test = a + b end function 'エクセル側 C1セルに以下の式 =test(A1, B1)

  • Excel 2007 VBA にて式の入力方法不明

    VBAで式の入力方法がわかりません、教えていただけませんか? 当方初心者です。よろしくお願い致します。 別の、組合せSheetの U7 セルに 半角で 2012 と数字が入力してあります。 この数字を、 平成23年度 と表示が出来るようにしたいのです。 別のSheetの A1 セルに 下記の 数式をマクロで入力したいのですがうまくできません。 =" 平成"&JIS(組合せ!U7-1989)&"年度" マクロでは、 Range("A1").Formula = "=" 平成"&JIS(組合せ!U7-1989)&"年度"  と入力するのですが、うまく受け付けてくれません。

  • セルに一般式が入っているかチェックするマクロ

    こんにちは 数か少なければ目視で確認できます。 しかし、チェックするセルが数十万数百万と膨大なため、目視では時間も掛かり見落としもありえます。 そこで、マクロ(VBA)でチェックしようと思います。 セルに一般式が入っているかどうか調べるにはどうしたらよいでしょうか? Excelは2003です。

  • Excelのマクロでセルの値をコピーしたいのですが

     他の方も質問されているのかもしれませんが、見つけられなかったので教えてください。 Excelのセルに A1001~A2000まで数値が入っているとします それをA1~E1までにA1001~A1005までの数値を A2~E2までにA1006~A1010までの数値をコピー(参照)し、これを繰り返してA2000の数値まで対応したいのですが、マクロでコピーを組むにはどうしたらよいのでしょうか? ちなみに、OSはWin2000 ExcelはExcel2000です。  全く初歩的な質問ですみません。

  • エクセルのマクロでセルに数式を入れる場合で絶対参照の中に【""】を使いたい。

    エクセルのマクロで、セルに数式を入れようとしてます。 数値を入れる場合はValue、数式を入れる場合はFormulaになると思うのですが、以下のように Range("A1").Formula = "=IF(A2=1,1,0)" とすれば問題ないのですが、 Range("A1").Formula = "=IF(A2=1,"○","×")" とした場合は、○の前のダブルクォーテーションを認識してしまうのか、実行エラーが出てしまいます。 こういう時は、どうすればうまく行きますか?

専門家に質問してみよう