アフィリエイト広告を利用しています
検索
<< 2024年05月 >>
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
最新記事
最新コメント
タグクラウド
カテゴリーアーカイブ
リンク集
プロフィール
くろすけさんの画像
くろすけ
気が付いたら図書館員になっていました。まだまだ駆け出しのにわとりです。3歩歩いたらいろいろ忘れます。何故図書館員になったのかは謎ですが、図書館員という仕事は楽しんでいます。
プロフィール
ファン
日別アーカイブ


広告

posted by fanblog

2018年03月04日

EXCELでISBNの変換

これまで何気なくやっていたISBNによる所蔵の重複チェックですが、少し古い資料の場合、ISBN10で書誌を作られている場合があります。そういう資料を最近購入した場合、ISBN13が付与されなおしています。これは出版、及び図書館業界では共通認識で、図書館システムなんかにも、自動で変換してチェックをしてくれたりします。
ISBNが何?って人はとりあえずこちら(TRC)こちら(Wikipedia)をご覧いただければと思いますが、簡単に言うと、本固有の記号ですね。車とか家電とかパソコンとかの型式番号に近いものです。ただ、国際的に振出のルールが決まっていて、それが2007年を境に10桁から13桁に変更されたのですね。なので、2007年以前に出版されたものが、2007年以降に重版やらなんやらで販売される場合、10桁から13桁に書き換えられています。
で、問題なのは、そういう資料は割と高い確率で書誌データにISBN10が採用されているんですね。なので、あとから購入したものと同じ本なのにISBNが違う、という事態が発生します。図書館システムならまず同じものとして扱ってくれますが、それは業界ルールだからであって、世間一般のルールではありません(笑)EXCELにとってはISBN10とISBN13は、完全に別の値なのです。なので、EXCEL上で比較する場合、どちらかの形式に変換して統一しないといけないのですが、それがまあ、ちょっと面倒くさいなあ、という場面に最近出会ってしまったのでした。
10桁から13桁の変換は基本的には頭に「978」をつければ完成なので問題ないのですが、面倒なのはチェックデジットの計算が変わってしまうことです。計算方法自体は単純で特に問題ありませんが、それをEXCEL上でどうやって関数で表現するか、となるとなかなかめんどくさいですね^^
VBAなら割と簡単で、

Private Sub ISBN
dim x as long,z as long
dim cd as long 'チェックデジットを格納する変数
dim y(12) as long ’ISBNの1桁目から12桁目までの数字を格納する変数
dim isbn10 as string,isbn13 as string 'ISBN

isbn10 = cells(1,1) 'セルA1にISBN10が入力されているとして
isbn13 = "978" & isbn10 'ISBN10の頭に「978」を付けてISBN13の形にする

for x = 1 to 12 ’For NextでISBNの各桁の数字を獲得。13桁目はチェックデジットなので不要。
y(x) = mid(isbn13,x,1)
next x

'奇数桁の和*1と偶数桁の和*3の総和を計算する。
z = (y(1)+y(3)+y(5)+y(7)+y(9)+y(11))+(y(2)+y(4)+y(6)+y(8)+y(10)+y(12))*3
z = z mod 10 '総和を10で割った余りを計算する。
cd = 10-z '10から余りを引くとチェックデジットになる。
 
 isbn13 = mid(isbn13,1,12) & cd '初めに作ったISBN13の12桁目までと、チェックデジットを合わせる。


End Sub

書き方はいくつかありますが、おおざっぱにはこんなところです。
これを関数で表現するのは、意外にめんどくさくて、mid関数を12個使うのか、まあ、978は固定なのでそこを除いても9個使うのか、となるとあんまりスマートじゃないなあ、メンテも面倒そうだなあ、使いまわしが面倒そうだなあ、となるわけです。いくつか案はあるけど、どれも「スマートだぜ」とは言えない状況です。

大したことではないけど、ちょっとした悩みでした。
タグ:ISBN VBA
posted by くろすけ at 09:35 | Comment(0) | TrackBack(0) | 日記
この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
https://fanblogs.jp/tb/7389635
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック
×

この広告は30日以上新しい記事の更新がないブログに表示されております。