• ベストアンサー

【マクロ】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個とたくさんあるためうまく処理されません。条件に上限があるのでしょうか? ・プログラムが長いのと見やすくするため改行をしたいのですが、エラーになってしまいうまくプログラム文中の改行ができない。 何回か試行錯誤してみましたがうまくいきませんでした。 どなたか分かる方がいらっしゃいましたらご助言いただきたいです。 よろしくお願い致します。

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

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

セル式の長さは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行もいれる

hiro7th
質問者

お礼

条件式がかなり長かったので制限にひかかっていたと思います。 同じ値ならその値を返し、違う場合は「その他」を返す。 と言った処理の方がスマートですね。 教えていただきました式を入れてみたのですが・・・ =IF(ISNA(MATCH(E2,A:A,0)),"その他",E2) 違う値の場合に「その他」が反映されず、「0」が反映されて しまいました。 A列にはコード一覧は入っている状態なのですが、どうしたら良いでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.2

or関数やand関数やsum関数の引数は30個までです。50個は無理。 mt2008さんのおっしゃるとおり、条件一覧を表にまとめて検索させ るのが常道です。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • if文における複数条件の簡略化

    はじめまして。 Perlを勉強中の者です。 if文中における複数の条件に関する質問があるのでお願いいたします。 if文中における条件が複数ある場合に条件を簡素化することは可能でしょうか。 下記がただ今作成しているプログラムの一部なのですが、2つ目のif文中には10通りの条件があります。同一のプログラム内に同じ条件をもつif文が他数箇所あるので何か良い解決方法を探しております。 サブルーチンも考えたのですが、どのようにif文の条件として用いてよいのかわからないため、ご教授お願いいたします。 if ($code eq $codetwo){ if ((($code eq 'i')&&($F1mean<900)&&(1600<$F2mean)&&($F2mean<3100))| (($code eq 'y')&&($F1mean<900)&&(1400<$F2mean)&&($F2mean<2800))| (($code eq 'e')&&($F1mean<900)&&(1400<$F2mean)&&($F2mean<3000))| (($code eq 'E')&&($F1mean<1100)&&(1400<$F2mean)&&($F2mean<2700))| (($code eq 'a')&&($F1mean<1100)&&(900<$F2mean)&&($F2mean<2300))| (($code eq 'x')&&($F1mean<1100)&&(800<$F2mean)&&($F2mean<2400))| (($code eq 'X')&&($F1mean<1000)&&(700<$F2mean)&&($F2mean<2300))| (($code eq 'c')&&($F1mean<1000)&&(600<$F2mean)&&($F2mean<2000))| (($code eq 'o')&&($F1mean<1000)&&(600<$F2mean)&&($F2mean<1600))| (($code eq 'u')&&($F1mean<1000)&&(400<$F2mean)&&($F2mean<1500))){ printf F0123VF "%5.3f %5.3f %s %s %s %s %6.2f (%3.2f) %6.2f (%3.2f) %6.2f (%3.2f) %6.2f (%3.2f) ", $timeBeg, $time, $code, $word, $phctxt, $fileID, $F0mean, $F0ratio, $F1mean, $F1ratio, $F2mean, $F2ratio, $F3mean, $F3ratio; } }

    • ベストアンサー
    • Perl
  • マクロについて教えてください

    マクロ初心者です。 A~D列の表が少ない時100行、多い時400行あり、同じ操作を何回か繰り返すため、できればマクロで処理したいと思っています。 マクロ記録で作成したのですが、最終行が一定ではないため行数が増えると上手く作動しません。 どこを修正したらいいでしょうか。ご教示いただければ幸いです。 Sub Macro1() ' ' Macro1 Macro ' ActiveCell.FormulaR1C1 = "=SUBSTITUTE(RC[-1],""集計"","""")" Range("G2").Select Selection.AutoFill Destination:=Range("G2:G4"), Type:=xlFillDefault Range("G2:G4").Select Range("H2").Select ActiveCell.FormulaR1C1 = "=SUMIF(R2C1:R13C1,RC[-1],R2C2:R13C2)" Range("H2").Select Selection.AutoFill Destination:=Range("H2:H4"), Type:=xlFillDefault Range("H2:H4").Select Range("H5").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" Range("H6").Select End Sub ちなみに作成したいマクロ 1.F列にA列の「集計」を取り出して、G列にF列の「集計」文字を取り除く。 2.H列にB列「数」を計算する 3.H列の最終行に合計を出す。

  • マクロ初心者です 実行時エラー1004 の解決方法を教えてください

    マクロ初心者です 仕事で使っていたエクセルのマクロにエラーが出てしまいました。 「実行時エラー1004アプリケーション定義またはオブジェクト定義のエラーです。」 os:win2000 x = 0 y = 1 w_prv = "*" Do While rc.EOF = False If w_prv = "*" Or w_prv <> rc.Fields("種別名") Then If w_prv <> "*" Then NewSheet.Cells(y, x).FormulaR1C1 = "=SUM(RC[" & (2 - x) & "]:RC[-1])" End If y = y + 1 x = 2 End If If y = 2 Then NewSheet.Cells(1, x) = rc.Fields("所属名") End If If x = 2 Then NewSheet.Cells(y, 1) = rc.Fields("種別名") End If NewSheet.Cells(y, x) = rc.Fields("数量計") x = x + 1 w_prv = rc.Fields("種別名") rc.MoveNext Loop NewSheet.Cells(y, x).FormulaR1C1 = "=SUM(RC[" & (2 - x) & "]:RC[-1])" y = y + 1 For i = 2 To x NewSheet.Cells(y, i).FormulaR1C1 = "=SUM(R[" & (2 - y) & "]C:R[-1]C)" Next NewSheet.Cells(1, x) = "合計" NewSheet.Cells(y, 1) = "合計" rc.Close Call closeDB End Sub ************************************************** NewSheet.Cells(y, x).FormulaR1C1 = "=SUM(RC[" & (2 - x) & "]:RC[-1])" ↑ ここでエラーが出ているみたいです。 エクセルのマクロで入力したデータをアクセスに落としそこから新しいシートで月ごとの統計をとれるようになっていたのですが、とれなくなってしまいました。 こんな説明でお分かりになりますでしょうか? まったくの初心者なので… よろしくお願いいたします。

  • EXCEL 条件付きマクロ 

     |L       |  M    | N    |  O 1 |2007/7/31  起算日 2 3 4 |最終入庫日 |日数 |月数  |区分 5 |2005/4/5   |847   |27   |2年超 6 |2005/8/1   |729  |23   |1年超  7 |2006/7/31   |365  |12   |180日超 最終入庫日と起算日の期間計算をマクロで作成しました。 データ行は、都度変化します。 期間日数が365以下の場合(例では7行目)、月数、区分の計算をせず、7行目を表示しないようにする方法を教えてください。 また、下から4行目の長いIF分をIFの前で半角スペース、アンダーバーを使って5行に改行する方法も教えて下さい。 Sub 期間計算() 'メッセージ Dim kisanbi As Date kisanbi = Application.InputBox(Prompt:="起算日を入力して下さい", _ Title:="起算日を入力", Type:=1) Worksheets("在庫").Range("L1").Value = kisanbi '計算 最終入庫日欄が空白になるまで繰り返す Dim i As Integer i = 5 Do While Worksheets("在庫").Cells(i, "L") <> "" '日数計算(M列) Worksheets("在庫").Cells(i, "M").Select ActiveCell.FormulaR1C1 = "=DATEDIF(RC[-1],R1C12,""D"")" ActiveCell.Select '月数計算(N列) Worksheets("在庫").Cells(i, "N").Select ActiveCell.FormulaR1C1 = "=DATEDIF(RC[-2],R1C12,""M"")" ActiveCell.Select '日数から計算して区分を分類、表示 Worksheets("在庫").Cells(i, "O").Select ActiveCell.FormulaR1C1 _ = "=IF(RC[-2]>1095,""3年超"",IF(RC[-2]>730,""2年超"",IF(RC[-2]>365,""1年超"",IF(RC[-2]>180,""180日超"",""180以下""))))" i = i + 1 Loop End Sub

  • マクロ:データの抽出(複数条件)

    エクセルで以下のようなマクロを作成しました。 シート1のG列がシート2のF4と合致する時、シート2のC列にシート1のB列を貼り付けるのですが、条件を増やし 「シート1G列がシート2のF4と一致」かつ「シート1H列がシート2のG5と一致」かつ「シート1I列がシート2のH5と一致」かつ・・・としたいのですが、If Thenをどのように記述したらよろしいでしょうか。(AND関数の機能です) 宜しくお願いいたします。 Sub data01() With Sheets("Sheet1") x = .UsedRange.Cells(.UsedRange.Count).Row For i = 5 To x If .Cells(i, "G").Value = Worksheets("Sheet2").Range("F4").Value Then n = n + 1 Sheets("Sheet2").Cells(n + 5, "C").Value = .Cells(i, "B").Value End If Next End With End Sub

  • 二つの条件に当てはまる場合に数値を返すには。

    二つの条件に当てはまる場合に数値を返すには。 VBA初心者です。 関数でもVBAでも構わないのですが、      A   B   C   D 101     9  14:00 102     8  14:10  103     5  14:15 104     2  14:02 105     3  13:50 106     1  14:50 107     3  13:10 108     5  13:45 109     10 14:20 という表のA列に 「B列に入っている数字」の中で 「C列で一番時間が遅い」数字だけを 表示させたい場合、どのように表示させれば宜しいでしょうか? 追加されるごとにA列の数字が変更するようにしたいです。 C列の時刻は NOW関数で入力しております。 当初VBAで 行 = Worksheets("○○").UsedRange.Row + ActiveSheet.UsedRange.Rows.Count Range("A1").Cells(行, 2) = "=IF(OR(RC[1]=1,RC[1]=2,RC[1]=3),IF(COUNTIF(R101C[2]:R[896]C[2],RC[2])=COUNTIF(R101C[2]:RC[2],RC[2]),RC[2],""""),"""")" と行っていたのですが、 表全体を並び替えする必要があった為質問させていただきました。 ご回答宜しくお願い致します。

  • エクセルのマクロの自動記録で、セルに式を入力すると・・・・

    1.マクロの自動記録で、セルに式を入力すると、 仮にセルA1に =(D1+E1)/F1 と入れると、 ActiveCell.FormulaR1C1 = "=(RC[3]+RC[4])/RC[5]" というようにR1C1形式になってしまいます。 他の場合は通常のA1とかE4とかの形式で記録されるのにどうしてでしょうか? 2.これを ActiveCell.Formula = "=(D1+E1)/F1" のような形式で記録させる方法はないのでしょうか?

  • サッカーもいいけどマクロもねっ

    多分わかる人には簡単な内容だと思いますが・・ Rows("1:1").Select Range("D1").Select ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-1],Sheet2!R1C1:R1200C2,2,FALSE)" Range("D1").Select Selection.Copy Application.Goto Reference:="R2C4:R65000C4" ActiveSheet.Paste Application.CutCopyMode = False Cells.Select Range("A2").Activate Selection.AutoFilter Selection.AutoFilter Field:=4, Criteria1:="0" End Sub これは「Sheet1にデーター」を入れ 「Sheet2のA列」に調べたい項目を打ち込み Sheet1でマクロの実行をし Sheet1の上の方に調べてる項目が出てくるマクロです 質問は「Sheet2のA列」に調べる項目を打ち込むのではなく 「Sheet2のB列」打ち込みを変更したいのです どこを変えれば良いのでしょうか? 又、A列には「ABC123」と打っているのですが「abc123」の様に小文字にも対応出来る方法はありますか?

  • エクセルで繰り返し処理をしたいのですが

    下記のマクロを6行目で展開しています。 これと同じ処理を7行目~36行目めまでさせたいのですが どうやればいいのか教えていただけないでしょうか? sub test() Select Case a Case 2, 3, 4, 5, 6 Range("F6").Select Selection.FormulaR1C1 = _ "=IF(RC[-1]-RC[-2]-0.75-RC[8]-RC[9]<=0,0,RC[-1]-RC[-2]-0.75-RC[8]-RC[9])" Range("H6").Select Selection.FormulaR1C1 = "=IF(-7.75>=RC[9],0,RC[9])" Range("J6").Select Selection.FormulaR1C1 = _ "=IF(IF(RC[-5]<=22,0,(RC[-5]-22-RC[6]))<=0,0,IF(RC[-5]<=22,0,(RC[-5]-22-RC[6])))" Range("B6:W6").Select With Selection.Interior .ColorIndex = 2 .Pattern = xlSolid End With Case 0, 1 Range("F6").Select Selection.ClearContents Range("H6").Select Selection.ClearContents Selection.FormulaR1C1 = "=IF(RC[-5]<=22,0,(RC[-5]-22-RC[6]))" Range("J6").Select Selection.ClearContents Range("B6:W6").Select With Selection.Interior .ColorIndex = 45 .Pattern = xlSolid End With End select End sub

  • IF関数の複数の条件について

    よろしくお願いいたします。    A   B   C 1  ○   ○    あ  2  ○   △    い  3  △   △    う 4  △   ○    え 5  □   △    お A列が○でかつB列が○のみ場合、E列は「あ」、 A列が○でB列が○以外の場合はC列は「い」、 A列が△でかつB列が△のみ場合、E列は「う」、 A列が△でB列が△以外の場合はC列は「え」、 A列が○、△以外の場合はC列は「お」。 というようなIFを使った数式はは可能でしょうか? 質問に矛盾がありましたら申し訳ありません。

このQ&Aのポイント
  • MFC-J6983CDWで紙詰まりが起きた後、タブレットからの印刷や紙面のコピーが白紙で出てくる問題について相談します。
  • iOSでMFC-J6983CDWを無線LAN接続して使用していますが、紙詰まり後にタブレットからの印刷や紙面のコピーが白紙で出力される現象が発生しています。
  • MFC-J6983CDWで紙詰まりが発生し、その後にタブレットからの印刷や紙面のコピーをすると、どちらも白紙で出力される問題が発生しています。iOSを使用し、無線LAN接続している環境です。
回答を見る

専門家に質問してみよう