• ベストアンサー
  • すぐに回答を!

case文以外の方法について

  • 質問No.5458840
  • 閲覧数87
  • ありがとう数4
  • 気になる数0
  • 回答数5
  • コメント数0

お礼率 39% (29/73)

Excelのマクロについて質問です。
今select caseを使用してマクロを組んでおります。

Select Case Range("a1").Value
  Case "登録" or "追加"
    Range("b1").Value = "1"

End Select

上記のような感じにしておりますが、caseの条件式の部分が
長くなりそうなので、リストを見てフラグをたてるような感じに
したいのですが、何かいい方法はないでしょうか。

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

  • 回答No.3
  • ベストアンサー

ベストアンサー率 41% (982/2351)

ちょっと、というか、かなりトリッキーな方法ですが
---------------------------------------------
Sub Ts()
 S = "登録追加削除更新"
 A = Left(Range("A1").Value, 2)
 Range("B1").Value = (1 + InStr(S, A)) / 2
End Sub
---------------------------------------------
比較する文字列を全部つないで一つの文字列にしてしまい
A1の文字と比較し、何番目に有るかで、数値に変換してしまいます
補足コメント
chirorin22

お礼率 39% (29/73)

情報ありがとうございます。
上のをちょっとカスタマイズしてみて動かしてみましたが、
結論、case文に似てますので、どうしようかと思ってます。
別シートにリストを作成してそこからひっぱりだすことも
考えてます。
投稿日時:2009/11/23 22:42

その他の回答 (全4件)

  • 回答No.5
Collectionオブジェクトを使う方法。Excelを使えない環境で投稿してるので、動作検証ができません。おおむね合ってると思いますがエラーが出たらごめんなさい。Excelのバージョンによっても書き方が変わるかもしれないのでWebで検索するか、ヘルプで確認してください。

 Dim col As Collection
 Set col = New Collection
 
 ' 「col.Add Item, Key」と書くとcolに要素を追加できる
 ' ItemはRange("b1").Valueに代入する値
 ' KeyはRange("a1").Valueから取得できる文字列
 col.Add "1", "登録"
 col.Add "1", "追加"
 col.Add "2", "削除"
 col.Add "3", "更新"
 
 ' colから値を取得してB1セルに代入する
 Range("b1").Value = col(Range("a1").Value)

この書き方は、どの条件の処理もB1セルへの代入だからできることです。#4さんのおっしゃるように、処理が違うならCase文を重ねるのも仕方ないかもしれません。
お礼コメント
chirorin22

お礼率 39% (29/73)

URLなどありがとうございます。
結論からだとやはりcase文で考えられるパターンを追加していくしか
なさそうですね..
投稿日時:2009/11/23 22:40
  • 回答No.4

ベストアンサー率 36% (97/264)

Caseで該当したときの処理が規則性がある(ほとんど同じで対象セルだけが違うなど)ならば条件と対象とを一覧表にしてVlookupなどを使うことはできますが、処理が大きく異なれば地道にCase文を連ねるしかないでしょう。
該当したときの処理をうまく汎用化できれば短くすることも可能な場合が多い。
お礼コメント
chirorin22

お礼率 39% (29/73)

情報ありがとうございます。
case文しかなさそうですが、
別シートにリスト作ってそこからひっぱってくるような
感じなのを作ろうかとちょっと思ってます。
投稿日時:2009/11/23 22:41
  • 回答No.2

ベストアンサー率 41% (562/1346)

たとえばD列に条件を入れておいて

For i = 1 To Range("D" & Rows.Count).End(xlUp).Row
Select Case Range("a1").Value
Case Range("D" & i).Value
Range("b1").Value = "1"
Exit For
End Select
Next i

というのはいかがですか
  • 回答No.1

ベストアンサー率 33% (1403/4213)

if 変数 = "条件1" then
’条件1の処理
elseif 変数 = "条件2" then
’条件2の処理
elseif 変数 = "条件3" then
’条件3の処理
  (中略)
elseif 変数 = "条件n" then
’条件nの処理
else
'どれでもなかった
end if
という書き方はありますが、結局列挙です。

>  Case "登録" or "追加"
いくつ位を想定されてます?
想定させるCASEを配列に入れておいて、FOR文で比較しては?
補足コメント
chirorin22

お礼率 39% (29/73)

指摘ありがとうございます。
一部を載せてしまったので申し訳なかったのですが、
for文も考えました。
ちょっと考えてみます。
投稿日時:2009/11/23 22:43
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