ちょっとした発見をしたのでメモまでnoteにしておきたいと思います。
何がしたかったのか
以下のExcelシートで説明します。A列のようなデータがありまして、これからC列とD列のデータが欲しくなりました。6個くらいなら手でやればいいんですが、もし100個くらいデータがあったら面倒ですね。
方法1(LEFT関数、RIGHT関数を使う)
まず、思いつくのがRIGHTとLEFT関数を使う方法です。LEFTとかRIGHTとか小さい頃に遊んでいたBASICにあってよく使っていたのを思い出します。年がバレますね。LEFTは文字列の左から指定した文字を切り取って返す関数です。C1の指定ではA1のセルのデータ「1年前期」の文字列を左から1文字だけちょんぎって返してくれます。RIGHTも機能は同じです。
上記の方法でもいいんですが、この場合は問題ないのですが、1年とか前期という文字列の長さが色々だったらこの方法は使えません。何文字切り取っていいのかわからないからですね。
方法2(区切り文字で分割する)
で、次に思いつくのが「年」を区切り記号として隣接文字列を取り出そうということです。「1年前期」だと年を区切りとすると「1」と「前期」が取れますね、という感じです。年がカンマ「、」だとCSVっていうデータ形式になります。はい。
ただ、区切り文字があってもどうやってその区切り文字で分割するか。が問題になります。プログラミングの経験があればsplit関数みたいなものが欲しくなるんですが、プログラムを書くのも面倒です。
そんなときに使えるExcelのテクがありまして、タブで区切られた文字列をExcelシートにコピペするとなんとわけてくれる機能があるんですね。なかなか嬉しい機能なんです。
要は、与えられた文字列に何らかの法則性があって区切り文字が決められる場合に、その区切り文字をタブに置き換えることができたら、あとはただコピペすればいいんです。
何を言っているかわからないという方のためにちょっと例を書いてみます。Windowsではメモ帳を立ち上げてそこに「1年(タブキーを押す)前期」と入力して、その文字列をコピーして、Excelシートの貼り付けたいセルを選択してペーストすると。。。セルがわかれてペーストされるんですねぇ。これ知っていると便利なときがあるんですよ。
で、ここからがこのnoteの本題なんですが、Windowsでは上記のようなことができるんですが、Macではうまくいかない。。。と思ってきたんです。実際に何も考えずにペーストすると以下のようになります。1つのセルに入力されてしまうんですね。。。
で、今回たまたま発見したんですが、ペーストするときに「形式を指定して貼り付け」を選択して「Unicode テキスト」を選択して貼り付けると。。。Windowsのようにセルがわかれて貼り付けられるんですね〜。素晴らしい。
これがこのnoteの発見です。これがメモできたらもう私としては十分なのですが。。。最初に書いたデータに対して、この加工ができるようにしなければならないのですが、そこは少しだけ書いておきます。
要は「1年前期」の「年」を「タブ」に置き換えることができれば何でもいいんですね。僕はvimというエディタを使うのでそれで一括置換します。もう少しいまどきなやり方だとVS Codeでもいけるらしいです。これも今日の発見でした。以前、試したときはうまくいかなかったので。絵だけ載せておきます。ミソは④ですね。これ私知らなかったですね。
で、タブに変換できたら、再び、VS Codeの内容をExcelに戻します。以下のような感じです。タダー!わけられました。ちなみに、この場合は上記のような「形式を選択して〜」は不要で、そのまま貼り付けてもできました(デフォルトがUnicode テキストになるようです)。
ちょっと何を言っているかわからないようなnoteでしたが。。。とりあえず自分的には分かったことが2つありました。
タブ入りの文字列をExcelに貼り付けたときにセルがわかれない場合は「形式を指定して貼り付け」を選択して「Unicode テキスト」を選択すればよい。
VS Codeでタブなどの制御文字を検索・置換するときには、検索ボックスの右横にある「正規表現を使用する」アイコンをオンにすることでうまくいく。
以上です。