「StiLL」 デザイン情報286 StiLLコマンド-- 【データ配置】データを任意の行間隔に配置する方法
                             
  【テーマ】
データを行の等間隔に配置しようとして苦労したことはありませんか?
今回は取得したデータを任意の行間隔に配値する方法についてご紹介します。
    【方法】
StiLLボタンの「セルデータコピー(BtCellCopy)」ボタン1つの使用で実装できます。
    【参考】
セルH3の設定値を変更することで任意の行間隔にデータを配置することができます。
本処理を(Excelデータ取得「BtMerge」)セルリンクボタンで行うことが可能です。
 
                 
                             
■ 今回の内容                          
下表のデータを任意の行間隔(ここでは3行ごと [2行置き])に配置する方法をご紹介いたします。
     (元データ)                               (実行結果のイメージ)
・ポイント
1. セルデータコピーボタンで「Sheet1」シートのデータの件数(本例では5) × 行間隔(本例では3) の行範囲に数式をコピーします。
2. コピーする数式では、以下に記載の(列)の値が0の時にデータを表示する数式とします。
今回の処理は過去のデザイン情報215の仕組みを応用する(列展開数を配置行の間隔に置き換える)ことで実装可能です。
下段ではその手順に沿って説明します。
        ・過去のバックナンバーは以下をご覧ください。
【バックナンバー 215】 列方向に繰返される項目群を行単位に加工する(2)
■ ボタンの作成と設定                        
今回使用するボタンを赤枠で示します。(リボン - StiLL - ボタンテンプレート)
今回の処理全体図およびセルの数式の設定例を以下に示します。
本例ではシステムテンプレート「WORKT」を使用しています。
@セル内容の説明
セルE3にはシート名[WORKT]、F3にはデータの出力開始行[15]を入力しています。(固定)
セルG3には元データの明細数(処理数)を取得する式[=COUNTA(Sheet1!A:A)-1]を入力しています。
セルH3には指定する行間隔(ここでは3)を入力しています。
セルI3には下段12行目の数式をコピーする範囲[=E3&"!E"&F3&":H"&G3*H3+F3-1]を設定する式を入力しています。
        (見出し行を除くため1を引いています)
各項目式の説明(12行目)
セルE12:明細を行方向に展開する基準値(行)の式[=INT((ROW()-$F$3)/$H$3)+1]を入力しています。
セルF12:同様に明細を列方向に展開する基準値(列)の式[=MOD(ROW()-$F$3,$H$3)]を入力しています。
   ↑上記2つの数式は固定です。【バックナンバー 215】参照
セルG12:(コード)を取得する数式を入力します。
             [=IF(F12=0,INDEX(Sheet1!A:A,E12+1),"")]
         F12(列)の値が0の時のみデータを表示させます。(参照:上段のポイント 2.)
セルH12:(件名)を取得する式[=IF(F12=0,INDEX(Sheet1!B:B,E12+1),"")]を入力します。
この12行目に入力した数式群を、以下で説明するセルデータコピーボタンで、セルI3の範囲にコピーします。
  このコピーでセルH3で指定した行間隔にデータが配置されます。
A「セルデータコピー(BtCellCopy)」ボタンの設定
  設定内容
   1.設定ダイアログを開き下図のように元データ範囲のセル範囲に(WORKT!E12:H12)を入力します。
   2.出力セル位置はセルの値を参照にチェックし(WORKT!I3)を入力します。
   3.貼り付け種類の複数選択をチェックして、3.数式、11.出力先を値のみコピーをチェックします。(赤枠内
      ※ここではボタン見出しを数式展開としています。
  (OK)ボタンで設定を完了して実行します。
■ ご参考までに                        
1. セルH3の設定値を変更することで任意の行間隔にデータを配置することができます。
2. 本処理を(Excelデータ取得「BtMerge」)セルリンクボタンで行うことが可能です。
   この場合は項目式に数式を設定します。
     下図は「WORKT」シートのセルAA2から項目式を定義した例です。
   セルAA4:'==INT((ROW()-$F$3)/$H$3)+1 ・・・ 上段本例で説明のセルE12と同じ (セルF3、セルH3は流用)
   セルAB4:'==MOD(ROW()-$F$3,$H$3)  ・・・・・・ 上段本例で説明のセルF12と同じ
   セルAC4:'==IF(AB15=0,INDEX(Sheet1!A:A,AA15+1),"")  ※1
   セルAD4:'==IF(AB15=0,INDEX(Sheet1!B:B,AA15+1),"")  ※1
   ※1 セルAC4,AD4の数式の基本は上段本例と同じですが、行指定を開始行の15とし、また列位置を変更しています。
      ・項目式での数式は最初にシングルクォーテーション (') 記号を置き文字列で設定します。
      ・演算結果を値とする場合はイコール (=) 記号を2つ指定します。
   下図にボタンの設定例を示します。
 ←3行ごととするため同じシートを3つ指定します。(裏技的設定)※2
 ←元データの開始セル位置
 ←項目式範囲(上図)の指定
 ←出力セル位置の指定
   ※2 通常は同一シートを重複して取得することはありませんが当参考の場合はここがポイントの1つになります。
       行間隔を5とする場合は5つ指定することになりますが、実はこの部分を関数で設定することが出来ます。
       ・設定例:=REPT("Sheet1/",5) ⇒ Sheet1/Sheet1/Sheet1/Sheet1/Sheet1/
       更に数式中の定数5を上段本例で説明の セルH3 に置き換えることで行間隔(=取得数)と連動し自動化できます。
  (出力結果のイメージ)
(各ボタンの設定内容の詳細はStiLLヘルプをご確認ください)  
Copyright(C) アイエルアイ総合研究所 無断転載を禁じます