- 締切済み
Excelで度数分布表作成したが累積度数分布表にするには?
ヘルプを見ると、直接やる方法は、どうもないように見えました。なにか、やり方を、独特なやり方でも結構ですので、お分かりの方お教えください。よろしくお願いします。 累積にしたいというのは次のような意味です。試験点数の分布が以下のようだとします。 0-25点が1人, 25-50点が10人, 50-75点が2人, 75-100点が1人。(度数分布) これをもとにして、 0-25点が1人, 0-50点が11人, 0-75点が13人, 75-100点が14人。(累積度数分布)この例だと手計算でもできそうですが、ちょっと量が多いので、なにか、マクロでもいいし、関数でもいいので、システマチックな方法を探しております。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- kazuhiko5681
- ベストアンサー率49% (79/159)
こんばんわ。早速ご質問に答えさせていただきます。 No1 可能です。 If Target.Address <> Range("B" & myRow).Address Then Exit Subを If Target.Column <> 2 then Exit Subと書き換えて下さい。 No2 関係ないと思います。 No3 これは、エラーは出ると思います。If Target.Row = 1 Then Exit Subの下に、If Target.value >0 tThen と入力して下さい。これで、エラーが出なくなると思います。 お試しになってみて下さい。
- kazuhiko5681
- ベストアンサー率49% (79/159)
初めまして。 1行目をタイトル行とし、B列に度数分布データが入力されていてC列に累積度数分布データを表示させるようにサンプルマクロを組んでみました。 次のように操作してみて下さい。 1.データの入っているブックを立ち上げ、ALT+F11キーを押してVBE画面を表示させ、画面左上のVBAProjectと書かれている上にマウスポインターを合わせて右クリック後、挿入→クラスモジュールを順にクリックし、表示された右側の白い部分に下記のコードをコピー&ペーストする。 Public WithEvents App As Application Private Sub App_SheetChange(ByVal Sh As Object, ByVal Target As Range) Dim myRow As Integer myRow = Target.Row If Target.Address <> Range("B" & myRow).Address Then Exit Sub If Target.Row = 1 Then Exit Sub If Target.Row = 2 Then Target.Offset(0, 1).Value = Target.Value Else Target.Offset(0, 1).Value = CInt(Target.Value) + CInt(Target.Offset(-1, 1).Value) End If End Sub 2.次に画面左上のVBAProjectと書かれている下のThisWorkbookをダブルクリックし、表示された右側の白い部分に下記のコードをコピー&ペーストする。 Dim myClass As New Class1 Private Sub Workbook_Open() Set myClass.App = Application End Sub 3.保存してブックを終了し、再度立ち上げる。 B列に値を入力してみて下さい。貴方様の思い通りの動作が実現できます。 ご不明な点・不具合等がありましたら、ご遠慮なくお知らせ下さい。私のわかる範囲でご一緒に考えていきたいと思います。
お礼
ご親切に、ありがとうございます。B列に打ち込むたびに、隣のC列に、累積度数が出てきて楽しいですね。Excelでマクロを使ったのはこれが初めてです。わかりやすく書いてくださりありがとうございました。今思いついたことを質問したいのですが、 (1)手で打ち込まないで、copy & paste でB列に10行ほどためしに、貼り付けた場合は、C列に累積が出てこない。copy & paste でも反応するようにするのは可能でしょうか? (2)ブックの第3シートにてこのマクロの実験をしようと思って実施したのですが、第1, 第2シートにも影響あるでしょうか? (3)ブックを終了しないでもマクロを、仕切りなおしして、リスタートさせる方法はありますか?(なに言っているか解らなかったらすみません。さっき、sheet 1(既に他のデータがある)のB列の下のほうで、egxとかでたらめを打ち込んだら、型が一致しませんとか言われて、sheet1でもマクロが反応してるように見えたこと、そして、そのマクロの「型が一致しません」がきっかけで、その後sheet3に飛んでもマクロは反応しなくなったように見えたもので。勘違いだったらすみません) いろいろ初心者なので変な質問だと思います。すみません。少しだけですが、Cプログラムなどの経験があるので、お教えいただいたマクロをゆっくりよみたいと思います。ありがとうございます。
- MovingWalk
- ベストアンサー率43% (2233/5098)
度数分布データが、B2,B3,B4,...に入っているとします。 累積度数分布データを、C2,C3,C4,...に入れるとすると、 C2のセルに =B2、 C3のセルに =C2+B3 の式を設定し、 C4以降は、C3の式をコピーすればできます。 これがシステマチックな方法かどうかはわかりませんが...
- grumpy_the_dwarf
- ベストアンサー率48% (1628/3337)
1行目にA列から階級がズラッと書いてあって、2行目に度数分布が出ているとします。 最初の階級は累積であってもなくても同じなので、 A3: =A2 2つ目以降の階級は前の階級の累積度数に自分の階級の度数を足したモノなので B3: =A3+B2 フィルハンドルをつかんでダ~と階級の数だけ伸ばしておしまい。
お礼
質問にお答えいただき、ありがとうございます。まだ試していないのですが、感謝いたします。