HOME
HELP
新規作成
新着記事
ツリー表示
スレッド表示
トピック表示
ファイル一覧
検索
過去ログ
[
最新記事及び返信フォームをトピックトップへ
]
[ トピック内全11記事(1-11 表示) ] <<
0
>>
■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
>>
このトピックに書きこむ
入力内容にタグは利用できません。
他人を中傷する記事は管理者の判断で予告無く削除されます。
半角カナは使用しないでください。文字化けの原因になります。
名前、コメントは必須記入項目です。記入漏れはエラーになります。
入力内容の一部は、次回投稿時の手間を省くためブラウザに記録されます。
削除キーを覚えておくと、自分の記事の編集・削除ができます。
URLは自動的にリンクされます。
記事中に No*** のように書くとその記事にリンクされます(No は半角英字/*** は半角数字)。
使用例:
No123 → 記事No123の記事リンクになります(指定表示)。
No123,130,134 → 記事No123/130/134 の記事リンクになります(複数表示)。
No123-130 → 記事No123〜130 の記事リンクになります(連続表示)。
■お願い−−−−−−−
質問には、できるだけ「OS・桐 Ver」等ご記入願います
将来ここに掲載されました内容を、桐のファイルへ変換予定です。
できましたら、3,500文字以内位での投稿お願い致します
■ご注意(Comment)−−−−−
通常モード・・・通常文章等
図表モード・・・等幅表示(イベントや数字等を記入したとき:
初期設定
)
■
解決しましたら最下段にチェックを入れてください
■
引用文は、最小限に、お願いいたします
Name
/
E-Mail
/
└> 関連するレス記事をメールで受信しますか?
NO
YES
/ アドレス
非公開
公開
Title
/
メッセージ中には下記URLと同じURLを書き込まないで下さい
URL
/
Comment/ 通常モード->
図表モード->
(適当に改行して下さい/半角10000文字以内)
■No15086に返信(ONnojiさんの記事) > 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日より > >
File
/
アップ可能拡張子=> /
.gif
/
.jpg
/
.jpeg
/
.png
/.txt/.lzh/.zip/.mid
圧縮ファイル[lzh,zip]は、事前に解凍してご利用下さい。
1) 太字の拡張子は画像として認識されます。
2) 画像は初期状態で縮小サイズ250×250ピクセル以下で表示されます。
3) 同名ファイルがある、またはファイル名が不適切な場合、
ファイル名が自動変更されます。
4) アップ可能ファイルサイズは1回
100KB
(1KB=1024Bytes)までです。
5) ファイルアップ時はプレビューは利用できません。
6) スレッド内の合計ファイルサイズ:[0/500KB]
残り:[500KB]
パスワード
/
半角小文字で「ケイ・アイ・アール・アイ」を入力
削除キー
/
(半角8文字以内)
解決済み!
BOX/
解決したらチェックしてください!
プレビュー/
Mode/
通常管理
表示許可
Pass/
HOME
HELP
新規作成
新着記事
ツリー表示
スレッド表示
トピック表示
ファイル一覧
検索
過去ログ
-
Child Tree
-
-
Antispam Version
-