「StiLL」 デザイン情報215 StiLLコマンド-- 列(横)方向に繰返される項目群を行単位(縦)に加工する(2)
                             
  【テーマ】
以前(210)では「繰返し実行(btLoop)」ボタンによる加工方法をご紹介しましたが、今回は新しい発想とVer.3から機能強化されたBtCellCopyの複数選択を使用することで可能となる、たった1つのボタンで加工する考え方をご紹介します。
    【方法】
足場(係数)の概念を導入した式を展開することでStiLLボタン「セルデータコピー(BtCellCopy)」1つで横方向のデータを縦方向に加工できます。
    【参考】
元データの見出しを除く範囲に(DATA)と名前を定義した場合は式を簡素化でき統一感も出ます。
OFFSET関数で項目式を設定することもできます。
 
                 
                             
■ 今回の内容                          
以前のご紹介例と同様に列(横:C〜K列)方向に3回繰返される項目群を行(縦)方向のデータに加工する考え方をご紹介します。
 ・バックナンバー210は下記をご覧ください。
【バックナンバー 210】 列(横)方向に繰返される項目群を行単位(縦)に加工する
画面の領域
画面の領域
加工後のイメージ →
本例ではシステムテンプレートの「WORKT」シートを使用しています。
・ポイント
 ・足場という加工時の行/列の拠りどころを取り入れた式でデータの参照先を制御します。(加工後は不要)
 ・「BtCellCopy」の複数選択機能で(数式)(出力先を値のみコピー)の順でコピーします。
■ ボタンの作成と設定                        
今回使用するStiLLボタンを示します。(下図赤枠)
画面の領域
今回のボタン配置およびセルの式の設定例を示します。
画面の領域
予め各セル(項目式、検索式等を含む)を設定しておきます。
本例では「WORKT」シートに「Sheet1」のデータを加工して出力します。
項目名の年度はSheet1のA列、支店名はB列、また部門・計画・実績はC列からK列のデータを縦列に出力します。
@セル内容の説明
セルE3にはシート名[WORKT]、F3にはデータの出力開始行[15]、H3には列の展開数[3]を入力しています。
セルG3には元データの行数を取得する式[=COUNTA(Sheet1!A:A)-1]を入力しています。
セルI3には13行目の式(後述)をコピーする範囲[=E3&"!E"&F3&":K"&G3*H3+F3-1]を設定する式を入力しています。
 ・この式は上記のセルE3、F3、G3、H3の値を使って作成できます。
 ・本例でのデータ出力範囲はE列からK列なので固定値で設定しています。
各項目式の説明(13行目)
セルE13:今回のポイントである足場(行)の式[=INT((ROW()-$F$3)/$H$3)+1]を入力しています。
 ・この式は不変[=INT((ROW()-出力開始行)/列展開数)+1]ですのでおまじない(公式)として覚えておくと便利です。
セルF13:同様に今回のポイントである足場(列)の式[=MOD(ROW()-$F$3,$H$3)]を入力しています。
 ・この式も不変[=MOD(ROW()-出力開始行,列展開数)]です。
※セルE13の式で行の変化を、F13の式で列の変化を算出して以降の式が参照するデータ位置を制御します。
セルG13:元データの年度を出力する式[=INDEX(Sheet1!A:A,$E13+1)]を入力します。
セルH13:元データの支店名を出力する式[=INDEX(Sheet1!B:B,$E13+1)]を入力します。
セルI13:元データの部門名を出力する式[=INDEX(Sheet1!$C:$K,$E13+1,$F13+1+2*F13)]を入力します。
セルJ13:元データの計画値を出力する式[=INDEX(Sheet1!$C:$K,$E13+1,$F13+2+2*F13)]を入力します。
セルK13:元データの実績額を出力する式[=INDEX(Sheet1!$C:$K,$E13+1,$F13+3+2*F13)]を入力します。
※上記3つの式のは本例のように列展開がセット(群)の場合のセット内での位置を指定しています。
  同様にセットの展開時は同じ項目が隣接せず差分が同じ等差数列となることからその差分式として2*F13を加えます。
A「セルデータコピー(BtCellCopy)」ボタンの設定
  設定内容
   1.設定ダイアログを開き下図のように元データ範囲のセル範囲欄に(WORKT!E13:K13)を入力します。
   2.出力セル位置はセルの値を参照にチェックし(WORKT!I3)を入力します。
   3.貼り付け種類の複数選択をチェックして、3.数式、11.出力先を値のみコピーをチェックします。(赤枠内
      ※ここではボタンの見出しをデータ加工としています。
   4.OKボタンでダイアログを閉じて設定完了です。
■ ボタンの実行                        
1.上段で設定した「セルデータコピー(BtCellCopy)」ボタンをクリックするこで冒頭の加工後イメージが出力されます。
2.また「ボタン連続実行(BtPush)」ボタンのリストに(画面描画OFF)ボタンと組み合わせて実行することで、
   加工する処理速度を向上できます。
   「ボタン連続実行(BtPush)」ボタンへの設定例
画面の領域
■ ご参考までに                        
1.元データの見出しを除く範囲に(DATA)と名前を定義した場合は式を簡素化でき統一感が出ます。
セルG13:元データの年度を出力する式[=INDEX(DATA,$E13,1)]
セルH13:元データの支店名を出力する式[=INDEX(DATA,$E13,2)]
セルI13:元データの部門名を出力する式[=INDEX(DATA,$E13,3+$F13+2*F13)]
セルJ13:元データの計画値を出力する式[=INDEX(DATA,$E13,4+$F13+2*F13)]
セルK13:元データの実績額を出力する式[=INDEX(DATA,$E13,5+$F13+2*F13)]
2.OFFSET関数で項目式を設定することもできます。
独立した項目のデータを縦に展開する式
セルG13:元データの年度を出力する式は[=OFFSET(Sheet1!$A$1,$E13,0)]となります。
セルH13:元データの支店名を出力する式は[=OFFSET(Sheet1!$B$1,$E13,0)]となります。
セット(群)で繰り返すデータを縦に展開する式
セルI13:元データの部門名を出力する式は[=OFFSET(Sheet1!$C$1,$E13,$F13+2*F13)]となります。
セルJ13:元データの計画値を出力する式は[=OFFSET(Sheet1!$D$1,$E13,$F13+2*F13)]となります。
セルK13:元データの実績額を出力する式は[=OFFSET(Sheet1!$E$1,$E13,$F13+2*F13)]となります。
※OFFSET関数では任意のセル位置を基準に式を作成できるので元データの開始行補正や群の位置指定の式は不要です。
(各ボタンの設定内容の詳細はStiLLヘルプをご確認ください)  
Copyright(C) アイエルアイ総合研究所 無断転載を禁じます