今回は、金額が指定した範囲内かどうかを調べるスクリプトと、金額を計算し新たな消費税に置き換えるスクリプトです。消費税が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));
[
サンプルをダウンロード]