HOME HELP 新規作成 新着記事 ツリー表示 スレッド表示 トピック表示 ファイル一覧 検索 過去ログ

[ 最新記事及び返信フォームをトピックトップへ ]

■15072 / inTopicNo.1)  中央値について
  
□投稿者/ キリマンジャロ -(2025/08/07(Thu) 12:51:48)
    WIN11、桐10S使用です
    いつもお世話になっております

    項目    データ型
    部品コード  文字列
    加工数   通貨


    表   部品コード    加工数

    1    1200      6000

    2    1200      7000

    3    1200      4000

    4    1200      10000


    とデータがあります。このデータから部品コードごとに、加工数の中央値を出したいと考えております。
    部品コードによって、レコードが奇数や偶数になっています。
    中央値を簡単に出す方法があれば教えていただけますでしょうか。
    よろしくお願いいたします。
      

引用返信 [メール受信/OFF] 削除キー/
■15074 / inTopicNo.2)  Re[1]: 中央値について
□投稿者/ ONnoji -(2025/08/07(Thu) 16:25:55)
    2025/08/07(Thu) 16:27:23 編集(投稿者)

    > 表
    >
    > 1
    >
    > 2
    >
    > 3
    >
    > 4

    ↑これは 1.tbx 2.tbx 3.tbx 4.tbx という具合に、4個の表(.tbx)をあらわしているのでしょうか???

    ちなみに、もしも、そうならば、単に数字だけ書かれると、項目の値かと勘違いされますゾ!。
                   ・・・・・・・・・・・・・・・・・・・・・・・・・

    つまり、別々の4個の表の値を調べて[中央値]を求めるということなのでしょうかね??

    [中央値]は以下を参考にする。

    コチラ
     ↓
     中小企業のデータ分析・活用支援ならKUROCO
     ホーム > KUROCO大学 > データ分析 > 中央値とは データ分析の基本を分かりやすく解説
     https://kuroco.team/blog-data-median/

    そうそう、一括処理( .cmx )で行うのでしたね。アハハハha (@^^)/~~~
引用返信 [メール受信/OFF] 削除キー/
■15075 / inTopicNo.3)  Re[2]: 中央値について
□投稿者/ うにん -(2025/08/07(Thu) 20:03:24)
    左端のは、行番号だと思いますけど
