• ベストアンサー

設定済みの数式、関数をVBAに

エクセルで各セルに、設定済みの数式や関数をVBAに移行記録することは出来ますか?

  • whymm
  • お礼率33% (3/9)

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

  • ベストアンサー
  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.1

たとえばB10に=SUM(B1:B9) という数式があったとして マクロの記録→B10を選択→F2キーを押す→ENTERキーを押す→記録終了で Sub Macro1() ' ' Macro1 Macro ' ' Range("B10").Select ActiveCell.FormulaR1C1 = "=SUM(R[-9]C[-1]:R[-1]C[-1])" Range("B11").Select End Sub となります。余分な部分{Range("B10").Select}と{Range("B11").Select}を削除すれば、 Macro1を実行すれば、上の9行のセルの合計を出す計算式がセットされます。 ※参照するセル座標が絶対参照や相対参照の組合わせで出来ないほど複雑な場合はあきらめてください。 引数を受け渡しにするなら、ユーザー定義関数にすれば可能です。 ■理屈抜きで、ユーザー定義関数を作ろう http://kokodane.com/tec3_3.htm

whymm
質問者

お礼

早々に有り難うございました。複雑なものはマクロに記録などの手順を踏むべきなのですね。 助かりました。余分な作業をしなくて済みそうです。imogasiさんの言われるとおり初めから手順を踏む方が良いようですね。以後気をつけます。

その他の回答 (1)

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

関数でしていることを、関数の形や引数を読み取って、VBAに自動翻訳するということなら、まずできません。 よほどの好事家が腕に任せてソフトを作れば、その事例限りではできるかもしれませんが、500種弱ある関数のあらゆる種類の関数を対象にできる、ものはできないでしょう。一般論として方法論を述べたものは、WEBなどでも見たことがない。発想が初心者的で奇想天外です。 >移行記録することは マクロの記録のようなことをしたいなら、関数をセットするときにマクロの記録を初めて置かなければならず 、記録されるのも Range("B1").Select ActiveCell.FormulaR1C1 = "=SUM(RC[-1]:R[2]C[-1])" のような関数そのものが記録されるだけです。 質問のようなことを考えるなら、 (1)VBAを勉強して (2)関数でやっていることを、逐次処理方式のプログラムロジックでどうなるか考えて、繰り返しのプログラムに持ち込むロジックを勉強すればよい。 VBAにも、ワークシート関数にある単機能的な関数があるのでそういうものはそのまま使える。しかしワークシート関数にあるものはVBAの関数では設けてないことが多い 例 MAX VBAなどほとんどのプログラム言語は、繰り返しできるので、天下りに覚えないとならない関数名や引数 やその関数の働きに比べ、素直に考えられる(思いつく)面が多い。 ーー 1例の課題例で説明すれば <<指定列内で、条件に合う文字列のあるセルの行を別セル範囲に抜き出す>> (関数では)過去に回答も相当あるが、関数でやると、非常に複雑で、回答を見てもすぐは理解しがたいレベルのものとなる。関数は得意じゃないぶんや。Filter(操作やVBA)などを使えということ。 (VBAでは)列内の各セルの値が、条件の値に合うか、各セル分繰り返して聞き、一致すれば、別セル範囲に 書き出す。その行の別セルも代入できる。 ーー このロジックは、初心者的だが、文法を覚えれば、比較的早く作れる。 ほかにFindメソッドというのも使う。 ーー 関数を使うかVBAにするか、 (1)どちらを知っているか、どちらを素早くできるかどうか (2)どちらがふさわしいか (3)どちらが得意の課題か (2)(3)それぞれを勉強しないとマスターできない。時間や努力が必要。 で決まっていると思う。 ーー 関数には、機能が売りの関数がある。プログラムを組むと知識が必要なもの。例 財務関数など。 またVBAでも自作や、ワークシート関数にと同じ関数は作れる。 関数は式の複写という便利な機能のおかげで、便利に使えている。 繰り返しはVBAが得意。 ーー VBAにはApplication.WorksheetFunction.SUM(引数)といった使い方もできる。SUMの部分はワークシート関数と同じ。多少差異あり。 この形でよいとすれば、質問のことはできそうだが、そんなことは意味あると考えない。 ーー こんな方向への興味から早く目を覚まして、どうせやりたいのは数例だろうから、具体例を決めて、やりたいことを文章で説明し、VBAではどうすべきか、質問して勉強すべきだろう。

whymm
質問者

お礼

有り難うございました。参考書を読むより勉強になりました。しかし自分には奥が深すぎて何時になったら習得できるのか?気が遠くなりそうです。でもこうして回答を寄せてくださっている方々に報いるためにもがんばります。

