• ベストアンサー

EXCELで不良率を出そうと思ってるんですが・・・

まずは下の表を見てください。 │ A │ B │ C │ ────────── 1 │100│ 1 │ │   2 │ 0│ 2 │ │ 3 │ 0│ 1 │ │ 4 │ 0│ 3 │ │ 5 │ 0│ 2 │ │ 6 │ 30│ 0 │ │ 7 │ 25│ 1 │ │ Aの列は良品の数ですBの列は不良品の数です Cの列に不良率の結果を出そうと思います。 A2,A3,A4,A5が0なのはA1からA5は同じ品物ですが不良の種類が違うので別の行に書かれています。 A1の品物のように不良の種類が5つになることもあるし、A6のように不良が無い事もあれば、A7のように不良の種類が1種類の事もあります。 それぞれの品物ごとに不良率を出したいので、C1からC4は空白でC5に=SUM(B1:B5)/(A1+SUM(B1:B5))の結果が出るようにしたいんです。 そして、C6は不良が無いので空白。C7は=B7/(A7+B7)の計算結果がでるようにしたいのです。 いくら考えてもなかなか うまくいく式が思い浮かびません。 知識のある方、どうぞよろしくお願いいたします。

  • B--P
  • お礼率100% (8/8)

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

  • ベストアンサー
  • maron--5
  • ベストアンサー率36% (321/877)
回答No.6

◆こんな表示でよければ    A    B    C 1  100   1   0.082568807 2   0   2 3   0   1 4   0   3 5   0   2 4   30   0   0 5   25   1   0.038461538 C1=IF(A1<>0,SUM(OFFSET(B1,,,MATCH(1,INDEX(1/((A2:A10<>0)+(B2:B10="")),),0)))/(A1+SUM(OFFSET(B1,,,MATCH(1,INDEX(1/((A2:A10<>0)+(B2:B10="")),),0)))),"") ★下にコピー

B--P
質問者

お礼

あーっ!! 来たっ! これですこれですっ もー大助かりです ありがとうございましたm(__)m

その他の回答 (5)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.5

#1-4のmerlionXXです。 コードに抜けがありました。 差し替えてください。 Sub test02() Dim c As Range Rows("1").Insert Shift:=xlDown Range("A1") = "良品" Range("B1") = "不良品" Range("C1") = "ratio" Columns("A").Insert Shift:=xlToRight Range("A1") = "品名" i = 1 Range("A2") = "品名" & i Set c = Range("A2").Offset(1, 0) Do Until c.Offset(0, 1) = "" If c.Offset(0, 1) <> 0 Then i = i + 1 End If c.Value = "品名" & i Set c = c.Offset(1, 0) Loop Range("A1").CurrentRegion.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(2, 3), _ Replace:=True, PageBreaks:=False, SummaryBelowData:=True Set c = Range("A1").Offset(1, 0) Do Until c.Value = "" If Right(c.Value, 1) = "計" Then c.Offset(0, 3).FormulaR1C1 = "=RC[-1]/(RC[-2]+RC[-1])" c.Offset(0, 3).NumberFormatLocal = "0.00%" End If Set c = c.Offset(1, 0) Loop Set c = Nothing End Sub

B--P
質問者

お礼

なんどもなんども懲りずに回答いただき 謝謝(-人)謝謝です。 ありがとうございました。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.4

#1のmerlionXXです。 > 表の作り方が間違っているのはわかってるんですが、 > すでに出来上がってしまっている表から不良率だけ出さないといけないので・・・ では、表を直しましょう。 かならずオリジナルのコピーを取ってから、以下の手順でやってみてください。 1.Altキー+F11キーでVisualBasicEditorを呼び出します。 2.メニューから挿入、標準モジュールで出てきたコードウィンド(右側の白い広い部分)に以下のコードをコピペします。 Sub test01() Columns("A").Insert Shift:=xlToRight Range("A1") = "品名" i = 1 Range("A2") = "品名" & i Set c = Range("A2").Offset(1, 0) Do Until c.Offset(0, 1) = "" If c.Offset(0, 1).Value <> 0 Then i = i + 1 End If c.Value = "品名" & i Set c = c.Offset(1, 0) Loop Range("A1").CurrentRegion.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(2, 3), _ Replace:=True, PageBreaks:=False, SummaryBelowData:=True Set c = Range("A1").Offset(1, 0) Do Until c.Value = "" If Right(c.Value, 1) = "計" Then c.Offset(0, 3).FormulaR1C1 = "=RC[-1]/(RC[-2]+RC[-1])" c.Offset(0, 3).NumberFormatLocal = "0.00%" End If Set c = c.Offset(1, 0) Loop End Sub 3.Alt+F11キーでワークシートへもどります. 4.メニューから、ツール、マクロ、マクロで出てきたマクロ名(test01)を選択して実行します。 これで集計行が入り、集計行で不良率を計算しています。 ただし、上記コードはあなたがお書きになったとおりにデータがA1からAとB列に切れ目無く入っていることが条件です。(普通、このような表には左側に品名があると思うのですが、提示された例ではないので、新たにれつを挿入し、A列の0の行は、その上のものと同じ品名を入れています。)

