クリエイター手抜きプロジェクト[362] Illustrator CS3〜CC編 金額をチェック──消費税を計算/古籏一浩

投稿:  著者:  読了時間:7分(本文:約3,300文字)


今回は、金額が指定した範囲内かどうかを調べるスクリプトと、金額を計算し新たな消費税に置き換えるスクリプトです。消費税が2014年に5%から8%、2015年に8%から10%になる算段のようですが、本当にそうなるかどうかはわかりません。

まず、以下のスクリプトは選択したテキストフレーム内にある金額を調べ、範囲外のものを選択状態にします。なお、金額は「123,456円」のように3桁ごとにカンマで区切られ、なおかつテキストフレームの最後が円の文字で終わっているというパターンを想定しています。

また、円でなく銭の単位が含まれている場合は正しく処理されません。パターンにマッチする文章としては「1玉98円」とか「3台限り! 2,980円」のようになります。

ちらしや文章中に、間違って0を多く入力してしまった場合などに使えます。





// 選択したテキストフレーム内にある金額が範囲内か調べる
(function(){
var min = prompt("最低価格(含む)を入れてください", 100);
if (!min){ return; }
var max = prompt("最高価格(含む)を入れて下さい", 9999);
if (!max){ return; }
min = parseInt(min); // 小数値以下は切り捨て
max = parseInt(max);
var ngList = [];
var pricePat = new RegExp("(0|[1-9][0-9]{0,2}(,[0-9]{3}){0,2})円$", "g");
var selObj = app.activeDocument.selection;
for(var i=0; i<selObj.length; i++){
selObj[i].contents.replace(pricePat, function(str, ptr, allStr){
var p = parseInt(str.split(",").join("")); // 数値に変換
//$.writeln(p);
if ((p >= min) && (p <= max)){ return str; }
ngList.push(i); // 金額がオーバーしたテキストフレーム番号を入れる
return str;
});
}
if (ngList.length > 0){
for(i=0; i<selObj.length; i++){
selObj[i].selected = false;
}
for(i=0; i<ngList.length; i++){
selObj[ngList[i]].selected = true;
}
alert("金額が範囲を超えています");
}
})();


次に、消費税を自動的に計算するスクリプトです。金額の形式は先ほどのスクリプトと同じです。最初に現在の消費税を入力し、次に新しい税率を入力します。金額に該当する文字列があれば、自動的に新しい税率を適用し新たな価格に置き換えます。


// 選択したテキストフレーム内にある金額に消費税を適用する
(function(){
var oldTax = prompt("現在の税金を入れてください(5%なら5)", 5);
if (!oldTax){ return; }
var newTax = prompt("新たな税金を入れて下さい(10%なら10)", 10);
if (!newTax){ return; }
oldTax = oldTax / 100;
newTax = newTax/100;
var pricePat = new RegExp("(0|[1-9][0-9]{0,2}(,[0-9]{3}){0,2})円$", "g");
var selObj = app.activeDocument.selection;
for(var i=0; i<selObj.length; i++){
selObj[i].contents = selObj[i].contents.replace(pricePat, function(str, ptr, allStr){
var p = parseInt(str.split(",").join("")); // 数値に変換
var price = p / (1 + oldTax);
var newPrice = Math.floor(price * (1+newTax));
//$.writeln("元金額:"+price+"、元の税込み金額:"+p+"、新価格:"+newPrice);
newPrice = num3Format(newPrice);
return newPrice + "円";
});
}
})();
function num3Format(str){ // 3桁に区切る
var temp1 = (new String(str)).split(".")[0].match(/./g).reverse().join("");
temp1 = temp1.replace(/(\d{3})/g,"$1,");
temp1 = temp1.match(/./g).reverse().join("").replace(/^,/,"");
if(!!(new String(str)).split(".")[1]) temp1 = temp1 +"."+ str.split(".")[1];
return temp1;
}

なお、会社や役所によって小数値以下を切り捨てるか、四捨五入するか異なっています(役所だと切り捨ててください、と言われるのですが)。

上記のスクリプトは切り捨てを前提にしていますが、四捨五入したい場合は以下のように変更してください。また、どうしても小数値以下で誤差が発生するため、計算した新たな税込み金額が1円違ってしまうことがあります。最終的には目視で確認するようにしてください。

var newPrice = Math.floor(price * (1+newTax));
 ↓
var newPrice = Math.round(price * (1+newTax));


【古籏一浩】openspc@alpha.ocn.ne.jp
< http://www.openspc2.org/ >

編集長の愛犬ハニー号がお亡くなりになったということで、ご愁傷さまでございます。

やはりタブレットのenchantMoonは楽しいデバイスのようです。これは、デジクリのネタとしてかなり期待しなければいけません。しかし、再来週からデジクリが夏休みなのでレポートは夏休み明けになりそう。いや、夏休みが明けても届かないかもしれませんが。

・enchantmoonが届いた人の阿鼻叫喚まとめ
< http://matome.naver.jp/odai/2137430452227412701 >

Go言語は地道に項目を追加中。Go言語は検索エンジンからのアクセスも含めても30人/日程度なので、のんびり作れるのがいいところ。

・Go言語例文辞典 (MacOS X)
< http://www.openspc2.org/reibun/Go/1.1.1/ >

・ハイビジョン映像素材集
< http://www.openspc2.org/HDTV/ >

・Nexus 7(アンドロイドタブレット)使い方辞典
< http://www.openspc2.org/reibun/Android/Nexus7/ >

・JavaScript逆引きハンドブック
< http://www.amazon.co.jp/dp/4863541082 >

・改訂5版JavaScriptポケットリファレンス
< http://www.amazon.co.jp/dp/4774148199 >

・クリエイター手抜きプロジェクト
< http://www.openspc2.org/projectX/ >

・Adobe Illustrator CS3 + JavaScript 自動化サンプル集
< http://www.openspc2.org/book/PDF/Adobe_Illustrator_CS3_JavaScript_Book/ >
吉田印刷所の「印刷の泉」でも購入できるようになりました。