• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA: Select Caseを短くしたい)

VBA: Select Caseを短くしたい

yorozu_yaの回答

  • ベストアンサー
  • yorozu_ya
  • ベストアンサー率54% (76/140)
回答No.1

何のためにコードを短くしたいのでしょうか? 例えば配列に入れたとすると、i の値に応じて1つの文字列が欲しいだけなのに その前にすべてを配列に入れなければなりません。 一番速いのは最初の Select Case の形でしょう。 それでもコードを短くしたいというのなら、Array関数ですかね。 Str = Array("", "momo", "sakura" ・・・"tsubaki")(i)

masnoske
質問者

お礼

ありがとうございます。 コード利用者から見れば、ファイルサイズは小さく(=コードは短く)、速いというのは重要ですね。 コード保守の面から見れば、コードは判りやすいのが重要。 両立させるのは、難しいですね。 スピードの比較もやってみます。

関連するQ&A

  • VBAクラスで、プロパティを使わずに、データを受け渡すには?

    はじめまして。 最近、クラスモジュールを使い始めたのですが、 別のクラスに、プロパティを使わずに、 データを受け渡すには、どうすればいいのでしょうか? たとえば、次の2つのクラスがあったとします。 (両方ともString型の読み取り専用のプロパティがある) 'クラスA Private m_Str_A as string Public Property Get Str_A() as String Str_A = m_Str_A End Property 'クラスB Private m_Str_B as string Public Property Get Str_B() as String Str_B = m_Str_B End Property ここで、クラスAで使用したm_Str_Aのデータを クラスBのm_Str_Bへ渡したいのですが、、、、。 別のプロパティを作ればいいだろうと考えたのですが、 それでは、値の変更が可能になってしまいます。 使用環境は、Excel2000 VBA、Windows2000です。 いろいろ調べてみたところ、他の言語か、VB.NETでない と無理そうなことが書かれていました。 仕事場では、他の言語は使用できないので、困ってます。 何か良い方法がありましたら、よろしくおねがいします。

  • クラスモジュールの使い方が詳しく書かれたVBAの本

    VBAを勉強中のものです。 クラスモジュールを使いこなせるようになりたいのですが それについてよく書かれている本はありますでしょうか? VBAの勉強している際に読む本は、標準モジュールにコードを記載するよう書かれています。 ご存知の方がいらっしゃいましたらご回答お願いします。

  • Excel VBA 配列について

    Excel VBA 配列について質問させてください。 画像のようなコードですと、ケース1では問題なく動くのですが、 ケース2になると「インデックスが有効範囲にありません」 ケース3になると「型が一致しません」 となります。 セル範囲を配列に入れ、取り出す方法(ケース2) カンマ区切りの数字を配列に入れ、取り出す方法(ケース3) を教えてください。 よろしくお願いします。

  • VBAもしくはVB6:クラスの中でクラスは使える?

    EXCEL2010にて、VBAでプログラミングしております。 クラスモジュールを用いてクラスを自分で作成して、 作成したクラスを標準モジュール内で使用するのは普通ですが、 クラスモジュールを用いてクラスを自分で作成して、 作成したクラスを、更に別のクラスモジュールの中に記述することは可能ですか? このようなクラスの中に別のクラスが入っている状態(クラスの入れ子)で、 まともに動くものでしょうか? 詳しい方、御教授よろしくお願いいたします。

  • Access SELECT INTO に関する質問です。

    Access SELECT INTO に関する質問です。 いつもお世話になっております。 Access 2002 VBAなのですが、 http://okwave.jp/qa/q4994969.html の内容にちなんだご質問です。 VBAで、SELECT INTO で作成したテーブルを そのままTransferSpreadsheetでExcelに吐き出したいと思っております。 しかし、TransferSpreadsheetでは引数にテーブル名しか指定できないため、 任意のソートがされていない状態でExcel出力されてしまいます。 なにか、任意のソートをした状態でExcel出力できる方法はありますか? TransferSpreadsheetでExcel出力した後、 Excel VBAコードを埋め込んで、Excelで並び替えを行うしかないのでしょうか? よろしくお願いいたします。

  • VBA case判定で

    Excel2010 Win7使用 VBA独学中の初心者です。 下記のcase判定でTrueなのに、Trueと判定してもらえません。 解決策を教えて頂けると助かります。 また、もっとスマートな方法があれば、 併せて教えて頂けると助かります。 例) hの中に"早い"という文字列がある場合  Case InStr(h, "早い") > 0 において、InStr=1が入っている場合でも Trueと判定されず、次のcaseに移行してしまいます。 Sub chg2() Dim r As Long Dim c As Long Dim day As Long Dim dc As Long Dim h As String day = Right(Range("S5"), 2) Select Case day Case 28 dc = 30 Case 29 dc = 31 Case 30 dc = 32 Case 31 dc = 33 End Select For r = 53 To Range("A52").End(xlDown).Row Step 2 For c = 3 To dc h = Cells(r, c) Select Case h Case InStr(h, "早い") > 0   h = Replace(h, "早い", "a")   Case InStr(h, "遅い") > 0 h = Replace(h, "遅い", "b")   ・   ・   ・  End Select Next c Next r End Sub

  • EXCEL2000(VBA) イベントの取得について

    EXCEL2000のVBAで多くのコマンドボタンを設置したのですが、 これは面倒だと思って、Collectionプロパティを使ってコード部では うまくボタンを配列で扱えるようになったのですが、問題はボタンが押された時のイベント時です。 VB6.0とかだとコマンドボタンのオブジェクト名自体に配列を付けることが出来て、 尚かつ、このボタンを押された時、配列の何番目のがクリックされたのかなど、 Private Sub xxxxx_Click(Index As Integer) のように出来たと思います。 VBA(EXCEL2000)でCollectionでとった配列の何番目のボタンを押されたなど、 配列の要素を取得することは可能でしょうか?

  • VBAでのマクロ削除

    複数のExcelファイルを読み込み必要なデータのみをsheet1に寄せ集め最後にExcel形式で保存するというコードを書きました。保存したExcelファイルは、次回同じVBAのコードからWorkbooks.Open Filenameで開く必要があるため、マクロを削除してから保存しないといけないことに気付きました。 ACompo = ExcelWorkbook1.VBProject.VBComponents.Item("module1") ExcelWorkbook1.VBProject.VBComponents.Remove (ACompo) 最終的にやりたいことは、3つのフォームと2つの標準モジュールを削除したい(ワークブックモジュールにもコード書いてありますのでそれも) ということになります。 よろしくお願いします。

  • Excel VBAでのコードの書き分け方

    Excel VBAについてご質問します。 プロジェクトの項目を見ると、 Sheet1 ThisWorkbook 標準モジュール などさまざまあると思います。 これらに対して、どこにコードを書いていくべきなのかがわかりません。 例えば、Sheet1にボタンを配置して、それがクリックされたときの動作についてはSheet1に書けばいいのだと思います。 ですが、いろんなシートのコード、フォームのコードなどから呼び出される関数はThisWorkbookか標準モジュールのどちらに書けばいいのか悩んでいます。 それ以外のケースも含めて、一般的にこういう風に使い分けをするというのがありましたら、ぜひ教えてください。 よろしくお願いいたします。

  • VBAでオブジェクトの配列の配列の削除をすると動作異常になります

    VBA(Excel2000)でオブジェクト指向のお勉強をしておりますが、ミスか言語仕様か分からないトラブルがあり、困っております。 簡単な碁(碁盤を再現し、活き死に程度を判定する)のプログラムを作成していますが、クラス石の配列であるクラス群を作成し、更にクラス群の配列を石の黒・白別に標準モジュールで定義しています。一塊の石の群が死んでいると判定した時、その群を削除しようとするのですが、redim preserve 群の配列(添字-一番最後の)を実行すると、群の配列全体にアクセスできなくなってしまいます。redimする前に、Nothingを代入するとか、もとの群(石の配列)にNothingを代入してからredimするとかしてみましたが、事態は変わりませんでした。 仕様なのか、勘違いしているのか、クラスの使い方が分かっていないのか..アドバイスお願いします。