だらけ日記過去ログ:2009年1月30日(金)「素直にsplitが使えれば」
何か不意にExcelがいじりたくなってしまったので、区切り文字で文字列をセル単位に分割するExcelシートを新しくしました。
ダウンロード(ZIP / 267KB)
機能的には、1文字ではなく複数の文字列での分割と、かっこ書きに対応しました。でも分割方法は前バージョンとまるで違っていたりします。 バージョンナンバーを2.1.0にしたのもそのせい。ローカルにある2.0.0ではその表記した機能を前バージョンの応用で作ったものなのですが、最終的にセル分割する段階で新しく作った動きが、「むしろ全体的にその処理でまわしていいんじゃない?」というような作りになっていることに今朝方気づいて、結局その方法でほとんどの部分を作り直すことに。 前バージョンの仕組みをざっくり説明すると、「文字列から区切り文字の文字位置を検出して、その区切り位置情報を元に、文字列抽出で分割する」という動きでした。SEARCH関数がメインですが、SEARCH関数だと、その検索文字列の1回目の登場位置しか検出しないので、同じ区切りで何回も分けられているときに、処理がややこしくなるんです。 でまぁ、今回のバージョンアップで、かっこ書きや複数文字列に対応させる流れとして、いきなりセル分割しないで、それぞれの区切りがある場所にとりあえず制御文字列入れておいて、最終的に前バージョンの1文字の文字区切りに流し込んで分割させてしまおうと考えたワケです。んで、分割位置に制御文字列がどんどん入っていった最終的なセル分割前のデータは、あ◆区切り◆い◆区切り◆う◆区切り◆え◆区切り◆お◆区切り◆か こんな感じに入ることになるワケです。PHPやJavaScriptであれば、「◆区切り◆」でsplitすれば分かれて配列に入ってくれますが、Excel先生には知る限りではそんな機能はないので、これを前バージョンの方式で分割…するの面倒やなー、つか区切り文字パターンが1つであるなら、もう少し簡単な方法がありそう。 つことで別の分割方法を考えてみた。い◆区切り◆う◆区切り◆え◆区切り◆お◆区切り◆かう◆区切り◆え◆区切り◆お◆区切り◆かえ◆区切り◆お◆区切り◆かお◆区切り◆かか 区切り文字列を検索すると、ひとつめの区切り文字列の位置が出てくるので、その位置から区切り文字列を抜いた後ろの文字列を取り出す。その出てきた文字列からさらに区切り文字列を検索し、区切り文字列以降の文字列を取り出す…というのを繰り返す。(各セルに上のようなデータが入る) 次の計算で、ひとつ後ろの文字列で置換処理して、前と次の文字列で同じになる部分を削除する。あ◆区切り◆い◆区切り◆う◆区切り◆え◆区切り◆お◆区切り◆か するとこういうデータになる。あとは区切り文字列を消せば分割完了。 つまり区切り文字列が特定の区切り文字列になってさえいれば、この方法で簡単に分割ができることに。いろんな区切り文字を特定の文字列にするなら、置換(SUBSTITUTE)するだけでいいじゃん…。誰だよ文字位置とか区切り文字の順番とか同じ区切り文字が複数回あるときとかいろいろ言ってたの!(自分だ) ということで、区切り文字列(1文字・複数文字問わず)を淡々と特定の区切り文字列に置換して、最後に上の処理をするというかなりシンプルなものになりました。こうなると前バージョンの処理方法がむしろ恥ずかしい感じに。前バージョンの方がExcelこねくりまわしてる感があって、そういう意味では好きなんですけど。 かっこ書き対応処理の方は、そんな単純にできなかったので、相当恥ずかしい感じで作られています。開始文字を消して、終了文字で区切る…? いや、開始文字の前が区切り文字じゃない普通の文字列だとくっついちゃう…。こっちの動き的には前バージョン踏襲してる感じ。 まぁ、これでタグ入れも簡単に! でも先日大量に買ってきた新曲分のタグはもう入れ終わってしまった…orz。積まないで並べると結構少なく見えるけど、53枚あります。本当はこっちの買い物話も書きたいんだけどなぁ。 むしろ聞く曲が大量にあったからExcel作業ができたとも言う…。