こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

【マクロ】IF複数条件の上限について

マクロ初心者です。
IF複数条件についてお聞きしたいのですがよろしくお願いします。

■内容■
E列に入っているデータをF列に条件出力するマクロを作成したいです。
その際、指定したコード(全50条件:01A~50X)以外を全て「その他」にしたいのですが可能でしょうか?

<マクロ>
ActiveSheet.Range("F2:F50").FormulaR1C1 = _
"=IF(OR(RC[-1]=""01A"",RC[-1]=""02B"",RC[-1]=""03C"",RC[-1]=""04D""・・・・・・・,RC[-1]=""50X"",RC[-1]=""""),RC[-1],""その他"")"

■問題■
・条件が50個とたくさんあるためうまく処理されません。条件に上限があるのでしょうか?
・プログラムが長いのと見やすくするため改行をしたいのですが、エラーになってしまいうまくプログラム文中の改行ができない。

何回か試行錯誤してみましたがうまくいきませんでした。
どなたか分かる方がいらっしゃいましたらご助言いただきたいです。
よろしくお願い致します。

投稿日時 - 2009-08-31 13:23:32

QNo.5251150

すぐに回答ほしいです

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

セル式の長さは1024文字までと言う制限があります。コレに引っかかっていませんか?

また、50個の条件式が並んでいたら見づらくって仕方が無いように思えます。
それよりは、50個のコードを作業列(例ではA列)に入れ、E列の各行の値がA列に無ければ「その他」と表示し、あればE列の値をそのまま表示する方が良いと思います。

つまり、この様な式を埋め込んでいくわけです
=IF(ISNA(MATCH(E2,A:A,0)),"その他",E2)


マクロにするとこんな感じです。
ActiveSheet.Range("F2:F50").FormulaR1C1 = "=IF(ISNA(MATCH(RC[-1],A:A,0)),""その他"",RC[-1])"'<- A列にコード一覧が記載されている事
ActiveSheet.EnableCalculation = True '<- 再計算してくれない場合はこの1行もいれる

投稿日時 - 2009-08-31 14:53:27

お礼

条件式がかなり長かったので制限にひかかっていたと思います。
同じ値ならその値を返し、違う場合は「その他」を返す。
と言った処理の方がスマートですね。

教えていただきました式を入れてみたのですが・・・
=IF(ISNA(MATCH(E2,A:A,0)),"その他",E2)
違う値の場合に「その他」が反映されず、「0」が反映されて
しまいました。

A列にはコード一覧は入っている状態なのですが、どうしたら良いでしょうか?

投稿日時 - 2009-08-31 16:51:52

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

or関数やand関数やsum関数の引数は30個までです。50個は無理。

mt2008さんのおっしゃるとおり、条件一覧を表にまとめて検索させ
るのが常道です。

投稿日時 - 2009-08-31 15:06:31

あなたにオススメの質問