関連するQ&A

  • エクセルVBAで設定したセルの値

    エクセルVBAについての質問です。 例えば、A1とB1のセルの値を参照している数式がC1セルに設定してあるとします。 さらに、D1のセルにはC1の値を参照している数式が設定してあるとします。 VBAでA1、B1のセルの値を変更したとします。 次のステップのVBAでC1、D1のセルを参照すれば、A1、B1の変更が反映された後の正しい値である C1、D1の値が取得できるのでしょうか? できて当たり前だと思うのですが、セルに設定してある数式が大変複雑であったりすると、ちゃんとA1、B1の変更が反映された正しいC1、D1セルの値がVBAで取得できるのかちょっと不安です。 ばかな質問かもしれませんが、回答をよろしくお願い致します。

  • Excel。関数の中に優先順位付きの数式を書きたい

    Excel。関数の中に優先順位付きの数式を書きたいです。 Excelで()付きの優先順位がある数式+桁上がりをしようとしたら数式エラーが出ました。 =ROUNDUP((A1+B1)/15,0) これはどう書けば良いのでしょうか? Excel。関数の中に優先順位付きの数式を書きたいです。 あと数式を書いたセルにロックを掛けて数式を誤って消さないことは出来ますか?出来るのなら、やり方を教えて欲しいです。

  • EXCEL VBAの日付関数について

    EXCEL VBAの日付関数のことでお聞きしたいことがあります。 エクセルの関数でワークデイ関数がありますが、例えば C1セル: =WORKDAY(A1,10,B1:B10) これをVBAのコードで書くと、どういうコードになるのでしょうか。 VBAの関数については詳細に書かれたテキストを持っておらず、WorksheetFunctionを使ってチャレンジしてみましたが どうも上手くいきませんでした。 初歩的な質問かも知れませんが、どうぞよろしくお願いいたします。

  • Excel2003の数式設定について教えて下さい。

    Excel2003の数式設定について教えて下さい。 【C1セル】には 数式「=IF(A1="","",A1)」 【D1セル】には 数式「=IF(B1="","",B1)」 【E1セル】には 数式「=IF(AND(ISBLANK(C1),ISBLANK(D1)),"",(IF((C1+D1)=0,"---",C1+D1)))」 と設定した状態で、 【A1セル】に 数値「100」と入力し、 【B1セル】に 数値「200」と入力した場合、 【E1セル】は 「300」と出力されますが、 【A1セル】、もしくは【B1セル】を 空欄にした場合、 【E1セル】は エラーとなり、「#VALUE」と出力されてしまいます。 小生としては、【C1セル】【D1セル】の両セルとも表示上は空欄の為、 ISBLANK関数でTRUEと判定し、【E1セル】は空欄になってほしいのですが、 【C1セル】や【D1セル】には数式が設定されている為、 ISBLANK関数でTRUEと判定されずに、「IF((C1+D1)=0」の演算でエラーとなっている様です。 小生が実現したいこと、 「【C1セル】と【D1セル】の数式の実行結果が空欄以外の時のみ、  【E1セル】の数式を実行する。」 の方法をご存知の方、教えて下さい。お願い致します。

  • Excel2002において、数式と数値を別に数えたいのですが。

    Excelで表を作っています。 表の最後の列にそれぞれ、その列の合計が入っていますが、基本的にそれは数式による計算結果です。 ですが、時々直接数値を入力したセルがあります。 1.数式による計算結果のセルが30個 2.そうでない数値のセルが10個 のとき、 1.30 2.10 というふうに数えたいのです。 できれば関数がいいのですが…(VBAは手に余るので) できるかできないかだけでもいいので、どうかお答えください。

  • Excelでセルに入力するとVBA関数が呼び出される

    標記件、あるExcelファイルでセルに入力を行うと、入力後にVBAのある関数が自動で呼び出されるのですが、どこでこの設定を行う事ができるのでしょうか? VBAをOPENし、"ThisWorkbook"と"Sheet"内を開いても、何も記述はありません。通常はここで設定を行うと思うのですが・・・ (SelectionChangeなどで。) なお、呼び出される関数は、標準モジュール内に入っています。 以上、よろしくお願い致します。

  • Excel で別のセルの数式を表示

    Excel 2003 で、あるセルの数式を別のセルで表示させることはVBA無しで出来ますでしょうか? A1に「=A2」とあったときに、A3にA1を引数とした何がしかの関数を用いることで「=A2」と表示させる、というイメージです。

  • オープンオフィスの数式(関数)について

    こんにちは。 以前使用していたエクセルでは、 ・セルに「日本」と入力すると、隣のセルに「にほん」と表示される このようなことが数式(関数?)を利用して実現できましたが、オープンオフィスのCalcでは出来ないのでしょうか? よろしくお願いします。

  • VBAの書き方

    初歩的ですいません。 エクセルのVBAを利用してセル内に「"」を書き込むことは不可能なのでしょうか?? =if(A1="","","ok") と言う数式をVBAからセル内に書き込みたいのですがVBAで "" をプログラム上の文字として認識されてしまい書き込めません。 ご教授いただけないでしょうか??

  • 関数の数式教えて下さい

    エクセルで縦列にa1:a100までのセルの中に数値1のみが何個あるかの数式を教えて下さい 宜しくお願い致します。

専門家に質問してみよう