わたくしごと註解

17-18世紀の西洋哲学および生命思想史を研究しています。執筆者については「このブログについて」をご覧ください。

Excel文献管理術(1):BibTeXのデータをコピペして簡単に入力したい!

以前から、Excel を用いて文献を管理する方法について考えている。この基本的な方針については、以前の記事で書いているので、興味があれば読んでみて欲しい。

人文系大学院生による文献管理の一例

今回の記事では〈Excelで文献を管理したい場合には〉役に立つかもしれない、効率の良い管理方法について考えている。

もちろん専用の文献管理ソフトなども世の中には存在するわけで、それらを用いるのも悪くはない。ただ、私の場合は一旦そうしたソフトに挫折してしまい、代わりに Excel で文献管理を始めてしまった。こういうものは一度はじめるとなかなか別のものに移るのが難しくもあり、ダラダラと Excel と向かい合っている。

言い訳はさておき、Excel に文献情報を手入力するのは骨の折れる作業である。私は比較的マメな人間なので、あまり溜め込まずに情報を入力してきたが、いつ性格が変わるかもわからない。できれば楽な方法があった方が良い。

そこで、文献検索サイトなどで手に入る BibTeX のデータを流用することを考えた。単純な発想で、特定のセルにコピペされた BibTeX データから、うまい具合に筆者やタイトルなどの情報を抽出してきて、Excel 表の適切な箇所へと分配してあげるというものである。私は別に Excel に詳しいわけではないので、ネットで調べてみたり、ChatGPT に相談したりしながら、見よう見まねで暫定的なものを作ってみた。改善案があれば教えてもらえると嬉しい。

以下でどのようなものになったかを簡単に紹介する。


(1)大体のイメージ

まず、表は以下のような感じになっている。どのような順序に文献情報を並べるかは各自自由でよい。画像1枚目は表の左側、2枚目は表の右の方を表示している。とりあえず、後者を見てほしい。

