「StiLL」 デザイン情報217 StiLLコマンド-- レコードデータを横方向に加工する(2)
                             
  【テーマ】
前回(216)ご紹介した処理と同じ処理をボタン一つで実装する方法についてご紹介いたします。
前回同様に以前の加工後のデータを用いて加工前の状態にデータを復元します。
    【方法】
データを振り分ける式を設定しておき、「セルデータコピー(BtCellCopy)」ボタンでコピーします。
    【参考】
表示する部門の列を4つ以上に広げる場合は横に部門を追加します。
 
                 
                             
■ 今回の内容                          
今回はレコードデータから横方向に変換する考え方(2)としてボタン1つで加工する方法をご紹介します。
前々回(215)とは逆に 「(縦)方向のデータを(横)方向に表組加工」 する方法です。
 ・関連バックナンバーは下記をご覧ください。
【バックナンバー 210】 列(横)方向に繰返される項目群を行単位(縦)に加工する
【バックナンバー 215】 列(横)方向に繰返される項目群を行単位(縦)に加工する(2)
【バックナンバー 216】 レコードデータを横方向に加工する(1)
今回の加工の変化
画面の領域
本例では、
赤枠に(DATA)と
名前定義しています。
↑レコードデータのイメージ(第215回加工後)
     横方向の表組に加工(復元)されたイメージ↓
本例ではシステムテンプレートの「DLDATA」シートをコピーして「DLDATA2」として使用しています。
・ポイント
 ・名前定義された元データ範囲(DATA)から振り分ける式をINDEX関数で作成します。
 ・作成した式を「セルデータコピー(BtCellCopy)」ボタンの複数選択を使ってコピーします。
  出力複数選択をチェックして(3.数式)と(11.出力先を値のみコピー)をチェックします
■ ボタンの作成と設定                        
今回使用するStiLLボタンを示します。(下図赤枠)
画面の領域
今回のボタン配置およびセルの式の設定例を示します。(全体図)
上図の青枠(セルE2からI3まで)に基本的な数値を整理しています。(表現上K列まで色付けしています)
同様に茶枠(セルE13からP13まで)に係数およびデータ振分けの式を入力しています。
本例では以前の説明と矛盾なく参照していただけるよう「Sheet1」を残し「DLDATA2」シートに「WORKT」のデータを加工して出力しています。
@セル内容の説明
  セルE3:シート名(DLDATA2)を入力しています。
  セルF3:このシートでのデータ出力開始行(15)を入力しています。
  セルG3:元データの明細数をカウントする式[=COUNTA(WORKT!G15:G10000)]を入力しています。
  セルH3:横に展開する数()を入力しています。
  セルI3:上記の値を使って13行目の式のコピー先範囲を求める式[=E3&"!E"&F3&":P"&G3/H3+F3-1]を入力しています。
Aセル内容の説明
  この13行目に、データを振り分ける式を設定します。
セルE13:データを振り分ける式で参照する行の係数(足場)の式[=INT((ROW()-$F$3)*$H$3)+1]を入力しています。
  この式は@の値を要素にした不変の式です。 以下の式でこの値を参照してデータを横方向に振り分けます。
以降の式は名前定義された(DATA)を使って作成しています。
  セルF13:年度を取り出す式[=IFERROR(INDEX(DATA,$E13,1),"")]を入力しています。
  セルG13:支店名を取り出す式[=IFERROR(INDEX(DATA,$E13,2),"")]を入力しています。
また部門の振り分けは、次のように式を設定します。
(部門1の設定式の例)
セルH13には部門の名称を取り出す式[=IFERROR(INDEX(DATA,$E13,3),"")]を入力しています。
セルI13には部門の計画値を取り出す式[=IFERROR(INDEX(DATA,$E13,4),"")]を入力しています。
セルJ13には部門の実績値を取り出す式[=IFERROR(INDEX(DATA,$E13,5),"")]を入力しています。
以下同様に、式を設定します。
(部門2の設定式の例)
セルK13には部門の名称を取り出す式[=IFERROR(INDEX(DATA,$E13+1,3),"")]を入力しています。
セルL13には部門の計画値を取り出す式[=IFERROR(INDEX(DATA,$E13+1,4),"")]を入力しています。
セルM13には部門の実績値を取り出す式[=IFERROR(INDEX(DATA,$E13+1,5),"")]を入力しています。
(部門3の設定式の例)
セルN13には部門の名称を取り出す式[=IFERROR(INDEX(DATA,$E13+2,3),"")]を入力しています。
セルO13には部門の計画値を取り出す式[=IFERROR(INDEX(DATA,$E13+2,4),"")]を入力しています。
セルP13には部門の実績値を取り出す式[=IFERROR(INDEX(DATA,$E13+2,5),"")]を入力しています。
「セルデータコピー(BtCellCopy)」ボタンの設定
画面の領域
13行目の式の範囲(DLDATA2!E13:P13)をセルI13の値の範囲にコピーします。
貼り付け種類で複数選択をチェックして、3.数式と11.出力先を値のみコピーの2ヶ所をチェックしてコピーします。
  本例ではこのコピーボタン一つでデータを横方向(表組)に加工する処理を実装しています。
  ※支店には3部門のデータが存在していることを前提としています。
■ ボタンの実行                        
1.「ボタン連続実行(BtPush)」ボタンのリストに(画面描画OFF)ボタンと組み合わせて実行することで
   加工する処理速度を向上できます。
   「ボタン連続実行(BtPush)」ボタンへの設定例
■ ご参考までに                        
1.表示する部門の列を4つ以上に広げる場合は横に部門を追加します。
   参考:部門4の名称を取り出す式の例 [(セルQ13)=IFERROR(INDEX(DATA,$E13+3,3),"")]
   ※部門4の範囲まで名前定義(DATA)されている前提
■ 関連するキーワード                        
レコード BtRecordQuery データ加工
(各ボタンの設定内容の詳細はStiLLヘルプをご確認ください)  
Copyright(C) アイエルアイ総合研究所 無断転載を禁じます