B--P
質問者

お礼

うわー すごいっ ありがとうございまーす

  • coffeebar
  • ベストアンサー率49% (216/435)
回答No.3

補助列を使わないと難しいように思います。 100が入っているセルをA2と仮定します。(質問文ではA1) C2に =IF(A2=0,C1,A2) D2に =IF(A2=0,D1+B2,B2) E2に =IF(OR(A3>0,A3=""),D2/C2,"") を入力して、C列からE列を下まで、コピー。 補助列(C列とD列)が目障りであれば、選択した後、「右クリック」-「表示しない」で隠して下さい。

B--P
質問者

お礼

ありがとうございます。 そうかー こんな方法でやるんですね。

  • DIooggooID
  • ベストアンサー率27% (1730/6405)
回答No.2

あまりスマートではありませんが、下記のようなマクロにすれば、 とりあえず実現可能かと思います。 Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2007/5/25 ユーザー名 : X ' Range("A1").Select Av = ActiveCell.Value Bv = 0 Do Until ActiveCell.Value = "" If (ActiveCell.Offset(0, 1).Value = 0) Then ActiveCell.Offset(0, 2).Value = "■" Av = 0 Bv = 0 Else Bv = Bv + ActiveCell.Offset(0, 1).Value If (ActiveCell.Offset(1, 0).Value <> 0 And _ ActiveCell.Offset(1, 0).Value <> "") Then ActiveCell.Offset(0, 2).Value = Bv / (Av + Bv) Bv = 0 End If End If ActiveCell.Offset(1, 0).Select If (ActiveCell.Value <> 0) Then Av = ActiveCell.Value End If Loop If (ActiveCell.Offset(-1, 1).Value <> 0) Then ActiveCell.Offset(-1, 2).Value = Bv / (Av + Bv) End If ' End Sub

B--P
質問者

お礼

早速のご返事ありがとうございます。 非常にありがたいんですが、マクロの事がさっぱりわからないんで できましたら、式がいいんですが・・・ 難しいですかね~

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

表の作り方が間違っているのでは? 途中に集計行をもうければいいのではないでしょうか。

B--P
質問者

お礼

早速のご返事ありがとうございます。 表の作り方が間違っているのはわかってるんですが、 すでに出来上がってしまっている表から不良率だけ出さないといけないので・・・

