| 「StiLL」 デザイン情報177 StiLLコマンド--セル内の複数行を個々のセルに振り分ける | ||||||||||||||||||||||||||
| 【テーマ】 セル内改行されている複数行の文字列を1行ずつ1つのセルに分解したいときってありませんか?この処理方法についてご紹介します。 | 【方法】文字列に含まれている改行コードを検索して、1行ずつに分解します。基本的な分解はExcel関数で行います。ここでは 「繰返し実行(BtLoop)」 と 「入力範囲の値を出力範囲にセットする(BtSetMultiCell)」 の2つのセルリンクボタンを使用して実装します。 | 【参考】 説明に使われているIFERROR関数はExcel2007以降で使用できます。それ以前のExcelをご使用の場合はIF関数とISERROR関数で組み替えてください。 | ||||||||||||||||||||||||
| 対応Ver. :StiLL-XV1.0
以降 対応種類:StiLL Dev・Pro |
対応Ver. :StiLL-XV1.0
以降 対応種類:StiLL Dev・Pro |
対応Ver. :StiLL-XV1.0
以降 対応種類:StiLL Dev・Pro |
||||||||||||||||||||||||
| ■ 今回の内容 | ||||||||||||||||||||||||||
| 一つのセルの中の改行されている文字列をセル単位(行)に切り離す処理についてご紹介します。 | ||||||||||||||||||||||||||
| 1つのセルに入っている文字を改行で分けます | ||||||||||||||||||||||||||
| 今回の「切り離し処理」の考え方を整理します。 | あいうえお かきくけこ さしすせそ たちつてと なにぬねの |
|
あいうえお | |||||||||||||||||||||||
| 1.セル内で改行されている文字列から改行されている部分(改行コード)を見つけます。 | かきくけこ | |||||||||||||||||||||||||
| 2.見つけた改行コードまでの文字列を1行として切り取ります。 | さしすせそ | |||||||||||||||||||||||||
| 3.切り取った文字列を出力開始セルにコピーします。 | たちつてと | |||||||||||||||||||||||||
| 4.1〜3までを出力開始行を変更させながら文字列がなくなるまで繰り返します。 | なにぬねの | |||||||||||||||||||||||||
| ■ 設定についての説明 | ||||||||||||||||||||||||||
| 下図のようにセルG17(赤丸)に入力されている改行された文字列をセルG29から行単位に切り離して出力する処理を行います。 | ||||||||||||||||||||||||||
| (全体図) | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
| セルリンクボタンを3つ使って処理を行います。 | ||||||||||||||||||||||||||
| 1)初期値セット(BtSetValue) | ||||||||||||||||||||||||||
| 元の文字(G17セル)の値を、作業領域(D26セル)にコピーしておきます。 | ||||||||||||||||||||||||||
| 2)繰り返し実行(BtLoop) | ||||||||||||||||||||||||||
| 元の文字(G17セル)の中に入っている改行コードの数で、複数セル値セット(BtSetMultiCell)「ボタン11」 を繰り返し実行します。 | ||||||||||||||||||||||||||
| 改行コードの数は、「終了数値」(D33セル)に入っている数式でカウントしています。 | ||||||||||||||||||||||||||
| =LEN(Pシート1!G17)-LEN(SUBSTITUTE(Pシート1!G17,CHAR(10),"")) | ||||||||||||||||||||||||||
| @SUBSTITUTE関数で元の文字(G17セル) に入っている改行コードを空文字 "" に置き換え、 | ||||||||||||||||||||||||||
| A@の結果の文字数を数えて | ||||||||||||||||||||||||||
| B元の文字(G17セル) の文字数からAの文字数を引き算すると、改行コードの数を数えることができます。 | ||||||||||||||||||||||||||
| 3)複数セル値セット(BtSetMultiCell) | ||||||||||||||||||||||||||
| このボタンでは、2つのコピー処理を行っています。 | ||||||||||||||||||||||||||
| 入力範囲1のセル値を出力範囲1に、また入力範囲2のセル値を出力範囲2にコピーします。 | ||||||||||||||||||||||||||
| 入力範囲1:図のAを参照 | ||||||||||||||||||||||||||
| A(F42セル)では作業領域(D26セル)の文字を改行コードで取り出す式を設定しています。 | ||||||||||||||||||||||||||
| =LEFT(Pシート1!D26,IFERROR(FIND(CHAR(10),Pシート1!D26)-1,LEN(Pシート1!D26))) | ||||||||||||||||||||||||||
| @FIND関数で作業領域(D26セル)の最初の改行コードまでの位置を取得して | ||||||||||||||||||||||||||
| ALEFT関数で作業領域(D26セル)の最初の文字から@から1を引いた位置までの文字を取り出します。 | ||||||||||||||||||||||||||
| BIFEEROR関数は改行コードがない場合の処理を指定しています。 | ||||||||||||||||||||||||||
| CLEN関数では、D26セルの文字をすべて取り出すようにしています。 | ||||||||||||||||||||||||||
| 入力範囲2:図のBを参照 | ||||||||||||||||||||||||||
| B(F43セル)では作業領域(D26セル)からAで取り出した文字を除く式を設定しています。 | ||||||||||||||||||||||||||
| =IF(Pシート1!D33>Pシート1!E35,SUBSTITUTE(Pシート1!D26,Pシート1!F42&CHAR(10),"",1),"") | ||||||||||||||||||||||||||
| @SUBSTITUTE関数でAの文字と改行コードを合わせた文字列を空文字に置き換えます。 | ||||||||||||||||||||||||||
| 同じ文字列の行があっても同時に除かないように1(番目)を指定しています。 | ||||||||||||||||||||||||||
| AIF関数で終了数値(D33セル)とカウンタ(E35セル)を比較し終了数値に達したら空白を設定しています。 | ||||||||||||||||||||||||||
| 出力範囲1(D45セル)は出力する行を変化させるようにカウンタ(E35セル)を行に加算しています。 | ||||||||||||||||||||||||||
| =ADDRESS(ROW(Pシート1!G29)+Pシート1!E35,COLUMN(Pシート1!G29),4,1,Pシート1!D12) | ||||||||||||||||||||||||||
| @ROW(Pシート1!G29)+Pシート1!E35で行を加算しています。 | ||||||||||||||||||||||||||
| カウンタを単純に加算できるようBtLoopの初期数値(D32セル)を0にしています。 | ||||||||||||||||||||||||||
| 図の「Pシート1!G33」は5回繰り返した最後のセルが表示されています。 | ||||||||||||||||||||||||||
| APシート1!D12でシート名を参照しています。 | ||||||||||||||||||||||||||
| 出力範囲2(D46セル)は作業領域(D26セル)を指定しています。(固定) | ||||||||||||||||||||||||||
| 上記の設定でセル内改行された文字列をセル単位(行)に出力することができます。 | ||||||||||||||||||||||||||
| ■ ご参考までに | ||||||||||||||||||||||||||
| 1.改行コードを別の文字、例えばカンマ「,」に置き換えると、カンマで区切られた文字列をセル単位に出力することも可能です。 | ||||||||||||||||||||||||||
| 2.BtSetMultiCellの出力範囲1の式でカウンタを列(COLUMN)に加えることで横に展開表示させることも可能です。 | ||||||||||||||||||||||||||
| 3.今回の処理を図の「@ボタン連続実行(MakeBtPush)」に設定することができます。 | ||||||||||||||||||||||||||
| その際は、最初の指定に画面描画off(DispOff)ボタンを設定すると、結果が一度に表示され処理時間も短縮されます。 | ||||||||||||||||||||||||||
| 4.IFERROR関数はExcel2007以降で使用できます。それ以前のExcelをご使用の場合はIF関数とISERROR関数で組み替えてください。 | ||||||||||||||||||||||||||
| (各ボタンの設定内容の詳細はStiLLヘルプをご確認ください) | ||||||||||||||||||||||||||
| Copyright(C) アイエルアイ総合研究所 無断転載を禁じます | ||||||||||||||||||||||||||