• ベストアンサー

エクセル関数 → VBAへの変換をどうやって行えばいいでしょうか? 特に、.Formula=にエクセル関数をいれたい場合

エクセル関数 → VBAへの変換 現在、エクセル関数で記述していた以下の命令をすべてVBAに置き換える必要があります。 理由は、VBAで初期化ボタンをつくってそのボタンを押したとき、対象セルにデフォルトでエクセル関数の 式を入れたいからです。 なので、エクセル関数を以下のようにVBAにいれていました .Cells(7, 51).Formula = "C6&E6" しかし、これを以下のようにすると、エラーになってしまいました。 .Cells(7, 51).Formula = "C6&" "&E6" '氏名の間に半角スペースを入れたいため 同様に、以下のものがすべてエラーになります。 .Cells(8, 51).Formula = "L9&M9&"年"&N9&"月"&O9&"日"" .Cells(9, 51).Formula = "IF(OR(ISNUMBER(SEARCH("090-",C9)),ISNUMBER(SEARCH("070-",C9)),ISNUMBER(SEARCH("080-",C9))),"",C9)" どうすればよろしいでしょうか?

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

  • ベストアンサー
  • Masa2072
  • ベストアンサー率51% (94/182)
回答No.1

> .Cells(7, 51).Formula = "C6&E6" .Cell(7, 51).Formula = "=C6&E6" > .Cells(7, 51).Formula = "C6&" "&E6" .Cells(7, 51).Formula = "=C6&"" ""&E6" > .Cells(8, 51).Formula = "L9&M9&"年"&N9&"月"&O9&"日"" .Cells(8, 51).Formula = "=L9&M9&""年""&N9&""月""&O9&""日""" > .Cells(9, 51).Formula = "IF(OR(ISNUMBER(SEARCH("090-",C9)),ISNUMBER(SEARCH("070-",C9)),ISNUMBER(SEARCH("080-",C9))),"",C9)" .Cells(9, 51).Formula = "=IF(OR(ISNUMBER(SEARCH(""090-"",C9)),ISNUMBER(SEARCH(""070-"",C9)),ISNUMBER(SEARCH(""080-"",C9))),"""",C9)" ポイントとして""で囲われた文字列中で「"」を使用したい場合、「'」に置き換えるか、"あ""い""う" など""を二つ重ねるようにします。 あとFormulaを使用する場合、先頭に=を入れてあげないと文字列として処理されますのでお気をつけて。

piroron333
質問者

お礼

解決できました! ご回答ありがとうございます!

その他の回答 (2)

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

最後の数式だけですがこちらの方が簡単では? .Cells(9, 51).Formula = "=IF(SUM(COUNTIF(C9,{""070-*"",""080-*"",""090-*""})),C9,"""")"

piroron333
質問者

お礼

ありがとうございます。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

