『アプリケーション定義またはオブジェクト定義のエラー』(りす) Excel2003 WindowsXPです。 こんにちは、慣れないVBAに悪戦苦闘しております・・。 下から2つ目のコード myrange.Offset(0, 1).・・が 黄色くなって、実行時エラー1004 アプリケーション定義またはオブジェクト定義のエラーとなります。恐れ入りますが、どなたかお助け頂けないでしょうか。何卒宜しくお願いします。 '"MB"と"PE"と"OTHER"の3つに区分分けする行作成 ' "myrange" にN行のデータが入っている全てのセルを設定 Dim myrange As Range Set myrange = Range("N2", Range("N" & Rows.Count).End(xlUp)) '"sushiki1"に事業所を3つ(MBとPEとOTHER)に区別する数式を設定 Dim sushiki1 As String ' "sushiki1"は文字列ですと宣言。 sushiki1 = "=If(RC[-13]=""MB"" & ""*"",""MB"",IF(RC[-13]=""PE"" & ""*"",""PE"",""OTHER"")" myrange.Offset(0, 1).FormulaR1C1 = sushiki1 ' myrange範囲の一つ右のセルにsushiki1を代入 Set myrange = Nothing ---- こんにちは! )←が一つ足りない様です。 sushiki1 = "=If(RC[-13]=""MB"" & ""*"",""MB"",IF(RC[-13]=""PE"" & ""*"",""PE"",""OTHER"")" ↓ sushiki1 = "=If(RC[-13]=""MB"" & ""*"",""MB"",IF(RC[-13]=""PE"" & ""*"",""PE"",""OTHER""))" (SoulMan) ---- 衝突! 1) 括弧が足りない。 2) "*"をワイルドカード文字として使用しているのなら、数式自体が問題 (seiya) ---- Soulman様 seiya様 ありがとうございます。自分で解決できるか ちょっとやってみて、後ほど報告いたします! ---- すみません、頂いたアドバイスを元に、以下の様に変更したのですが 同じエラーとなってしまいます。。どのようにすれば良いでしょうか。 sushiki1 = "=IF(COUNTIF(RC[-13],""MB*""),""MB"",IF(COUNTIF(RC[-13]=""PE*""),""PE"",""OTHER""))" ---- 2番目の CountIf 関数の中がおかしいのでは? If(CountIf(RC[-13],""PE*"") 数式のVBA記述の取得の仕方 1) 数式をセルに入れて機能しているか確認する。 2) マクロの記録 3) 数式の入ったセルをクリックして F2 を押す 4) Enter で確定 5) マクロ記録の終了 これでコードが生成されているはずです。 (seiya) ---- seiya様 大変ありがとうございます。重ねて申し訳ございませんが。このコードに続く 以下でも全く同じエラーになります。お助け頂けないでしょうか。 やろうとしていること:あらかじめ Usrate と Eurateというcurrencyで宣言された変数に“117”などの数字が代入されており、セル参照にて、事業所(MBとPEとOTHER)とUSDかEURを区別して それぞれに適切なレート換算式を当てはめる。 Dim sushiki2 As String sushiki2 = "=IF(AND(RC[-1]=""MB"",RC[-3]=""USD""),ROUND(O:O * Usrate/10,0)),IF(AND(RC[-1]=""MB"",RC[-3]=""EUR""),ROUND(O:O * Eurate/10,0)),IF(AND (RC[-1]=""PE"",M2=""USD""),ROUND(O:O * Usrate,-1)),IF(AND(RC[-1]=""PE"",RC[-3]=""EUR""),ROUND(O:O * Eurate,-1)),IF(AND (RC[-1]=""OTHER"",RC[-3]=""USD""),ROUND(O:O * Usrate,0)),IF(AND (RC[-1]=""OTHER"",RC[-3]=""EUR""),ROUND(O:O * Eurate,0))" mirange.Offset(0, 1).FormulaR1C1 = sushiki2 ご教示頂いた方法を試すべく、下記を直接セルに入力し、試みたのですがやはり数式に不備があるようです。そもそも、関数のレベルが多すぎるのでしょうか?その場合どういった解決方法があるかご教示頂けないでしょうか? IF(AND(O2="MB",M2="USD"),ROUND(N2 * 117/10,0)),IF(AND(O2="MB",M2="EUR"),ROUND(N2 * 156/10,0)),IF(AND (O2="PE",M2="USD"),ROUND(N2 * 117,-1)),IF(AND(O2="PE",M2="EUR"),ROUND(N2 * 156,-1)),IF(AND (O2=""OTHER"",M2="USD"),ROUND(N2 * 117,0)),IF(AND (O2="OTHER",M2="EUR"),ROUND(N2 * 156,0)) ---- 変数の部分に実際の数値を入れて、数式が機能していたらマクロで記録してください。 そのコードをアップして、変数の部分を指摘してください。 (seiya) ---- 割り込みすいません。。。   =IF(AND(O2="MB",M2="USD"),ROUND(N2 * 117/10,0)),IF(AND ~~1 ~~~~~~~~~~~~~~~~~~~2 ~~~~~~~~~~~~~~~~~~3 ~4 1.IF関数 2.条件 3.真の場合 4.偽の場合 ←ここがありませんし、かっこで 1 のIF関数が終わってます。   関数として完成されてませんよ〜   >関数のレベルが多すぎるのでしょうか? これは、ネストのことだと思うのですが、そちらは大丈夫な気がします。   (キリキ)(〃⌒o⌒)b ---- seiya様 ありがとうございます。 >変数の部分に実際の数値を入れて、数式が機能していたら 下記数式の "117" "156" の部分が“変数の部分に実際の数値を入れ”て 試したつもりだったのですが、これとは違うお話でしょうか? すみません。 IF(AND(O2="MB",M2="USD"),ROUND(N2 * 117/10,0)),IF(AND(O2="MB",M2="EUR"),ROUND(N2 * 156/10,0)),IF(AND (O2="PE",M2="USD"),ROUND(N2 * 117,-1)),IF(AND(O2="PE",M2="EUR"),ROUND(N2 * 156,-1)),IF(AND (O2=""OTHER"",M2="USD"),ROUND(N2 * 117,0)),IF(AND (O2="OTHER",M2="EUR"),ROUND(N2 * 156,0)) キリキ様 ありがとうございます。 =IF(AND(O2="MB",M2="USD"),ROUND(N2 * 117/10,0)),IF(AND・・ ~~1 ~~~~~~~~~~~~~~~~~~~2 ~~~~~~~~~~~~~~~~~~3 ~4 全部で6個あるif節の~4の括弧閉じ")"を削除して、試みたのですが やはり数式としてエラーがあると言われてしまいました。。どうしたら よいかご教示いただけないでしょうか? ---- キリキさんも指摘されていますが、その数式では機能しないでしょ? もともと機能していない数式に変数を代入しても無駄です。 (seiya) ---- 気がついた点をばw    >全部で6個あるif節の~4の括弧閉じ")"を削除して、試みたのですが >やはり数式としてエラーがあると言われてしまいました。。どうしたら >よいかご教示いただけないでしょうか? はじめに、 上の提示している数式を見る限りでは、消していませんよね? さらに、消すのは一個ではありませんよ? IF関数全部の括弧の位置が間違っています。 消すだけではだめです。 括弧の数が足りなくなりますかねb 最後に全部くっつけてください。   次に、 AND ( ~~~ などのように、邪魔なスペースが入っています。 これも、消してください。(2つあります。)   さらに、 AND(O2=""OTHER"",M2="USD") ~~ ~~ これは「"」が多くありませんか?   マクロの記述の前に、計算式を完成させなければ始まりませんよ〜   (キリキ)(〃⌒o⌒)b ---- ネストの多い数式のベタ打ちは、 良い結果を生まないことが多いですよ。 IF関数を一つずつ作りましょう。  一つ入れ込んでは、確認し。  一つ入れ込んでは、確認し。 していくと、どこのネストが変なのか分かります。 例えば、最初の2つです。 O2 M2 [1] MB USD ROUND(N2*117/10,0) [2] MB EUR ROUND(N2*156/10,0) 1行目を式にすると =IF(AND(O2="MB",M2="USD"),ROUND(N2*117/10,0),FALSE) 条件に合わない時は、FALSE を表示させる事にします。 O2とM2に文字をいれて、思った結果が出ることを確認して下さい。 次に2行目を式にすると =IF(AND(O2="MB",M2="EUR"),ROUND(N2*117/10,0),FALSE) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 作った数式が正しく機能することが確認できたら、 この式は最初の式で結果が「FALSE」と出たときに 計算したいので、その部分に入れ込みます。 =IF(AND(O2="MB",M2="USD"),ROUND(N2*117/10,0),IF(AND(O2="MB",M2="EUR"),ROUND(N2*117/10,0),FALSE)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ この手順で、6番目まで入れ込んでいきます。 一歩一歩進んでいくのが、一番近道だったりしますよ。 ところで、「sushiki1」の方は出来たのですかね? もちろん、ワークシート上で期待する結果が得られる物が と言うことですが・・・。 (HANA) ---- seiya様 キリキ様 HANA様 アドバイス頂き誠に有難うございます。 皆様の方法で再トライし、後ほど結果を報告させて頂きます。 ---- 皆様のおかげで、以下の通り数式ができました。 (HANA様、言葉足らずですみません、sushiki1は解決しております。) セルに直接打ち込んで、期待通りの結果(レート換算) が出ます。 =IF(AND(O2="MBI",M2="USD"),ROUND(N2*117/10,0),IF(AND(O2="MBI",M2="EUR"),ROUND(N2*156/10,0),IF(AND(O2="PED",M2="USD"),ROUND(N2*117,-1),IF(AND(O2="PED",M2="EUR"),ROUND(N2*156,-1),IF(AND(O2="OTHER",M2="USD"),ROUND(N2*117,0),IF(AND(O2="OTHER",M2="EUR"),ROUND(N2*156,0))))))) 次に、 数式のVBA記述の取得の仕方 1) 数式をセルに入れて機能しているか確認する。 2) マクロの記録 3) 数式の入ったセルをクリックして F2 を押す 4) Enter で確定 5) マクロ記録の終了 で記録されたコードが以下で、実行してみますとエラーとなります。皆様のアドバイスを頂戴したいのですが。 ActiveCell.FormulaR1C1 = _ "=AND(RC[-1]=""MBI"",RC[-3]=""USD"")?ROUND(RC[-2]*117/10,0)""MBI"",RC[-3]=""EUR"")ROUND(RC[-2]*156/10,0)AND(RC[-1]=""PED"",RC[-3]=""USD"")?ROUND(RC[-2]*117,-1)?AND(RC[-1]=""PED"",RC[-3]=""EUR"")""OTHER"",RC[-3]=""USD"")?" ---- 記録の段階でエラーになりませんか? (私のエクセル君は、記録自体してくれませんでした。) 実際の式と、現在記録されているコードを見比べたら 正しく記録されていない事はお分かりだと思います。 それを正しく書き直せば、エラーにならない式が 完成すると思いますが・・・・ "=IF(AND(RC[-1]=""MBI"",RC[-3]=""USD""),ROUND(RC[-2]*117/10,0), IF(AND(RC[-1]=""MBI"",RC[-3]=""EUR""),ROUND(RC[-2]*156/10,0), IF(AND(RC[-1]=""PED"",RC[-3]=""USD""),ROUND(RC[-2]*117,-1), IF(AND(RC[-1]=""PED"",RC[-3]=""EUR""),ROUND(RC[-2]*156,-1), IF(AND(RC[-1]=""OTHER"",RC[-3]=""USD""),ROUND(RC[-2]*117,0), IF(AND(RC[-1]=""OTHER"",RC[-3]=""EUR""),ROUND(RC[-2]*156,0)))))))" せっかく式が出来ているのですから、直接書き込んではどうですか? ただし、「"」を「""」に書き換える必要が有りますので  1.セルに数式を入れて、最初の「=」を削除。  2.Ctrl + H  3.検索する文字列(N): "    置換後の文字列(E): ""   [ 置換(R) ]  4.式の最初に「"=」最後に「"」をつける  5.コードを差し替え 置換の手順を踏んでください。 ちなみに、数字を変数に置換するときは 「117」→「"& Usrate &"」 変数の前後を、「ダブルクオーテーション・アンパサント・スペース」 で囲った物と置換してください。 上手く行きそうですか? そ・・・そうそう、コメント記入の際は 忘れずご署名を御願いしますね。 (HANA) ---- HANA様 seiya様 キリキ様 本日は大変お世話になりました。 全て解決し、感動です! ご親切に教えて頂き、心より感謝しております。 ありがとうございました!! (りす) p.s署名の件大変失礼致しました。