「StiLL」 デザイン情報284 StiLLコマンド-- 【データ生成】表の〇印がある対象データを別表から取り込む方法
                             
  【テーマ】
今回はデータ生成の処理で表に〇印を付けた対象のデータを別表から取り込み一連のデータを作成する方法についてご紹介します。
    【方法】
StiLLボタンの「セルデータコピー(BtCellCopy)」ボタンと「Excelデータ抽出 (BtRecordQuery)」ボタンを使います。
    【参考】
セルG12の数式は工夫することで簡素化することが可能です。
明細件数が多い場合は(DispOff 「画面描画OFF」)ボタンを使用することで処理が速くなります。
 
                 
                             
■ 今回の内容                          
下図のチーム表に〇印を入力した作業列に該当する作業区分を別表から取り込んでデータを作成する手順をご紹介いたします。
     (表と作成元データ)
     (作成後のイメージ)
                   ↑ 佐藤班(青枠内)は作業Aと作業Cのデータが作成されます。
・ポイント
1. 最初にセルデータコピーボタンで「Sheet1」シートの作成元データの件数分(本例では9件)で全明細を作成します。
2. 作成した全明細から作業区分が "〇" のデータを抽出することで完成します。(上図:作成後のイメージ参照)
今回の処理は過去のデザイン情報215の仕組みを応用する(列展開数を作成元データの件数に読み替える)ことで実装可能です。
下段ではその手順に沿って説明します。
        ・過去のバックナンバーは以下をご覧ください。
【バックナンバー 215】 列方向に繰返される項目群を行単位に加工する(2)
■ ボタンの作成と設定                        
今回使用するボタンを赤枠で示します。(リボン - StiLL - ボタンテンプレート)
今回の処理全体図およびセルの数式の設定例を以下に示します。
本例ではシステムテンプレート「WORKT」を使用しています。
@セル内容の説明
セルE3にはシート名[WORKT]、F3にはデータの出力開始行[15]を入力しています。(固定)
セルG3には元データの明細数(処理数)を取得する式[=COUNTA(Sheet1!B:B)-1]を入力しています。
セルH3には「Sheet1」シートの作成元データの件数を取得する数式[=COUNTA(Sheet1!H:H)-1]を入力しています。
セルI3には下段12行目の数式をコピーする範囲[=E3&"!E"&F3&":J"&G3*H3+F3-1]を設定する式を入力しています。
        (見出し行を除くため1を引いています)
各項目式の説明(12行目)
セルE12:明細を行方向に展開する基準値(行)の式[=INT((ROW()-$F$3)/$H$3)+1]を入力しています。
セルF12:同様に明細を列方向に展開する基準値(列)の式[=MOD(ROW()-$F$3,$H$3)]を入力しています。
   ↑上記2つの式は固定の式です。【バックナンバー 215】参照
セルG12:〇印を取得する数式を入力しています。(本例での要となる数式です)
             [=INDEX(Sheet1!C:E,E12+1,MATCH(INDEX(Sheet1!H:H,F12+2),Sheet1!C$1:E$1,0))&""]
         1. INDEX(Sheet1!H:H,F12+2)の部分で別表の作成元データの(作業区分)を取得します 例:作業A
         2. 取得した 作業A見出し範囲(Sheet1!C$1:E$1)の何列目にあるかをMATCH関数で求めます 例:1
         3. 求めた列番号 1 で該当行の値をINDEX関数で取得します ・・・ 値が〇印なら対象データ
セルH12:表の(チーム)を取得する式[=INDEX(Sheet1!B:B,E12+1)]を入力します。
セルI12:別表の(作業名)を取得する式[=INDEX(Sheet1!I:I,F12+2)]を入力します。
セルJ12:別表の(作業内容)を取得する式[=INDEX(Sheet1!J:J,F12+2)]を入力します。
        (参照する行の調整として1または2を加算しています)
 ・この12行目に入力した数式群を下段に示すセルデータコピーボタンで、セルI3の範囲にコピーして展開後、
    Excelデータ抽出ボタンで、"〇" のデータ(レコード)を抽出することで作成完了となります。
A「セルデータコピー(BtCellCopy)」ボタンの設定
  設定内容
   1.設定ダイアログを開き下図のように元データ範囲のセル範囲に(WORKT!E12:J12)を入力します。
   2.出力セル位置はセルの値を参照にチェックし(WORKT!I3)を入力します。
   3.貼り付け種類の複数選択をチェックして、3.数式、11.出力先を値のみコピーをチェックします。(赤枠内
      ※ここではボタン見出しを数式展開としています。
B「Excelデータ抽出(BtRecordQuery)」ボタンの設定
  設定内容
   1.設定ダイアログを開き下図のように元データ範囲のセル範囲に(WORKT!E14)を入力します。
   2.検索式範囲にWORKT!G7:G8を入力します。
      ※この検索式で抽出対象が0より大きいデータに絞ります。
   3.出力セル位置は1.と同じ(WORKT!E14)を入力します。
      ※ここではボタン見出しをデータ整備としています。
■ ボタンの実行                        
1.上記2つのボタンを 「ボタン連続実行(BtPush)」 ボタンのリストに設定して実行します。
   「ボタン連続実行(BtPush)」ボタンの設定例
■ ご参考までに                        
1. セルG12の数式は次の工夫で簡素化することが可能です。
   本例では別表の(作業区分)に直接作業名を設定していますが、これをチーム表の作業見出しの列番号に置き換えます。
                                                       例:作業A⇒1、作業B⇒2、作業C⇒3
                             置き換え後のイメージ ⇒
   この置き換えで列番号を求めるMATCH関数(上段セルG12の説明に記載)が不要となり、以下のように簡素化できます。
   置き換え後の数式例:[=INDEX(Sheet1!C:E,E12+1,INDEX(Sheet1!H:H,F12+2))&""]
   ※(作業区分)とは別に新たに(列番号)の列を設けることでも同様となります
2. 明細件数が多い場合は(DispOff 「画面描画OFF」)ボタンを使用することで処理が速くなります。
(各ボタンの設定内容の詳細はStiLLヘルプをご確認ください)  
Copyright(C) アイエルアイ総合研究所 無断転載を禁じます