1.最初の=がありません。 2.式の途中の”は"" に直さなくてはなりません。 With ActiveSheet .Cells(7, 51).Formula = "=C6&"" ""&E6" .Cells(8, 51).Formula = "=L9&M9&""年""&N9&""月""&O9&""日""" .Cells(9, 51).Formula = "=IF(OR(ISNUMBER(SEARCH(""090-"",C9)),ISNUMBER(SEARCH(""070-"",C9)),ISNUMBER(SEARCH(""080-"",C9))),"""",C9)" End With

piroron333
質問者

お礼

解決できました! ご回答ありがとうございます!

関連するQ&A

  • Excel VBAのFormulaでアプリケーションエラーが発生。

    Excel VBAのFormulaでアプリケーションエラーが発生。 フォーマットが統一された複数のExcelBookから特定の値を別のbookに一覧化するマクロを作成中ですが、エラーで止まり原因も分かりません。 for文で回してますが、エラーとなったコードをほぼそのまま書くと下記のような形です。 Cells(i, j).Formula = _ "=[" & Cells(i, 3).Value & "\]test!" & Cells(2, j).Value 上記の文字列「test」はbookのシート名です。 Cells(i, 3).Valueには  「C:\tmp\testbook.xls」 のようなbookのパスを Cells(2, j).Valueには  「A1」 のようなセル位置の文字列を記載し、  ='C:\tmp\[testbook.xls]test'!$A$1 という関数を代入したいのですが冒頭の通り、エラーで先に進まず原因も不明です。 対処方法を教えて頂ければと思います。 上記の関数をExcelに貼り付ければちゃんと値を表示します。 また、VBAのウォッチウィンドウでも関数は認識している様ですが、 Excelへの代入だけできません。 ちなみにCells(i, j).FormulaではなくCells(i, j).Valueでもダメでした。 非常に困っています。よろしくお願いします。

  • VBAで関数の埋め込みをしていますが何度やってもエラーになってしまいま

    VBAで関数の埋め込みをしていますが何度やってもエラーになってしまいます。 以下の関数の場合、どのように式を分けて埋め込めば良いのでしょうか? Cells(11, 7).Formula = ”=IF(ISERROR(VLOOKUP(E11,製品マスタ!B$2:C$240,2,FALSE)),"",VLOOKUP(E11,製品マスタ!B$2:C$240,2,FALSE))"

  • エクセル関数とVBA関数で意味が違うのは多いのか

    エクセル関数とVBA関数で意味が違うのは多いのでしょうか? セルA1に「A」と入れ、 B1に「=ASC(A1)」と入れると B1は「A」になります。(半角) VBE画面で Sub test() Debug.Print Asc("A") End Sub を実行すると、-32160 になります。 ヘルプより エクセルでは=全角 (2 バイト) の文字を半角 (1 バイト) の文字に変換します。 VBAでは=指定した文字列内にある先頭の文字の文字コードを返す変換関数です。 となっていますが 同じ関数でも全く意味違うのでびっくりしています。 こういうことは頻繁にあるのでしょうか? (VBAのASC関数のかわりのエクセル関数は、CODE関数でした。)

  • エクセルのVBA1について

    お世話になります。 エクセルの文で下記の式があります。 =IF(ISERROR(VLOOKUP($E3822,☆集計!$C:$D,2,FALSE)),"対象外",IF($D3822>=VLOOKUP($E3822,☆集計!$C:$D,2,FALSE),"対象","対象外")) これは、正常に通ります。 これをVBAのFomura関数にしてみした。 Mdata = 3824 Range("L" & Mdata).Formula = "=IF(ISERROR(VLOOKUP($E" & Mdata & ",☆集計!$C:$D,2,FALSE))," & "対象外" & ",IF($D" & Mdata & ">=VLOOKUP($E" & Mdata & ",☆集計!$C:$D,2,FALSE)," & "対象外" & "," & "対象" & "))" 'Range("L" & Mdata).Formula = "=IF(ISERROR(VLOOKUP($E" & Mdata & ",☆集計!$C:$D,2,FALSE))," & Gai & ",IF($D" & Mdata & ">=VLOOKUP($E" & Mdata & ",☆集計!$C:$D,2,FALSE)," & Gai & "," & "Tai" & "))" コンパイルエラーとなりませんのが、実行しますと下記の様になります。 #NAME?となり、 式が =IF(ISERROR(VLOOKUP($E3824,☆集計!$C:$D,2,FALSE)),対象外,IF($D3824>=VLOOKUP($E3824,☆集計!$C:$D,2,FALSE),対象外,対象)) となり、対象、対象外が" "で括られません。 そこで、様々なサイトを参考にして下記の様にダブルクォートを重複して書きました。 ""対象""、""対象外""とすると赤字でエラーとなってしまいます。 Formula関数は、初めて使いますが、他の、単純な関数では成功しています。 どのようにすれば、通常の関数と同じ働きでインプットできるのか、ご教授して頂ければ有りがたく存じます。 よろしくお願いします。

  • エクセルVBAでEdate関数は使えますか?

    エクセル2002使用です。 VBAでワークシート関数のEdate関数は、使用可能でしょうか?また、もし使用可能であった場合、それは「分析ツール」のアドインを入れてなくても大丈夫でしょうか? sub 一月後() Dim no as date no = WorksheetFunction.edate(Cells(1,1), 1) End sub が実行時エラー438となってしまいます。 (変数noは、Cells(1,1)の一月後) 原因がよくわからず困ってます。 よろしくお願いします。

  • エクセルVBA及び関数

    初心者です。お教えお願いします エクセル2003です 空白行及び0をなくしたいのですが(C列を入力された時点で自動でE列のようにしたい) 関数の場合及びVBAのシートコードを両方教えていただけないでしょうか VBAのコードは勉強の為です Sheet1    A    B     C     D     E     F 16          文字A        文字A 17          文字B        文字B 18            0         文字C 19          文字C        文字D 20            0         文字E 21          文字D        文字F      22      23          文字E 24 25          文字F 文字はC16~C80まで入っております B16~E80までのセルのみで行いたいのですが 他の場所は関数やグラフ等がすでに入ってますのでいじりたくありません E16~をフォームのコンボボックスのリストにしようと思ってます よろしくお願いましす

  • エクセルで"=AND(ISNUMBER(B2),ISNUMBER(C3),ISNUMBER(D4))"の簡略化?

    エクセル2000です。ワークシート関数での質問です。 特定の複数のセルのすべてに数値が入力されているかどうかの判定は、たとえば以下のような関数で調べられますね? =AND(ISNUMBER(B2),ISNUMBER(C3),ISNUMBER(D4)) このように少ないセルならこれでもいいのですが、多くなってくるといちいち、セルの数だけISNUMBER()を書いていくのが大変になります。 '=ISNUMBER(B2,C3,D4)←これでは当然エラーになりますが、こんな感じで簡単に判定するワークシート関数はないのでしょうか?

  • Excel ワークシート関数をVBAで使用したい

    お世話になります。 Excelでワークシート関数をVBAで使用したいのですが、うまくいきませんでした。 関数ですと「ISERROR(FIND(V$10,R$11))=FALSE」のような式をVBA上で使用したいと思い、以下のようにコードを書いてみましたが If Application.WorksheetFunction.IsError(Application.WorksheetFunction.Find(Cells(i, j), Cells(i, 18))) = False Then Cells(i, j).Select End If 「実行時エラー'1004' WorksheetFunction クラスのFindプロパティを取得できません」となります。 入れ子が問題なのでしょうか。 よろしくお願いします。

  • エクセルVBA DateAdd関数の使い方

    お願いいたします・・DateAdd関数の三つ目の引数・・                      ↓ココ DateAdd( 単位, 増減値, 基準となる日付・時刻) ここには変数を使うことは可能でしょうか? また、以下のコードは間違いでしょうか? Cells(6, 4).Value = DateAdd("n", 5, Format(Cells(5, 4), "hh:mm")) ※試したら機能しましたけど・・不安です。 とか Cells(6, 4).Value = DateAdd("n", 5, Cells(5, 4),value) ※これは不正確のようです、時々機能しません。 アドバイスお願いいたします<m(__)m>、エクセルVBAです。

  • Excelの関数がうまく使えません。

    Excelで関数がうまく使えません。 「=IF(E2>=2000,200,IF(E2>=1000,100,IF(E2>=500,50," ")))」というのをH列のセルに入力しています。 計算はうまく?いくのですが、偽の場合に空白にしているのに、E列が空白でも200と反映されてしまいます。 ちなみにE列には「=IF(ISNUMBER(D2),(C2*D2)," ")」このような関数を使っております。 H列が空白のときに正しく空白にするにはどうしたらよいのでしょうか? 教えてください。

専門家に質問してみよう