[[20190514185238]] 『VBAでシート関数を入力するとエラーが発生します』(かえる) >>BOT

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBAでシート関数を入力するとエラーが発生します』(かえる)

質問、失礼いたします。

VBA初心者です。サイトを見ながらデータのソート用の表を作成しているのですが、
シート関数の入力でエラーが出てしまいます

range("G2:I11").Formula=evaluate("{""=sum(C2:F2)"",""=rank(G2,$G$2:$G$11)"", _
""=if(G2>=340,""優"",if(G2>=300,""良"",if(G2>=200,""可"",""不可"")))""}")

で、if分の部分で構文エラーが発生してしまいます。
if分の部分を削除するとちゃんと動作するので、ifの部分である事は解っているのですが、この構文は間違っているのでしょうか?
「"」を一つずつにしたりしたのですが、上手く行きません。どなたかご教示下さい。

< 使用 Excel:Excel2013、使用 OS:Windows10 >


サロンはマルチポスト禁止ですよ。
こちらに移動するなら、そのように宣言して閉じたほうが良いです。

(マナ) 2019/05/14(火) 19:04


 文字列の""をエスケープするのに""を付加する

 """"優"""",if(G2>=300,""""良"""",if(G2>=200,""""可"""",""""不可"""")

 単純に
 Range("G2:I11").Formula = Array("=sum(C2:F2)", "=rank(G2,$G$2:$G$11)", "=if(G2>=340,""優"",if(G2>=300,""良"",if(G2>=200,""可"",""不可"")))")
(seiya) 2019/05/14(火) 19:19

""のエスケープは"を四つ打たないとダメなんですね。

教えて頂いた方法でやってみようと思います。

ありがとうございます。
(かえる) 2019/05/15(水) 06:28


 構文エラーそのものは行継続文字の_が""内にあるので行継続文字ではなく単なる_という文字として扱われているからでは?
 range("G2:I11").Formula=evaluate("{""=sum(C2:F2)"",""=rank(G2,$G$2:$G$11)"",""=if(G2>=340,""優"",if(G2>=300,""良"",if(G2>=200,""可"",""不可"")))""}") 
 と1行にすると構文エラーは消える。
(ねむねむ) 2019/05/15(水) 09:00

seiyaさん Range("G2:I11").Formula = Array("=sum(C2:F2)", "=rank(G2,$G$2:$G$11)", "=if(G2>=340,""優"",if(G2>=300,""良"",if(G2>=200,""可"",""不可"")))")
で思っていた結果になりました。ありがとうございます。

ねむねむさん そうですね、"で囲っている部分は文字列として扱われるのでエラーが出ていた様です。
でも、
range("G2:I11").Formula=evaluate("{""=sum(C2:F2)"",""=rank(G2,$G$2:$G$11)"",""=if(G2>=340,""優"",if(G2>=300,""良"",if(G2>=200,""可"",""不可"")))""}")
で入力したらエラーは無くなりましたが、結局表内に値は入力されなかったです。
よく解らずにevaluateを使ったのがダメだったみたいです。
もっとちゃんと勉強します。ありがとうございました
(かえる) 2019/05/15(水) 13:17

 かえるさん
 わざわざEvaluate メソッドでArray関数と同等の
 (厳密には同一ではありませんが)
 配列を生成する必要はありません。
 Evaluate メソッドは有効に使用できる場面は
 有りますが、255以内の文字数制限があるので、
 Array関数の方が確実です。
(seiya) 2019/05/15(水) 13:50

エラーの原因は既に指摘済みですので、試してみた結果だけ。

    Range("G2:I11").Formula = [{"=sum(C2:F2)","=rank(G2,$G$2:$G$11)","=IF(G2>=340,""優"",IF(G2>=300,""良"",IF(G2>=200,""可"",""不可"")))"}]
    Range("G2:I11").Formula = Evaluate("{""=sum(C2:F2)"",""=rank(G2,$G$2:$G$11)"",""=IF(G2>=340,""""優"""",IF(G2>=300,""""良"""",IF(G2>=200,""""可"""",""""不可"""")))""}")

尚 マルチポスト先にも説明を入れた方がよろしいかと思います。

(チオチモリン) 2019/05/15(水) 15:10


seiyさん Evaluateメソッドに関しては参考にしたサイトに書いてあったから使った程度で、よく解らずに使っていました。素直にArray関数を使った方がスマートでしたね。
拙い説明で、いろいろ教えて下さってありがとうございます。Eavaluateメソッドについては、また使い方も含めて勉強しようと思います。
ありがとうございました。

チオチモリン わざわざ確認して頂いてありがとうございます。本当に基本的な事を理解せずにしようとしていたのが問題ですね。もっと勉強します。

マルチポスト先には説明とお礼を書き込んでおきました。お気遣いありがとうございます。
(かえる) 2019/05/15(水) 20:50


 参考になるかどうかわかりませんが

[[20070212134849]] 『Evaluate Method の研究』(seiya)
(seiya) 2019/05/15(水) 20:56


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.