関連するQ&A

  • エクセル2003 計算されないようにしたい

    例 A列     B列  1     =A1+A2  2     =A2+A3  3     =A3+A4 (A4は空白です) となっている場合に B1=3 B2=5 B3=3 になると思うんですが この時に空白のセルと計算結果を出すときは0もしくは 計算されないようにしたいです。 最終的にB列にSUM関数を使って合計を出したいのですが A列に求めたい数字が片方しか入ってない場合 (数字が入っているセル+空白セル)はSUM関数の合計に入れたくないです。 なので上記の例では B列にSUM関数をした場合11ではなく8にしたいです。 それには文字列を入力して#VALUE!にするしかないですか? でもその状態にしてSUM関数で合計を出したときも#VALUE!になってしまいます。 よろしくお願いします。

  • excelで合計の異なる得点率の算出方法

    例えば、A列は100点満点中の得点、B列は50点満点中の得点、C列は200点満点の得点だったときの得点率の出し方が、どうもうまくいきません。私の方法だと、どうしても±5程度の誤差が生じます。   A  B  C  得点率(書式%) 1 10  10     20/150 2 20  20  20  60/350 3        30  30/200 A3,B3,C1には式が入っています。 私の方法だと、=(SUM(A1:B1,A1:B1,B1,B1)/2)/COUNTIF(A1:C1,">=0")ですが、これだと誤差が生じます。 何とか他の方法はないでしょうか? ご回答よろしくお願いします。

  • excel グループごとにデータの種類数を数えたい

    こんばんは。お世話になります。 Excelで、データの種類数をかぞえたいのですが、いくつかのグループがあり、そのグループごとのデータの種類数をカウントしたいと考えています。 (データは数字のみ、空白もありますが、空白はデータ数として採用しない) ~データ~   A         B    1 グループ     データ 2   a          10 3  a           5 4   a 5   b           4 6   b           4  7   b            8  b            9  c           ・ 10  c           ・ ・    ・           ・ ・   ・ ・   ・ ~集計(求めたい結果)~ グループ    データの種類数 a           2       b           1 c           ・   ・           ・  ・           ・ 単純にB列のデータ種類を数えるには、 {=SUMPRODUCT(IF(B2:B・・・<>"",1/COUNTIF(B2:B・・・,B2:B・・・),0))} でできるというところまでは分かったのですが、「グループ別に」というところでつまづいています。 なお、Excel2007です。 恐縮ですが、ご教示願います。

  • エクセルで重複したデータの処理をしたい

    お世話になります。 A列はランダムに数字が入っています。(並び替えはされていない) このA列の数字は重複するものがあります。 A列の中で重複する場合に、上から順に1/3,2/3,3/3などになるようにしたい。 例) A1:1 A2:2 A3:1 A4:3 A5:1 A6:2 A7:4 のとき 1は3つ出てくるので1/3,2/3,3/3 2は2つ出てくるので1/2,2/2  3,4は1つなので空白にする。 このときB列に分子を、C列には分母を入力する。 この例の場合、B1:1 C1:3 B2:1 C2:2 B3:2 C3:3 B4:空白 C4:空白 B5:3 C5:3 B6:2 C6:2 B7:空白 C7:空白 と入力されるようにするにはどういう計算式をB列、C列に入れておけばよいのでしょうか? Excel2002です。 実際はかなりの量があります。 よろしくお願いします。

  • EXCELの縦横変換

    エクセルの数式で、横に並んでいるものを、縦にしたいのですがわかりません。 良い方法を教えてください。初心者です。 (1)sum(a1:a100)(2)sum(b1:b100)(3)sum(c1:c100)(4)sum(d1:d100) ※見にくくて申し訳ありませんが、()の数字は列を表します。 上記の表で作成した結果を下のような別シートに縦の表に写したいのですが。 1 =sum(a1:a100)の結果 2 =sum(b1:b100)の結果 3 4 データが300列位あるので、なにかいい方法を教えてください。 よろしくお願いします。

  • 不良率の計算方法

    製品品質改善のため試験を実施しました。 しかし、総合不良率の計算が分からないため、どなたか教えて頂けると幸いです。 原料として、従来品と試験品を350個準備し、1回目の評価結果として、従来品10個、試験品2個の不良品が発生。 2回目の評価結果として、従来品15個、試験品10個の不良品が発生。 ※2回目評価では、1回目の良品を使用とする。 3回目の評価結果として、従来品2個、試験品0個の不良品が発生。 ※3回目評価では2回目の良品を使用する。 回数を重ねた総合不良率が知りたく、宜しくお願いします。

  • エクセル2007について質問です。

    エクセル2007について質問です。 セルの合計を求めたいのでよろしくお願いします。       A      B       C 1       単価  販売個数  売上 2  りんご 100     5    500 3  みかん 50     2    100 4  いちご 5             総売り上げ600 C2には、「=A2*B2」を入力しました。 C列はC4までC2をコピーしています。 C5に「=SUM(C2:C4)」と入力するとエラーになります。 どうすればよいでしょうか? よろしくイ願いします・

  • 串刺し合計する同一セル番号を間接的に指定する方法

    例えば、エクセルのシート名が1と2で、各シートのセル番号C40にある数値を合計する場合、=SUM('1:2'!C40) で合計できますが、合計を求めるシート1と2のセル番号であるC40を、=SUM('1:2'!C40)があるシート内の例えばセル番号B50に入力されている文字列C40を参照して、=SUM('1:2'!C40)と同一の計算を実行できるようにするには、、=SUM('1:2'!C40) のC40のところをどのように書き直せばよいのでしょうか。説明がわかりにくくてすみません。例えばB50に入力されている文字列をC40からC60に書き換えると、=SUM('1:2'!C60)と同じ計算結果にできる =SUM('1:2'!?)の?のところの記載方法がわかりません。、=SUM('1:2'!C40)のC40をC60に書き換えるしかないのでしょうか。よろしくお願いします。

  • エクセルについて

    A列、C列に名前が入っていてB列とD列に空白,0,1,2が入っています。 A列とC列の組み合わせに応じて、B列とD列の1or2である数をカウント出来るようにしたいのですが、どのようにしたらよいのでしょうか?

  • エクセル関数

    参照先のセルが空白の場合に値が入力されているセルまで列を遡って参照したいのですが、そのような時はどういった関数を使えば可能でしょうか? 具体的には添付画像のようなケースです。 A列には日付、B列にはニューヨークダウの終値が入力されています。 C列では当日終値の前営業日に対する変動率を求めます。 当日のB列が空白の場合はC列にも空白を返します。 前日の終値が空白のC3048とC3057にエラーが出ます。 C3048ではB3048のB3046に対する変動率、 C3057ではB3057のB3052に対する変動率 を求めます。 このケースではC列にどのような関数式を使えばよろしいでしょうか。 質問の文章が分かりづらくて申し訳ありませんが、よろしくお願いいたします。

専門家に質問してみよう