1.ファミリを何とかする(その5)
特許リスト上で何らか作業をする場合に、ファミリだけをまとめて表示させたい、そんな時の処理方法を紹介したいと思います。
2.今回やろうとしていること
今回やろうとしていることは「ファミリ以外の特許を含む特許リストから、ファミリだけを表示させる」ことです。
具体的には以下のような特許リストと、希望するファミリを含む情報を入力すると、特許リストから希望するファミリの行を抽出して表示するような処理を行います。
特許リストはExcel形式を想定しています。
特許リストの例:
(特許リストをtxt形式で貼りつけたものがこちら。メモ帳にコピペしてエンコード「ANSI」で保存(文字化け対策)して拡張子(txt)をcsvにするとExcelで開けます)
"特許番号","評価","ファミリ"
JP7776655,B,"JP7776655
JP5432123
JP5004321"
JP6665544,C,JP6665544
JP5554433,A,JP5554433
JP5432123,D,"JP7776655
JP5432123
JP5004321"
JP5004321,E,"JP7776655
JP5432123
JP5004321"
最初はpythonで処理するつもりでしたがVBAを使うほうが自然かと思い、今回はVBAで処理します。
上記のような特許リストがあるとします。ファミリ(C列)には複数の特許番号が改行を挟んで連結した状態で収められています。
このような特許リストで以下の特許番号のファミリを含む行だけを表示したいときに、
以下のプログラムで、ファミリのセル(C2セル)を指定して、指定したセルに含まれるファミリ特許を絞り込む処理を行います。
Sub fmly_flt()
Dim fmly_arr() As String, i As Integer, fmly As String
fmly = Cells(2, 3) 'C2セルをファミリとして指定
fmly_arr = Split(fmly, vbcrLf) '改行コードで分割
'テキストからの取り込みデータの場合vbcrlf,Excelセル内改行の場合はvblf
Range("A1").AutoFilter 1, fmly_arr, xlFilterValues 'A1セルを含むリストを1列目で配列fmly_arrの文字列で絞り込む
End Sub
ファミリに含まれる3件だけが抽出できました。(VBAでオートフィルタを自動設定するよう制御している)
(プログラムについて補足)
今回絞り込みの列(「特許番号」)が1列目ですので「AutoFilter 1」としています。絞り込みの列nに対応して「AutoFilter n」のnの数値を設定してください。
(注意事項)
ファミリデータはセル内改行で区切っています。注意すべき点として、サンプルデータのようなテキストデータにおける改行コード(CRLF)とExcelのセル内でalt+Enterで改行する場合の改行コード(LF)は違うので、alt+Enterでの改行コードだとプログラム4行目は
fmly_arr = Split(fmly, vbLf)
としてください。(テキストから取りこんだデータとExcelで打ち込んだデータが混ざっているような場合は要注意)
3.最後に
VBAもpythonも適材適所でそれぞれの利点を活かしていければと思います。
今回の記事が何らかの助けになれば幸いです。