プロが教える店舗&オフィスのセキュリティ対策術

マクロ初心者です。
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個とたくさんあるためうまく処理されません。条件に上限があるのでしょうか?
・プログラムが長いのと見やすくするため改行をしたいのですが、エラーになってしまいうまくプログラム文中の改行ができない。

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

A 回答 (2件)

セル式の長さは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行もいれる
    • good
    • 0
この回答へのお礼

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

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

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

お礼日時:2009/08/31 16:51

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

50個は無理。

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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!