• ベストアンサー

ドント方式をExcel関数にすると・・・

BLUEPIXYの回答

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.6

'愚直にドント方式百分率配分をどーんとプログラムしてみました Public Sub どーんと実行() 'dont(入力データ範囲,出力データ範囲) Call donto(Range("A1:C1"), Range("A2:C2")) End Sub '入力データは100分率 'dont(入力データ範囲,出力データ範囲) Public Sub donto(s As Range, d As Range) Dim data() As Double, count() As Integer, dataKind As Integer Dim i As Integer, j As Integer, x As Range, maxV As Double, maxI As Integer, sum As Integer dataKind = s.count 'データの分類数 ReDim data(100, dataKind) ReDim count(dataKind) i = 0 For Each x In s i = i + 1 count(i) = 0 data(0, i) = x.Value Next For i = 1 To 100 For j = 1 To dataKind data(i, j) = data(0, j) / i 'ドント表の作成 Next Next Do While True maxV = 0# For j = 1 To dataKind '最大値を求める If data(count(j) + 1, j) > maxV Then '0%のデータは無い maxV = data(count(j) + 1, j) maxI = j End If Next count(maxI) = count(maxI) + 1 '最大値の件数を1増やす sum = 0 For j = 1 To dataKind '合計を求める sum = sum + count(j) Next If sum = 100 Then Exit Do Loop '出力に設定 i = 0 For Each x In d i = i + 1 x.Value = count(i) Next End Sub

dra96
質問者

お礼

ありがとうございます! 試す時間を少しください。

関連するQ&A

  • エクセル関数

    エクセル関数を教えて下さい。 A×B=Cの計算でCが小数点以下の端数が出る場合、 答えのCを小数点以下を四捨五入して整数にする関数を教えて下さい。 CをROUND関数でDという整数に置き換えるのは分かりますが、乗算の答えCを同じセルで整数にしたいです。よろしくお願いします。

  • エクセルの関数

    以下のようなことをエクセルでやりたいのですが 何か関数はありませんか? 例:A×B=答え 上記の答えの 正数が二桁のとき、小数点第二位を四捨五入 正数が三桁のとき、少数点第一位を四捨五入 どなたか教えてください。お願いします。

  • round関数について

    試しにエクセルで次の計算をしてみてください。 -16.76 7.9 -11.45 -8.88 -1 4.26 33.78 以上を全部足します。つまり「=sum(a1:a7)」です。当然「7.85」になります。 次に四捨五入します。round関数で小数点第2位を四捨五入して、第1位まで表示させます。つまり、「=round(sum(a1:a7),1)」ということです。すると「7.8」を返しました。 ん?「7.9」なのでは?と思い、次にこんな計算をしてみました。 A・・・=round(sum(a1:a7),2) B・・・=round(A,1) つまり、Aでいったん小数点第3位を四捨五入させた上で、その値を今度はBで小数点第2位を四捨五入させ、最終的に小数点第1位まで表示させたわけです。すると、ちゃんと「7.9」を返しました。 なんでこんな風になるのでしょうか?どうして一発で「7.9」にならないのでしょうか?

  • 関数教えてください

    エクセルの関数教えてください。 割り算をして出た答えの小数点第3位を四捨五入 例:セルAとセルBでお願いします。

  • 比例区のドント方式の利点について

    衆議院選挙の比例区はドント方式が採られていますが、 なぜ、この方法が選ばれているのでしょうか。 仮に、7議席を争う選挙区で、以下のような結果となった場合、       政党 A   政党 B  政党 C  政党 D  政党 E 得票数  340,000  280,000  160,000  60,000  15,000 得票率  39.7%    32.7%    18.7%    7.0%   1.7% ドント方式では、A*3議席、B*3議席、C*1議席となるようですが(wikipedia「ドント方式」より)、 7(議席数)に得票率を掛けた値(Aから順に2.78、2.30、1.31、0.49、0.12)を利用し、 整数部を議席数に、残りの議席は小数部の大きい政党から順に分配という方法 (A*3議席、B*2議席、C*1議席、D*1議席となる) でもいいような気がします。 ドント方式はどういった点が優れているのでしょうか? 私が例示した方法はどの点が劣っているのでしょうか? また、もっと良いと思う配分方法があれば教えて下さい。 (私の例はあくまでも一例なので、私の例の欠陥を指摘いただくよりも、 他の方法ではなく、なぜドント式がさいようされているのかをメインに、解説頂けるとありがたいです) .

  • エクセルの関数。お願いします!

    任意の桁数で四捨五入するROUND関数についてお願いします。 A1「5678.492」の数値。 (ア)小数点以下を四捨五入しなさい。 (イ)1の位を四捨五入しなさい。 =ROUND(A1,○)の○には何が入るんでしょうか?

  • Excelの関数、四捨五入について

    ご質問があります。 現在Excelで表を作っているのですが、どうしても四捨五入で躓きます。 例) A 1234.56 →四捨五入(ROUND.1) →B 1235 上記のようになるのですが 例) B 1235×0.9 → 1111.1(小数点第一表示) 上記のようになってしまいます。 四捨五入したBのセルに対し0.9をかけているはずなのに 四捨五入を行う前のAに0.9をかけた答えが出てしまうのです。 これの謎が解けず困っています。 どなたかお分かりの方がいましたら宜しくお願い致します。

  • エクセルの関数を複数使いたい

    こんにちは、教えてください エクセルの関数を同時に複数使いたいときはどうしたらよいのでしょうか? 具体的には A1とA2を掛けて1000で割りたものをC1に表示させたいのです。 ただし、 (1)計算をしていないときにはC1に何も表示させたくない。 (2)小数点以下2桁で四捨五入したいのです。 (3)計算式をいったん別のところに表示させず、直接C1にだしたい。 以上の条件をかなえたいのですが、掛け算・割り算の式や、表示の条件を変えるのにIFを使用したり、四捨五入をするのはROUNDを使うのは発想できたのですが、組み合わせ方が分かりません。(表示形式で設定してしまうと、0.20などの際に0.2とはならないので・・・関数を使いたいのです) よろしくお願いします

  • エクセル 関数を教えてください。

    エクセル 関数を教えてください。 数点第一位の値が5のときだけ小数点第二位の値で切り上げか切り捨てかを判断します。 小数点第二位が0のときは切り捨て、1以上のときは切り上げ計算になります。 (例)4.50点→4点 、 4.51点→5点 小数点第一位が5以外の場合は四捨五入と同じ要領です。 ●A1に数字入力、B1に計算式をお願いします。

  • エクセル関数?教えてください。これはどうすればできますか?未熟者です

    A列÷B列の答えの数値を削除と四捨五入し、プラス表示とマイナス表示をしたい。 答えは2パターンになります。 (1)A列÷B列の答え1.091763・・・などとなります。それを小数点一位以上(1.9)を削除し小数点五位(6)を四捨五入して数値で表したいのです。 そして出た答え、小数点以上が(1.)の場合プラス表示とし918で完成させたい。 (2)A列÷B列の答え0.991763・・・などとなります。それを小数点一位以上(0.9)を削除し小数点五位(6)を四捨五入して数値で表したいのです。 そして出た答え、小数点以下(0.)の場合はマイナス表示としと-918で完成です。 うまく説明できませんが、よろしくお願いします。