まずは下の表を見てください。
│ 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)の計算結果がでるようにしたいのです。
いくら考えてもなかなか うまくいく式が思い浮かびません。
知識のある方、どうぞよろしくお願いいたします。
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
早速のご返事ありがとうございます。
非常にありがたいんですが、マクロの事がさっぱりわからないんで
できましたら、式がいいんですが・・・
難しいですかね~
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列)が目障りであれば、選択した後、「右クリック」-「表示しない」で隠して下さい。
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の行は、その上のものと同じ品名を入れています。)
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
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)))),"")
★下にコピー
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 数学 M種類の部品からN種類の部品を抽出する効率的なアルゴリズム 2 2022/04/22 16:51
- Visual Basic(VBA) VBA シート間の転記で、条件の追加コードの書き方について教えて下さい。 13 2023/02/26 09:31
- Excel(エクセル) エクセルでIF関数中にIFERROR関数を使いたいのですが???? 5 2022/04/08 13:24
- Excel(エクセル) エクセルVBAでセルに表示されているとおりの数値を取得したい(時間の計算結果) 1 2022/03/30 17:52
- Excel(エクセル) マクロだと数式が表示される 2 2022/09/10 14:48
- Excel(エクセル) EXCEL関数(数式)を教えてください 11 2023/05/09 13:19
- Excel(エクセル) EXCEL 行内のデータを2行に分けて、表を作り直したいのです。教えてください。 5 2023/06/25 14:00
- Excel(エクセル) エクセルの表について 3 2023/04/14 18:00
- メルカリ メルカリの上位表示について質問があります。 私は現在7種類の商品を7個ずつ計49個出品しています。 1 2022/10/10 10:33
- ガスコンロ・IHクッキングヒーター・給湯器 台所コンロの火が赤いのは何故?全て新品なのに。 7 2023/03/09 04:58
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Word2016でExcelデータを差込し...
-
【Excel VBA】CSV取込時、数字...
-
EXCELで2つのシートから一致し...
-
EXCEL2007で2つのシートのどっ...
-
ExcelのIF関数について
-
EXCELの列の幅
-
excelの列がいっぱいになり列を...
-
マクロ VBA 他のブックのデータ...
-
Excel 表の必要箇所だけを抜き...
-
VBAで他のシートの特定の列を検...
-
エクセルでページ毎の計をつけ...
-
エクセルの並べ変え
-
Excelで日付を入れると自動的に...
-
Excelで縦割りを途中から増やす...
-
超初心者がマクロ集計をするこ...
-
A列の最大値が入っている横に○...
-
エクセルの複数ワークシートの...
-
行にある文字をカンマ区切りで...
-
エクセルで表のある列を最初か...
-
エクセルVBAで同じ種類を集計し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Word2016でExcelデータを差込し...
-
【Excel VBA】CSV取込時、数字...
-
EXCELで2つのシートから一致し...
-
Excel 表の必要箇所だけを抜き...
-
EXCELの列の幅
-
エクセルで前年同日・前月同日...
-
エクセルでページ毎の計をつけ...
-
EXCEL2007で2つのシートのどっ...
-
excelの列がいっぱいになり列を...
-
エクセルで電話番号にハイフン...
-
エクセルVBAで複数列データを1...
-
EXCELで不良率を出そうと思って...
-
エクセルの複数ワークシートの...
-
エクセルの余白を0にしても列...
-
エクセルで縦線のいっぱい入っ...
-
Excelで奇数行を削除
-
ExcelのIF関数について
-
Excelのhperlink関数で作ったモ...
-
エクセル:最新データ12件で...
-
ピボットテーブル作成後、重複...
おすすめ情報