引用返信 [メール受信/OFF] 削除キー/
■15076 / inTopicNo.4)  Re[3]: 中央値について
□投稿者/ ONnoji -(2025/08/07(Thu) 20:39:06)
    2025/08/07(Thu) 20:41:09 編集(投稿者)

    No15075に返信(うにんさんの記事)
    > 左端のは、行番号だと思いますけど

    なるほど!。(^^♪

    それならば、読み込みする手間が省けるので良いですね。

    どうもありがd。(^^ok

    p.s.

    > 行番号
    >
    > 1
    >
    > 2
    >
    > 3
    >
    > 4

    ↑こう書いていれば一目瞭然だったのにねぇ〜。アハハハha

引用返信 [メール受信/OFF] 削除キー/
■15077 / inTopicNo.5)  Re[4]: 中央値について
□投稿者/ ONnoji -(2025/08/07(Thu) 20:46:21)
    以下はエクセルの場合ですが、桐でも段取りは同じです。

    【一部転載】
    「マネーフォワード クラウド」> 業務効率化の基礎知識 > エクセルで中央値を出す関数は?スプレッドシートの方法も解説
    https://biz.moneyforward.com/work-efficiency/basic/14823/

    ■エクセルで関数を使わずに中央値を出す方法

    エクセルでは、関数を使わずに中央値を算出することも可能です。
    この方法は、特に関数に不慣れな方にとって、直感的でわかりやすいです。
    単純に数値の並びを視覚的に確認し、中央値を特定することができます。

    まず、データが入力されているセルを確認します。中央値を求めるためには、数値が整然と並んでいる必要があります。
    データ系列がバラバラの順番(無作為)になっている場合、正しい中央値を算出することは難しくなるため、
    初めにデータを昇順または降順にソートすることをお勧めします。

    ―データのソート方法

    次に、データをソートする手順を解説します。
    この作業を行うことで、中央値を視覚的に見つけやすくすることができます。

    まず、ソートを行いたいデータを選択します。
    その後、エクセルのメニューから「データ」タブを開き、「並べ替え」機能を選択します。ここでは、昇順を選ぶことをお勧めします。
    この操作により、最小値から最大値までの順番にデータが整列します(Macの場合は、「データ」タブ内の「昇順」または「降順」ボタンをクリックすると並べ替えができます)。

    ―中央値の特定方法

    データがソートされたら、中央値を特定するための作業に移ります。
    データの個数が奇数の場合、真ん中に位置する数値が中央値となります。
    具体的には、ソート後のデータ行数(データが何個あるか)を確認し、センターの位置にある数値(真ん中にある数値)を見つけます。

    一方、データの個数が偶数の場合は、中央の2つの数値(真ん中に位置する2つの数)の平均を取ることで中央値を算出します。
    この操作も簡単に行えますので、安心してください。
    例えば、データの個数が6であれば、3番目と4番目の数値を見つけ、その合計を2で割ります。これによって正確な中央値が導き出されます。

    以上の方法により、関数を使用せずにエクセルで簡単に中央値を算出することが可能です。
    実際にデータを扱うときに、ぜひこの方法を活用してみてください。


引用返信 [メール受信/OFF] 削除キー/
■15078 / inTopicNo.6)  Re[5]: 中央値について
□投稿者/ ONnoji -(2025/08/07(Thu) 21:09:29)
    2025/08/07(Thu) 21:18:12 編集(投稿者)

    「マネーフォワード クラウド」> 業務効率化の基礎知識 > エクセルで中央値を出す関数は?スプレッドシートの方法も解説
    https://biz.moneyforward.com/work-efficiency/basic/14823/

    > データがソートされたら、中央値を特定するための作業に移ります。
    > データの個数が奇数の場合、真ん中に位置する数値が中央値となります。
    > 具体的には、ソート後のデータ行数(データが何個あるか)を確認し、センターの位置にある数値(真ん中にある数値)を見つけます。
    >
    > 一方、データの個数が偶数の場合は、中央の2つの数値(真ん中に位置する2つの数)の平均を取ることで中央値を算出します。
    > この操作も簡単に行えますので、安心してください。
    > 例えば、データの個数が6であれば、3番目と4番目の数値を見つけ、その合計を2で割ります。これによって正確な中央値が導き出されます。

    ↑上のように、項目[部品コード]の部品別の登録個数を求める必要があります。

    ⇒ 行集計で #件数( [部品コード] ) で求められます。

    そして、項目[登録個数]に集計結果で置換したとすれば

    ⇒ 項目計算式;#mod( [登録個数], 2 )

    例えば、項目名[登録数が奇数]に↑の式をセットすれば、奇数ならば1イチ、偶数ならば0ぜロが入ります。

    ここまで準備すれば、あとは昇順に並べたレコードを移動して、

    ⇒ 項目名[登録数が奇数]が1イチならば、#切り上げ([登録個数]/ 2, 0 )番めのレコードの[加工数]の値が[中央値]

    ⇒ 項目名[登録数が奇数]が0ゼロならば、

     #切り捨て([登録個数]/ 2, 0 )番めのレコードの[加工数]と、#切り上げ([登録個数]/ 2, 0 )番めのレコードの[加工数]の合算

     を2で割った値が[中央値]

    ザクっとですが、こんな感じだと思いますよ。(^^ゞ

    まっ、順番にステップを踏んでいけば求められるものですが、手順と手間は多いにありますけれどね・・・(^^ゞ
       ・・・・・・・・・・・・・・・・・・・・・・・  ・・・・・・・・・・・・・・・・

    グッドラック (@^^)/~~~

    p.s.

    なお、当方はすべてを桐で実際に確かめたわけではありません。

    従って、#切り捨て関数等の使い方が間違っていたらごめんなさいね。

引用返信 [メール受信/OFF] 削除キー/
■15083 / inTopicNo.7)  Re[1]: 中央値について
□投稿者/ うにん -(2025/08/13(Wed) 17:57:54)
    文字列関数とか配列変数を使って1パスか2パスでできないかと思ったけど、文字長や要素数の制限が色々ありすぎて実際のデータには使えないかなあと思いました。
引用返信 [メール受信/OFF] 削除キー/
■15084 / inTopicNo.8)  Re[2]: 中央値について
□投稿者/ ONnoji -(2025/08/13(Wed) 20:40:46)
    2025/08/14(Thu) 21:10:24 編集(投稿者)
    2025/08/13(Wed) 21:05:07 編集(投稿者)

    > 文字列関数とか配列変数を使って1パスか2パスでできないかと思ったけど、
    > 文字長や要素数の制限が色々ありすぎて実際のデータには使えないかなあと思いました。

    ↑これいいヒントですね。(^^♪

     手続き実行 procedureName( "6000,7000,4000", &result )

    こんなイメージかなぁ〜と思いました。アハハハha

     ◇ ◇ ◇ ◇ ◇ ◇ ◇

    サンプルを作ってみました。

    数日を目途に削除しますのでダウンロードはお早めに願います。

    追記:2025-08-14

    新たに元データから併合:連結でデータを集計する方式のサンプルを用意しましたので、この投稿のサンプルは削除しました。(^^ok
       ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

     ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

    部品コード 加工数
    ----------------
    部品A  6000
    部品A  7000
    部品A  4000
    部品A  10000
    部品B  7000
    部品B  4000
    部品B  10000

    ■トレース

     :&dimMax : 4  &oddNumber : 0  &pcsList : 6000,7000,4000,10000
     :ソート前  1  &pcsListDim[ &i ] : 6000
     :ソート前  2  &pcsListDim[ &i ] : 7000
     :ソート前  3  &pcsListDim[ &i ] : 4000
     :ソート前  4  &pcsListDim[ &i ] : 10000
     :
     :ソート後  1  &pcsListDim[ &i ] : 4000
     :ソート後  2  &pcsListDim[ &i ] : 6000
     :ソート後  3  &pcsListDim[ &i ] : 7000
     :ソート後  4  &pcsListDim[ &i ] : 10000
     :
     :偶数  &dimMax : 4  &targetDimNumPrimary : 2  &targetDimNumSecondary : 3
     :&targetDimNumPrimary : 2  &targetDimNumSecondary : 3  &result : 6500 ← 中央値
     :                            ・・・・・・・・・・・・
     :&dimMax : 3  &oddNumber : 1  &pcsList : 7000,4000,10000
     :ソート前  1  &pcsListDim[ &i ] : 7000
     :ソート前  2  &pcsListDim[ &i ] : 4000
     :ソート前  3  &pcsListDim[ &i ] : 10000
     :
     :ソート後  1  &pcsListDim[ &i ] : 4000
     :ソート後  2  &pcsListDim[ &i ] : 7000
     :ソート後  3  &pcsListDim[ &i ] : 10000
     :
     :奇数  &dimMax : 3  &targetDimNum : 2  &result : 7000 ← 中央値
     :                     ・・・・・・・・・・・・


    ■test_中央値.kex

    名札  メイン



    手続き定義開始 cmd中央値を求めるClick( )
     変数宣言 自動,文字列{ &title = "cmd中央値を求めるClick( )" }
     変数宣言 自動,文字列{ &partsCode }
     変数宣言 自動,文字列{ &pcsList }
     変数宣言 自動,文字列{ &comma = #jis( #hex("2C") ) }
     変数宣言 自動,整数 { &multTblNum }

     多重化
     &multTblNum = #is表

     解除 *   /* 多重化した直後はすべて解除されていますが念のために */
     並べ替え { [部品コード]昇順 }

     ジャンプ 行番号 = 先頭行
     &partsCode = [部品コード]
     繰り返し ( .not #eof )

      &pcsList = &pcsList + #cond( &pcsList <> #u, &comma ) + #str( [加工数] )
      **トレース出力 _&pcsList

      ジャンプ 行番号 = 次行 /* これを忘れると無限ループになるよ */
      if ( &partsCode <> [部品コード] )
       **メッセージボックス &title, &partsCode + ":" + &pcsList, アイコン = i, ボタン指定 = 1

       手続き実行 prc中央値を求める( &partsCode, &pcsList )


       &partsCode = [部品コード]
       &pcsList  = #u
      end
     繰り返し終了

     終了 表 &multTblNum

    手続き定義終了

    手続き定義開始 prcSort(参照 数値 &dim[] )
     変数宣言 自動,数値{ &s, &fin, &n, &i, &numA, &numB }

     &n = #配列要素数( "dim" )
     &s = 2
     繰り返し

      &fin = &s
      &s  = &n
      繰り返し &i = &n, &fin, -1

       &numA = &dim[ &i ]    /* 数値の場合は &numA */
       &numB = &dim[ &i - 1 ]  /* 数値の場合は &numB */

       if ( &numA < &numB )   /* 数値の場合は &numA < &numB */
        &dim[ &i - 1 ] = &numA /* 数値の場合は &numA */
        &dim[ &i ]   = &numB /* 数値の場合は &numB */
        &s = &i
       end
      繰り返し終了

      if ( &s = &n )
       繰り返し中止
      end
     繰り返し終了

     **<参考書籍>
     **現代データ構造とプログラム技法 萩原宏・西原清一 著 オーム社刊 ISBN4-274-12831-8
    手続き定義終了

    手続き定義開始 prc中央値を求める( 文字列 &partsCode, 文字列 &pcsList )
     変数宣言 自動,文字列{ &title = "prc中央値を求める( )" }
     変数宣言 自動,文字列{ &comma = #jis( #hex("2C") ) }
     変数宣言 自動,整数 { &dimMax }
     変数宣言 自動,整数 { &oddNumber } /* 奇数ならば1 偶数ならば0 */
     変数宣言 自動,整数 { &i, &loop, &step = 1 }
     変数宣言 自動,整数 { &targetDimNum }
     変数宣言 自動,整数 { &targetDimNumPrimary, &targetDimNumSecondary }
     変数宣言 自動,数値 { &result }

     **メッセージボックス &title, &partsCode + ":" + &pcsList, アイコン = i, ボタン指定 = 1

     &dimMax = 1 + #文字数( &pcsList ) - #文字数( #文字置換( &pcsList, &comma, #u ) )
     &oddNumber = #mod( &dimMax, 2 )
     トレース出力 _&dimMax, "  ", _&oddNumber, "  ", _&pcsList

     変数宣言 自動,数値{ &pcsListDim[ &dimMax ] }
     &loop = &dimMax
     繰り返し &i = 1, &loop, &step
      &pcsListDim[ &i ] = #num( #対応文字列( &pcsList, &i ) )
      トレース出力 "ソート前", "  ", &i, "  ", _&pcsListDim[ &i ]
     繰り返し終了
     トレース出力 ""

     手続き実行 prcSort( &pcsListDim) /* 配列変数:&pcsListDim を昇順でソートする */

     &loop = &dimMax
     繰り返し &i = 1, &loop, &step
      トレース出力 "ソート後", "  ", &i, "  ", _&pcsListDim[ &i ]
     繰り返し終了
     トレース出力 ""

     if ( &oddNumber ) /* &oddNumber は1(イチ)または0(ゼロ)の論理値なので &oddNumber = 1 と書かなくて良い */

      ** 奇数
      &targetDimNum = #切り上げ( &dimMax / 2, 0 )
      &result    = &pcsListDim[ &targetDimNum ]
      トレース出力 "奇数", "  ", _&dimMax, "  ", _&targetDimNum, "  ", _&result
      トレース出力 ""

     else

      ** 偶数
      &targetDimNumPrimary  = &dimMax / 2
      &targetDimNumSecondary = &targetDimNumPrimary + 1
      &result    = ( &pcsListDim[ &targetDimNumPrimary ] + &pcsListDim[ &targetDimNumSecondary ] ) / 2
      トレース出力 "偶数", "  ", _&dimMax, "  ", _&targetDimNumPrimary, "  ", _&targetDimNumSecondary
      トレース出力 _&targetDimNumPrimary, "  ", _&targetDimNumSecondary, "  ", _&result
      トレース出力 ""
     end

     メッセージボックス &title, &partsCode + "の中央値:" + #str( &result ), アイコン = i, ボタン指定 = 1

    手続き定義終了


    p.s.

    なお、文字列型の配列変数のソートについては拙作webページをご覧ください。

    コチラ
     ↓
    桐の釣魚大全のトップ > フォームアプリケーション教書 第2部
    https://silicon7565.cloudfree.jp/guide/guide_Part2.htm#section28-1
    28.1 配列変数のソート
    ■配列変数をソートする方法 ― 桐のイベント道場 かっこうログ 2002年06月03日より

引用返信 [メール受信/OFF] 削除キー/
■15085 / inTopicNo.9)  Re[3]: 中央値について
□投稿者/ ONnoji -(2025/08/13(Wed) 23:55:07)
    そうそう、値が1つだったらどうするのかな??

    それでも[中央値]と呼ぶのでしょうかね。アハハハ。

    こんな感じでよさそうですが?・・・

     ◇ ◇ ◇ ◇ ◇

    手続き定義開始 prc中央値を求める( 文字列 &partsCode, 文字列 &pcsList )
     変数宣言 自動,文字列{ &title = "prc中央値を求める( )" }
     変数宣言 自動,文字列{ &comma = #jis( #hex("2C") ) }
     変数宣言 自動,整数 { &dimMax }
     変数宣言 自動,整数 { &oddNumber } /* 奇数ならば1 偶数ならば0 */
     変数宣言 自動,整数 { &i, &loop, &step = 1 }
     変数宣言 自動,整数 { &targetDimNum }
     変数宣言 自動,整数 { &targetDimNumPrimary, &targetDimNumSecondary }
     変数宣言 自動,数値 { &result }

     **メッセージボックス &title, &partsCode + ":" + &pcsList, アイコン = i, ボタン指定 = 1

     &dimMax = 1 + #文字数( &pcsList ) - #文字数( #文字置換( &pcsList, &comma, #u ) )
     &oddNumber = #mod( &dimMax, 2 )
     トレース出力 _&dimMax, "  ", _&oddNumber, "  ", _&pcsList

     変数宣言 自動,数値{ &pcsListDim[ &dimMax ] }
     &loop = &dimMax
     繰り返し &i = 1, &loop, &step
      &pcsListDim[ &i ] = #num( #対応文字列( &pcsList, &i ) )
      トレース出力 "ソート前", "  ", &i, "  ", _&pcsListDim[ &i ]
     繰り返し終了
     トレース出力 ""

     手続き実行 prcSort( &pcsListDim) /* 配列変数:&pcsListDim を昇順でソートする */

     &loop = &dimMax
     繰り返し &i = 1, &loop, &step
      トレース出力 "ソート後", "  ", &i, "  ", _&pcsListDim[ &i ]
     繰り返し終了
     トレース出力 ""

     if ( &oddNumber ) /* &oddNumber は1(イチ)または0(ゼロ)の論理値なので &oddNumber = 1 と書かなくて良い */

      if ( &dimMax > 1 )

       ** 奇数
       &targetDimNum = #切り上げ( &dimMax / 2, 0 )
       &result    = &pcsListDim[ &targetDimNum ]
       トレース出力 "奇数", "  ", _&dimMax, "  ", _&targetDimNum, "  ", _&result
       トレース出力 ""

      else

       &result    = &pcsListDim[ 1 ]
       トレース出力 "奇数", "  ", _&dimMax, "  ", _&targetDimNum, "  ", _&result
       トレース出力 ""

      end

     else

      ** 偶数
      &targetDimNumPrimary  = &dimMax / 2
      &targetDimNumSecondary = &targetDimNumPrimary + 1
      &result    = ( &pcsListDim[ &targetDimNumPrimary ] + &pcsListDim[ &targetDimNumSecondary ] ) / 2
      トレース出力 "偶数", "  ", _&dimMax, "  ", _&targetDimNumPrimary, "  ", _&targetDimNumSecondary
      トレース出力 _&targetDimNumPrimary, "  ", _&targetDimNumSecondary, "  ", _&result
      トレース出力 ""
     end

     メッセージボックス &title, &partsCode + "の中央値:" + #str( &result ), アイコン = i, ボタン指定 = 1

    手続き定義終了


引用返信 [メール受信/OFF] 削除キー/
■15086 / inTopicNo.10)  Re[4]: 中央値について
□投稿者/ ONnoji -(2025/08/14(Thu) 10:32:04)
    2025/08/17(Sun) 15:40:32 編集(投稿者)

    > 手続き実行 procedureName( "6000,7000,4000", &result )

    このイメージで、併合の[連結]を使って加工数リストを作成しました。(^^♪

    添付ファイルがあります。

    解凍すると4つのファイルがあります

     test2_参照表.tbx
     test2_中央値.kex
     test2_中央値.tbx
     test2_中央値.wfx ← コマンドボタンを実行してください

    数日を目途に削除しますのでダウンロードはお早めに願います。

     ◇ ◇ ◇ ◇

    ■ test2_参照表.tbx

    項目番号 項目名  データ型 項目計算式
    1    部品コード 文字列  
    2    加工数  数値  
    3    作業用  文字列  "," + #str( [加工数] )

    部品コード 加工数  作業用
    --------------------------
    部品A   6000  ,6000
    部品A   7000  ,7000
    部品A   4000  ,4000
    部品A   10000  ,10000
    部品B   7000  ,7000
    部品B   4000  ,4000
    部品B   10000  ,10000
    部品C    500  ,500


    ■ test2_中央値.tbx

    項目番号 項目名   データ型 項目計算式
    1    部品コード  文字列  
    2    連結リスト 文字列  
    3    中央値   数値

    部品コード 連結リスト       中央値
    ----------------------------------------
    部品A  ,6000,7000,4000,10000   6500
    部品B  ,7000,4000,10000      7000
    部品C  ,500            500

    ※このデータはフォームの[中央値を求める]ボタンを実行した結果の値

    ■ test2_中央値.wfx

    フォーム
     ├ ファミリ
     ├ ワークスペース
     ├ フォーム操作バー
     ├ フォームヘッダ部
     │ ├ cmd中央値を求める ← コマンドボタンを実行してください
     │ ├ a
     │ ├ lbl部品コード
     │ ├ lbl中央値
     │ └ lbl連結リスト
     └ フォーム明細部
       ├ 行セレクタ
       ├ txt部品コード
       ├ txt中央値
       └ txt連結リスト

     オブジェクト名: cmd中央値を求める
     標題     : 中央値を求める

      機能名   機能パラメータリスト
     1 表示
     2 手続き実行 cmd中央値を求めるClick
     3 なし
     4 なし


    ■ test2_中央値.kex

    名札  メイン



    手続き定義開始 prcSort(参照 数値 &dim[] )
     変数宣言 自動,数値{ &s, &fin, &n, &i, &numA, &numB }

     &n = #配列要素数( "dim" )
     &s = 2
     繰り返し

      &fin = &s
      &s  = &n
      繰り返し &i = &n, &fin, -1

       &numA = &dim[ &i ]    /* 数値の場合は &numA */
       &numB = &dim[ &i - 1 ]  /* 数値の場合は &numB */

       if ( &numA < &numB )   /* 数値の場合は &numA < &numB */
        &dim[ &i - 1 ] = &numA /* 数値の場合は &numA */
        &dim[ &i ]   = &numB /* 数値の場合は &numB */
        &s = &i
       end
      繰り返し終了

      if ( &s = &n )
       繰り返し中止
      end
     繰り返し終了

     **<参考書籍>
     **現代データ構造とプログラム技法 萩原宏・西原清一 著 オーム社刊 ISBN4-274-12831-8
    手続き定義終了

    手続き定義開始 cmd中央値を求めるClick( )
     変数宣言 自動,文字列{ &title = "cmd中央値を求めるClick( )" }
     変数宣言 自動,文字列{ &targetTbl }
     変数宣言 自動,整数 { &status }

     解除 *
     行削除 *, 圧縮

     &targetTbl = #一括パス名 + "test2_参照表.tbx"
     併合  &targetTbl, 両方, 編集表 = する, 終了状態 = &status, { [部品コード]照合[部品コード],[連結リスト]連結[作業用] }
     **戻り値 説明
     ** 1   正常に終了した
     ** 0   共有違反以外のエラーが発生した
     **-2   他の利用者が置換や併合などの処理を実行中(ファイル排他)
     トレース出力 _&status, "  ", _&targetTbl

     if ( &status = 1 )
      手続き実行 prc中央値を求める( )
     else
      メッセージボックス &title, "[併合]コマンドの実行に失敗しました:終了状態 = " + #str( &status ), アイコン = e, ボタン指定 = 1
     end

    手続き定義終了

    手続き定義開始 prc中央値を求める( )
     変数宣言 自動,文字列{ &title = "prc中央値を求める( )" }
     変数宣言 自動,数値 { &result }

     解除 *
     ジャンプ 行番号 = 先頭
     繰り返し ( .not #eof )

      手続き実行 prc中央値の計算( [部品コード], #sstr([連結リスト], 2 ), &result ) /* #sstr([連結リスト], 2 ) は、先頭のコンマ(,)が不要のため */
      行訂正 [中央値] = &result

      ジャンプ 行番号 = 次行 /* これを忘れると無限ループになるよ */
     繰り返し終了

    手続き定義終了

    手続き定義開始 prc中央値の計算( 文字列 &partsCode, 文字列 &pcsList, 参照 数値 &result )
     変数宣言 自動,文字列{ &title = "prc中央値の計算( )" }
     変数宣言 自動,文字列{ &comma = #jis( #hex("2C") ) }
     変数宣言 自動,整数 { &dimMax }
     変数宣言 自動,整数 { &oddNumber } /* 奇数ならば1 偶数ならば0 */
     変数宣言 自動,整数 { &i, &loop, &step = 1 }
     変数宣言 自動,整数 { &targetDimNum }
     変数宣言 自動,整数 { &targetDimNumPrimary, &targetDimNumSecondary }

     **メッセージボックス &title, &partsCode + ":" + &pcsList, アイコン = i, ボタン指定 = 1

     &dimMax = 1 + #文字数( &pcsList ) - #文字数( #文字置換( &pcsList, &comma, #u ) )
     &oddNumber = #mod( &dimMax, 2 )
     トレース出力 _&dimMax, "  ", _&oddNumber, "  ", _&pcsList

     変数宣言 自動,数値{ &pcsListDim[ &dimMax ] }
     &loop = &dimMax
     繰り返し &i = 1, &loop, &step
      &pcsListDim[ &i ] = #num( #対応文字列( &pcsList, &i ) )
      トレース出力 "ソート前", "  ", &i, "  ", _&pcsListDim[ &i ]
     繰り返し終了
     トレース出力 ""

     手続き実行 prcSort( &pcsListDim) /* 配列変数:&pcsListDim を昇順でソートする */

     &loop = &dimMax
     繰り返し &i = 1, &loop, &step
      トレース出力 "ソート後", "  ", &i, "  ", _&pcsListDim[ &i ]
     繰り返し終了
     トレース出力 ""

     if ( &oddNumber ) /* &oddNumber は1(イチ)または0(ゼロ)の論理値なので &oddNumber = 1 と書かなくて良い */

      ** 奇数
      if ( &dimMax > 1 )

       &targetDimNum = #切り上げ( &dimMax / 2, 0 )
       &result    = &pcsListDim[ &targetDimNum ]
       トレース出力 "奇数", "  ", _&dimMax, "  ", _&targetDimNum, "  ", _&result
       トレース出力 ""

      else

       &result    = &pcsListDim[ 1 ]
       トレース出力 "奇数", "  ", _&dimMax, "  ", _&targetDimNum, "  ", _&result
       トレース出力 ""

      end

     else

      ** 偶数
      &targetDimNumPrimary  = &dimMax / 2
      &targetDimNumSecondary = &targetDimNumPrimary + 1
      &result    = ( &pcsListDim[ &targetDimNumPrimary ] + &pcsListDim[ &targetDimNumSecondary ] ) / 2
      トレース出力 "偶数", "  ", _&dimMax, "  ", _&targetDimNumPrimary, "  ", _&targetDimNumSecondary
      トレース出力 _&targetDimNumPrimary, "  ", _&targetDimNumSecondary, "  ", _&result
      トレース出力 ""
     end

     メッセージボックス &title, &partsCode + "の中央値:" + #str( &result ), アイコン = i, ボタン指定 = 1

    手続き定義終了

    p.s.

    なお、文字列型の配列変数のソートについては拙作webページをご覧ください。

    コチラ
     ↓
    桐の釣魚大全のトップ > フォームアプリケーション教書 第2部
    https://silicon7565.cloudfree.jp/guide/guide_Part2.htm#section28-1
    28.1 配列変数のソート
    ■配列変数をソートする方法 ― 桐のイベント道場 かっこうログ 2002年06月03日より


引用返信 [メール受信/OFF] 削除キー/
■15087 / inTopicNo.11)  Re[5]: 中央値について
□投稿者/ キリマンジャロ -(2025/08/20(Wed) 13:41:26)
    うにんさん、ONnojiさんありがとうございます。

    アドバイスを頂いて、中央値の値を求めることが簡単になりデータの集計がかなり楽になりました。
    また、質問させていただくかと思いますが、よろしくお願いします!
解決済み!
引用返信 [メール受信/OFF] 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

Mode/  Pass/

HOME HELP 新規作成 新着記事 ツリー表示 スレッド表示 トピック表示 ファイル一覧 検索 過去ログ

- Child Tree -
- Antispam Version -