「StiLL」 デザイン情報242 StiLLコマンド -- 「不定形のフォーマット用紙からデータ取得する方法」
                             
  【テーマ】
 定型の記入用紙を配布して記入依頼したのに、行挿入など編集されて提出されたため、集計できず処理に困ったことはありませんか? 
 今回、行、列に挿入されてしまった不定形なフォーマットでも項目名等からデータを抽出する方法についてご紹介します。
    【方法】
 固定されたセルから値を取得することができないので、検索をする(BtSearch)セルリンクボタンを使用します。具体的には、項目名等のセル位置を検索します。次に項目名等の隣にあるセルの位置を計算し、セル値を取得します。 尚、横座標文字(A,B,C。。)と横座標数字の変換処理が必要となります。変換表等を利用する方法もありますが、今回、ADDRESS関数で変換処理を行います。
    【参考】
もし、行、列挿入だけでなく、シート名変更やシートをコピーして複数シートに編集された場合は、
指定出力位置にアクティブブック内のシート名を抽出(BtPasteSheetName)セルリンクボタンを使ってBook内の全シート名を取得します。
 
           
                             
■ 今回の内容
 定型の記入用紙を配布して記入依頼したのに、行挿入など編集されて提出されたため、集計処理に困ったことはありませんか? 
不定形のフォーマットでも、項目名等を利用して隣のセル値を取得する方法についてご紹介します。
具体的には、「検索をする(BtSearch)」セルリンクボタンを使用します。
「検索をする(BtSearch)」セルリンクボタンですが、”商品名”で検索すると取得できる情報は、 アドレス(例 Y8)/ 横座標(例 25)
/縦座標(例 8)/ 値出力(例 商品名)となります。 この情報を利用し、隣のセル(例 Z8)の”シーツ”を取得します。
ここで、問題となるのは、横座標が、文字(”Y”)ではなく、数字(”25”)となる事です。欲しい結果は、文字(”Z")です。
よって、通常、隣の横座標を取得するために、対応表を用意して、文字(”Z")を取得する工夫をします。
今回、対応表を用意せず、文字(”Z”)取得する方法をご紹介します。
■ 検索をする(BtSearch)セルリンクボタンの設定
今回は、「検索をする(BtSearch)」セルリンクボタンを使います。
セルリンクボタンの作成画面より、「検索をする(BtSearch)@」を選択し、[OKA]を押します。
[セルに貼付けB]で任意の場所を選び、[OK]を押しますC
以下、処理ボタンのご説明をします。
 検索範囲     : 検索するセル範囲を指定します。例は、X〜AC の範囲を指定しています。
 検索開始位置  : 例は、左上から検索する設定をしています。  検索する文字が複数存在した場合、
              検索しない位置の文字を除く設定で、セルリンクボタンを複数使い、同一検索文字の複数検索対応ができます。
 検索オプション  : 例の設定は、ダイヤログ表示をしない+検索は行単位 上下+。。となっています。
              記述方法は、ヘルプの順番に数字を並べて設定します。
 検索値        : 例は、”商品名" を検索する設定になっています。 検索値は、*などワイルドカードを使用できます。
 アドレス出力位置: アドレス出力位置です。例は、WORKT!G17 を指定しています。検索結果は、”Y8"です。
 横座標出力位置: 横座標出力位置です。例は、WORKT!G18 を指定しています。検索結果は、”25”です。
 縦座標出力位置: 縦座標出力位置です。例は、WORKT!G19 を指定しています。検索結果は、”8”です。
 値出力位置   : 値出力位置です。例はWORKT!G20 を指定しています。検索結果は、”商品名”です。
■ データ取得の方法
 「検索をする(BtSearch)」セルリンクボタンを使って、”商品名”の項目に設定されている値(”シーツ”)を取得します。
具体的には、検索をする(BtSearch)セルリンクボタンとADDRESS関数/INDIRECT関数を組み合わせて取得します。
◆手順1 :”商品名”のセル位置検索(例) 
    検索をする(BtSearch)セルリンクボタンを使い”商品名”を検索します。
◆手順2 :ADDRESS関数を使いセル位置を計算
          1。商品名 横座標(数字)に+1します。
            @(=G18+1)
          2。下記図の@、Aの値から、ADDRESS関数を使ってセル位置(Z8)を取得します。
             B ( =ADDRESS(H19,H18,4)  )
                    3。値のセル位置B を取得できたので、INDIRECT関数を使って設定値を取得します。
                      C( "シーツ" ( =INDIRECT(I17)  )
〇補足
  ・ADDRESS関数  ( =ADDRESS(行番号,列番号 [,参照の種類,参照形式,シート名]) )
     行番号と列番号を指定してADDRESS関数でセルの参照を文字列で返します。
         ADRESS関数の事例については、以下のバックナンバーもご参考にしてください。
          「StiLL」デザイン情報157 開発--ADDRESS関数を活用しよう
  ・INDIRECT関数  ( =INDIRECT(参照文字列,参照形式) )
     参照文字列で入力したセル、セル範囲名を計算式で参照できるようにする。
           INDIRECT関数の事例については、以下のバックナンバーもご参考にしてください。
           「StiLL」Excel情報057  関数--シートの特定セルの値をとる
■ 参考                          
 もし、行、列挿入だけでなく、シート名変更やシートをコピーして複数シートに編集された場合は、
 指定出力位置にアクティブブック内のシート名を抽出(BtPasteSheetName)セルリンクボタンを使って
 Book内の全シート名を取得します。
以上
                                          (各ボタンの設定内容の詳細はStiLLヘルプをご確認ください)  
Copyright(C) アイエルアイ総合研究所 無断転載を禁じます