戻る  □一般操作のサロン  □ 使用方法  □ 新着記事  □ 新規に質問する!  □ トピック一覧  □ 検索  □ 過去ログ
[ 最新記事及び返信フォームをトピックトップへ ]
このトピック参照回数 :
VBAでシート関数を入力するとエラーが発生します

    [189332] VBAでシート関数を入力するとエラーが発生します-

    ■親トピック/記事引用/メール受信=OFF■

    □投稿者/ かえる -(2019/05/14(15:40))
    □U R L/

      質問、失礼いたします。

      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の部分である事は解っているのですが、この構文は間違っているのでしょうか?
      「"」を一つずつにしたりしたのですが、上手く行きません。どなたかご教示下さい。

      環境はWindows10のExcel2013です。よろしくお願いいたします。




    [189333] Re[1]: VBAでシート関数を入力するとエラーが発生します-

    記事引用/メール受信=OFF■

    □投稿者/ 半平太 -(2019/05/14(17:09))
    □U R L/
      その訳が分からない文を解析するより、
      どんな結果にしたいのかをご説明頂いた方が早いと思うんですが・・




    [189334] Re[2]: VBAでシート関数を入力するとエラーが発生します-

    記事引用/メール受信=OFF■

    □投稿者/ 河童どきあ -(2019/05/14(19:55))
    □U R L/
      {}で囲まれているという事は、配列数式だと思いますが、
      それをVBAでセットする場合は
      Formula ではなく、 FormulaArray を使用することになるかと思います。
      
      #もしかすると、Formula で行う為に、 Evaluate を使用しているのかな…。
      
      
      
      セットしたい数式は、単純にセットしようとした場合は
      以下のようなものかな。
      Sub test()
        Dim lRow As Long
        For lRow = 2 To 11
          Range("G" & lRow).Formula = "=sum(C" & lRow & ":F" & lRow & ")"
          Range("H" & lRow).Formula = "=rank(G" & lRow & ",$G$2:$G$11)"
          Range("I" & lRow).Formula = "=if(G" & lRow & ">=340,""優"",if(G" & lRow & ">=300,""良"",if(G" & lRow & ">=200,""可"",""不可"")))"
        Next lRow
      End Sub
      これをループとか使用せずに、配列数式を使って
      まとめて数式をセットしたいという事かな…。
      
      ちなみに、行いたいことは
      C列・D列・E列・F列に恐らくテストか何かの点数を入力。
      G列に4つの試験の合計点数。
      H列に全体の順位。
      I列に、合計点数から判断して、優・良・可・不可のいずれかの区分
      ってとこかな?
      
      ちなみに、『配列数式でRank関数は使用できない』という情報がネットにありました。


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [189335] Re[3]: VBAでシート関数を入力するとエラーが発生します-

    記事引用/メール受信=OFF■

    □投稿者/ γ -(2019/05/14(20:36))
    □U R L/
      私もきちんと説明をされたほうがよいと思います。
      
      といいつつ想像してみた。
      たぶんこういう簡単な物にしておいたほうがよいと思いますよ。
      
      Sub test()
          Range("G2:G12").Formula = "=SUM(C2:F2)"
          Range("H2:H12").Formula = "=RANK(G2,$G$2:$G$11)"
          Range("I2:I12").Formula = "=IF(G2>=340,""優"",IF(G2>=300,""良"",IF(G2>=200,""可"",""不可"")))"
      End Sub
      値だけにしたいなら、Range("G2:I12").Value = Range("G2:I12").Value を追加すればいい。


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [189336] Re[4]: VBAでシート関数を入力するとエラーが発生します-

    記事引用/メール受信=OFF■

    □投稿者/ �ス�ス�ス�ス�ス�ス -(2019/05/15(06:26))
    □U R L/

      >>河童どきあさん

      回答ありがとうございます

      FormulaArrayを使うんですね。そうです。配列で処理したいので上記の様に記述しました。参考にしたサイトではifの代わりにAvarageが使われていて、Avarageならちゃんと動作したのですが。

      まさに、テストの点数が入力された表に合計、順位、優、良、可、不可を入力したかったです。
      rank関数は使用出来ないんですか?一応、ifを削除した状態で実行するとrankもちゃんと入力されていたのですが



      >>γさん

      回答ありがとうございます。

      構文自体のミスを教えて欲しかったので、目的は書かなかったのですが、書いた方が良かったですね

      やはり配列は使わずに記述した方が良いのですかね?参考にしたサイトでEvaluateを使用していたので使って配列で記述したかったのですが。

      シンプルに記述した方が良さそうですね。

      ありがとうございます。




    [189337] Re[5]: VBAでシート関数を入力するとエラーが発生します-

    記事引用/メール受信=OFF■

    □投稿者/ γ -(2019/05/15(09:06))
    □U R L/

      evaluateということは
      計算結果が返るはず。
      ならば、Valueプロパティで受けるべきです。

      それに行方向の情報を自動補完しないと思う。
      できているIFを除いたものを、
      後学のために教えてください。




    [189341] Re[6]: VBAでシート関数を入力するとエラーが発生します-

    記事引用/メール受信=OFF■

    □投稿者/ かえる -(2019/05/15(13:13))
    □U R L/

      >>γさん

      evaluateに関しては参考にしたサイトに書いてあったコードをそのまま流用したので、複数のシート関数を配列的に使う為のメソッドだと思ってました。
      勉強になります。ありがとうございます。

      全部載せると冗長になるのですが、載せて大丈夫ですかね?

      range("G2:I11").Formula=evaluate("{""=sum(C2:F2)"",""=rank(G2,$G$2:$G$11)""}")

      と書いてif分の評価の部分は「#Value」で表示されるのですが、合計と順位は正常に出力されたという意味です。どこでエラーが出ているか調べていただけなので、あまり意味のない文章だったかもしれません。すみません




    [189342] Re[7]: VBAでシート関数を入力するとエラーが発生します-

    記事引用/メール受信=OFF■

    □投稿者/ 河童どきあ -(2019/05/15(19:59))
    □U R L/


      確認いたしました。

      当初の質問に対しては、下記が答えになるかと思います。
      リテラル文字に関しては、ダブルくぉーとを4つで囲んでください。

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

      #よく見ると、これは、配列数式ではないですね。まぎらわしいです・・・




    [189343] Re[8]: VBAでシート関数を入力するとエラーが発生します-

    記事引用/メール受信=OFF■

    □投稿者/ かえる -(2019/05/15(20:43))
    □U R L/

      >>河童どきあさん

      回答ありがとうございます。
      やはりダブルクォート4つで囲まないとダメなんですね。勉強不足ですみません


      やっぱり配列数式では無いんですね。そもそもEvalueteメソッドがどういう物か解らずに、サイトに書かれていた物を改変して使っていたので、ややこしくて申し訳ないです。




    [189344] Re[9]: VBAでシート関数を入力するとエラーが発生します-

    記事引用/メール受信=OFF■

    □投稿者/ �ス�ス�ス�ス�ス�ス -(2019/05/15(20:46))
    □U R L/

      皆様のおかげで解決いたしました。Formula.Arrayで思っていた動作をしました。
      いろいろ教えて頂いてありがとうございました。




    [189345] Re[8]: VBAでシート関数を入力するとエラーが発生します-

    記事引用/メール受信=OFF■

    □投稿者/ γ -(2019/05/15(20:55))
    □U R L/
      回答ありがとうございました。
      # 仕事中は書けませんので、どうしても遅くなります。
      
      Evaluateは単に配列を作るためだけに使っているのですね。
      こちらの理解が追いつきませんでした。
      
      というのは、
      例えば、2つの文字列"A"と"B"を要素に持つ配列を
      VBAで作ろうとするとき、
          ary1 = Evaluate("{""A"",""B""}")
      などとわざわざすることはありません。滅多に見ません。
      (それで理解が遅くなりました。)
      
      普通は、
          ary2 = Array("A", "B")
      というようにArray関数を使えばよいだけですよね。
      
      さらに、今回の例のように、上のA、Bと言う文字列の中に""が入っていると
      面倒の2乗になりますし、後から見てもよくわからないものになります。
      (既に、河童どきあさんが回答いただいていますので、コードは繰り返しません。)
      
      わざわざEvaluateの顔を立てる必要はありませんし、
      配列にする必要があるとも思えません。
      
      既に書いたように、
          Range("G2:G12").Formula = "=SUM(C2:F2)"
          Range("H2:H12").Formula = "=RANK(G2,$G$2:$G$11)"
          Range("I2:I12").Formula = "=IF(G2>=340,""優"",IF(G2>=300,""良"",IF(G2>=200,""可"",""不可"")))"
      といった簡明な書き方のほうが可読性も高くなると私は思います。
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [189346] 型が一致しません 実行時エラー13-

    記事引用/メール受信=OFF■

    □投稿者/ めぐっぴ -(2019/05/16(06:03))
    □U R L/
      質問、失礼いたします。
      
      VBA超初心者です。
      
      型が一致しませんと出てしまう初歩的な質問です(-_-;)
      
        For i = 3 To 26
              If Cells(i, "L") = 1 Then ←←ここです
                  If Cells(i, "B") < 30000 Then
                      Cells(i, "K") = 11
                  End If
              End If
      
      
      プログラムはこのようなIFの繰り返しになっていて、結果は得られるのでエラーは気にしなくていいのでしょうか??(そこもわからなくてすみません)
      
      どなたかご教示下さい。
      
       環境はWindows10のExcel2013です。よろしくお願いいたします。


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他



      ++++++++++++++++++++
      OS      ⇒OTHER
      Version⇒OTHER
      ++++++++++++++++++++




    [189347] Re[2]: 型が一致しません 実行時エラー13-

    記事引用/メール受信=OFF■

    □投稿者/ γ -(2019/05/16(08:14))
    □U R L/

      別人ですよね。
      当初の質問と無関係な質問をしないでください。
      新規に質問を立ち上げてください。
      # どうしてこうなるのかなあ。訳分からない。




    [189349] Re[3]: 型が一致しません 実行時エラー13-

    記事引用/メール受信=OFF■

    □投稿者/ から -(2019/05/16(11:49))
    □U R L/

      他のサイトにも質問されてるようですよ



このトピック内容の全ページ数 / [0]

このトピックに書きこむ
Name/
E-Mail/

└>このツリーのレス記事をメールで受信しますか? YES/ NO/
Title/
URL/
Comment/ 通常モード->  図表モード-> (←の場合適当に改行を入れて下さい)
タグが使用できます。例 ⇒ <font color="blue">文字</font>
解決!!ありがとうございました! 解決       保留中です・・・ 保留        迷宮入りorほかあたって見ます・・ 迷宮入       すいませ〜ん。誰か〜! Help! ←※回答者専用
解決したらチェック       保留(コードテスト中など・・)         解決不可orレスが全く付かなくてほかのサイトに行くときなど・・
削除キー/
(半角8文字以内) 


- Child Forum -
Edit:ゆう-G