BibTeX」と書かれた列に、論文検索サイトからコピペしてきたデータを貼り付ける。すると、そのデータが隣の「置換」と書かれた列で色々と操作される。この工程が必要なのは、BibTeXのデータのままだと、例えば à が \`{a} と記述されていたりするため、これらを修正しなければならないからだ。データを流用するというのはあまり効率がよくないが、仕方がない。

(2)基本的な数式の三つのタイプ

つづいて具体的にはどのような数式を入力するのかを紹介したい。そのまえに、以下の三つのタイプの数式が必要になることを確認しておこう。

  1. BibTexデータをExcel表で扱うために置換をする数式
  2. 置換されたデータから欲しい部分のみを抽出する数式
  3. 文献データによって異なる処理が必要な場合の数式(例えば、巻や Vol. だけなら「6」のような出力で良いが、号や No. もあるデータの場合、「6[3]」のように出力したい)

基本的にはこの三つのタイプを少し変化させたり、具体的な文字列を足したり、ハイパーリンク化したりすることによって表が構成されることになる。これらの数式を一度作ってしまえば、多くの論文については BibTeX データをコピペするだけで自動的に表の形にしてくれる。

(3)具体的にはどのような数式を書けば良いのか

色々調べてみてわかったのだが、GoogleスプレッドシートにはREGEXEXTRACT関数というものが用意されていて、これを使えば、正規表現(高性能な検索ができる記述法)に当てはまるものを抽出することが可能であった。もし Excel ではなくGoogleスプレッドシートを用いるならば、こちらの関数の方が良いであろう。

今回はあくまで Excel に最初から備わっている関数を用いてデータを抽出する方法を紹介する。使うのは、MID関数、FIND関数、IF関数、ISNUMBER関数、SUBSTITUTE関数くらいで、これらを組み合わせて頑張る。おそらくもっとスマートなやり方もあるだろう。

1. BibTexデータをExcel表で扱うために置換をする数式

BibTeXデータでは、à が \`{a} と書かれたりしているので、Excel ではこれらを置換する必要がある。また、データによって {} で記述されているものと、"" で記述されているものがあり、後者を前者に統一するためにも置換が必要であった。

基本的にはSUBSTITUTE関数で頑張る。「SUBSTITUTE(置換する文字列の場所,検索する文字,置換後の文字)」というのが基本的な形だが、これを以下のような入れ子構造にすることで一度にさまざまな部分を置換することができる(「R859」の部分は置換したい文字列の場所を示しているので、各自のExcelファイルによる)。

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(R859,"=""","{"),""",","}"),"\""{o}","ö"),"\""{U}","Ü"),"\c{c}","ç"),"\`{a}","à"),"\`{e}","è"),"\'{e}","é")

これでもまだ全ての場合に対応できているわけではないが、基本的な方針はこの形である。あとは、前半に SUBSTITUTE( を付け足し、後半に検索文字と置換文字を入れて括弧を閉じるという作業を繰り返すだけである。

2. 置換されたデータから欲しい部分のみを抽出する数式

BibTeXデータの置換が済んだら、置換後のデータから、さまざまな部分を抽出していこう。BibTeXデータは以下のような形をしている。ものによっては各要素が "" ではなく {} で括られているものもある。

 {1520853835483601664,
author="三浦, 隼暉",
title="経験からの要求と実体的紐帯 : 後期ライプニッツにおける複合実体の問題",
journal="哲学雑誌",
ISSN="03873366",
publisher="哲学会 ; 1892-",
year="2021",
volume="135",
number="808",
pages="247-266",
URL="https://cir.nii.ac.jp/crid/1520853835483601664"
}

これらのうちから「哲学雑誌」(雑誌名)だとか、「2021」の部分だけを取り出して、Excel 表の適切な箇所に入れてあげればよい。これがけっこう面倒なのだが、以下のような数式で対応する(例えば、S859 の文字列から title の内容だけを抽出するならば)。

=MID(S859,FIND("{",S859,FIND("title",S859))+1,FIND("}",S859,FIND("title",S859))-1-FIND("{",S859,FIND("title",S859)))

この数式で、論文タイトルだけを抽出してセルに出力することができる。基本的には"title"の部分を"journal"とか、"pages"とかにしてあげれば、それに合った要素を抽出してきてくれる。仕組みとしては、MID関数に何文字目の部分から何文字分の文字列を拾ってきて欲しいかをFIND関数で教えてあげるという形をとっている。数式が少しややこしくなっているのは、タイトルの前までの冒頭からの文字数と、タイトルの直後の冒頭からの文字数を数えて、後者から前者を引いて(多少調整して)「経験からの要求と実体的紐帯 : 後期ライプニッツにおける複合実体の問題」の文字数を出した上で、titleからその文字数文の文字列を抽出するという操作をしているからである。改めて文字で説明してもややこしい。

3. 文献データによって異なる処理が必要な場合の数式

論文タイトルなどは必ずBibTeXデータに含まれるので場合分けが必要ないが、場合分けが必要な項目というのもいくつかある。たとえば、論文誌には、巻数だけで号数がない場合というのもあったりする。巻数と号数を同じ列上に出力するとすれば、号まである場合には「巻数[号数]」のような形で出力し、そうでない場合は「巻数」のみを出力するという形にしておきたい。そこでIF関数を用いる。

=MID(S857,FIND("{",S857,FIND("volume",S857))+1,FIND("}",S857,FIND("volume",S857))-1-FIND("{",S857,FIND("volume",S857)))&IF(ISNUMBER(SEARCH("number",S857)),"["&MID(S857,FIND("{",S857,FIND("number",S857))+1,FIND("}",S857,FIND("number",S857))-1-FIND("{",S857,FIND("number",S857)))&"]","")

簡単にいえば、前半部分はどの論文誌にもあるであろう巻数に関する記述であり、IF以降では「もし号数が存在するならば、[]に括って号数を隣に並べてね、そうでなければ空白でいいよ」ということが書かれている。

また、同様に、doi情報もBibTeXに含まれていたり含まれていなかったり色々なので、このあたりも同様にIF関数を使って、doiが含まれていたら出力をよろしく、ということを伝えておく感じになっている。先の号数の場合もそうだったが、SEARCH関数(FIND関数でも良い)で doi という語を検索して、対象の文字列に含まれていれば、Aを出力し、そうでなければBを出力するという操作を行なっている。

=IF(ISNUMBER(SEARCH("doi",S858)),HYPERLINK("https://doi.org/"&MID(S858,FIND("{",S858,FIND("doi",S858))+1,FIND("}",S858,FIND("doi",S858))-1-FIND("{",S858,FIND("doi",S858)))),"")

ちなみに、doi に関してはリンクになっていてくれた方が嬉しいので、HYPERLINKをつけて「https://doi.org/」を冒頭に付加するように処理している。

(4)あとはそれぞれの論文検索サイトからBibTeXをコピペするだけ

これらの数式を出力したいセルに記入していけば準備は完了である。あとは、それぞれの論文検索サイトから元になる BibTeX データを頂戴して、コピペすれば欲しいところに欲しい情報が出力されてくれる。

おそらく使っていくうちにとんでもない欠陥が見つかるかもしれないが、それは見つかり次第報告する。さしあたり、自分でも後で何をしたのかを忘れてしまいそうなので備忘録的にこの記録を残しておく。