« スピードアップと費用のバランス | Main | あるはずの道路がない »

Dec 24, 2007

Excel で HTML 編集

いきなり唐突ですが、日本語でモノと数量を表記する際には「○○が△△個」あるいは「○○×△△個」といった書き方をします。ところが英語だと逆で、「△△ ○○」といった書き方をします。たとえば以下に示すのは、先日に DSCA (Defense Security Cooperation Agency) が告知した、モロッコ向け F-16 と関連アイテムの一覧。

  • 24 F-16C/D Block 50/52 aircraft with either the F100-PW-229 or F110-GE-129 Increased Performance Engines (IPE) and APG-68(V)9 radars;
  • 5 F100-PW-229 or F110-GE-129 IPE spare engines;
  • 4 APG-68(V)9 spare radar sets;
  • 30 AN/ALE-47 Countermeasures Dispensing Systems (CMDS)
  • 30 AN/ALR-56M Radar Warning Receivers (RWR)
  • 60 LAU-129/A Launchers;
  • 30 LAU-117 Launchers;
  • 6 Joint Helmet Mounted Cueing Systems;
  • 4 AN/ARC-238 Single Channel Ground and Airborne Radio System (SINCGAR) radios with HAVE QUICK I/II;
  • 24 Conformal Fuel Tanks (pairs);
  • 4 Link-16 Multifunctional Information Distribution System-Low Volume Terminals;
  • 2 Link-16 Ground Stations;
  • 4 Global Positioning Systems (GPS) and Embedded GPS/ Inertial Navigation Systems (INS);
  • 12 AN/AAQ-33 SNIPER Targeting Pods or AN/AAQ-28 LITENING Targeting Pods;
  • 5 Tactical Air Reconnaissance Systems (TARS) or DB-110 Reconnaissance Pods (RECCE);
  • 4 AN/APX-113 Advanced Identification Friend or Foe (AIFF) Systems;
  • 28 AN/ALQ-211 Advanced Integrated Defensive Electronic Warfare Suites (AIDEWS); or 28 AN/ALQ-187 Advanced Self-Protection Integrated Suites (ASPIS II); or 28 AN/ALQ-178 Self Protection Electronic Warfare Suites (SPEWS);
  • 1 Unit Level Trainer

これを「今週の軍事関連ニュース」用に日本語式の表記に書き直すのは、結構な手間がかかります。数が少なければ手作業でやってしまいますが、上の例みたいに数が多いとゲンナリします。

そこで Excel のお出まし。キモは「数字+スペース+アイテム名」と定型化しているところで、それを利用します。

具体的には、=FIND(" ",A1) として最初に出てくるスペース (つまり数字とアイテム名の境界) を判断、それを使って数字の部分を =LEFT() 関数、アイテム名の部分を =MID() 関数と =LEN() 関数の組み合わせで切り出すことができます。元データが A1 セルに入っているとすると…

  • 数字の切り出し : =LEFT(A1,FIND(" ",A1)-1)
    ※先頭から、スペースの位置より 1 文字左までを切り出す)
  • アイテム名の切り出し : =MID(A1,FIND(" ",A1)+1,LEN(A1)-FIND(" ",A1))
    ※スペースの位置より 1 文字右から、全体の文字数からスペースまでの文字数を差っ引いた分だけの文字数を切り出す)

後は、この両者を適切な順番で並べて文字列演算子「&」で連結して、さらに「×」なんかも文字列演算子で付け足してあげれば OK。HTML タグを付け足せば、HTML ソースにもなります。

|

« スピードアップと費用のバランス | Main | あるはずの道路がない »

Comments

逆にこういうこともできるんですよねえ
http://lm700j.at.webry.info/200710/article_31.html
アメダスの過去ログとかデジタル台風で有効な技

Posted by: 憑かれた大学隠棲 | Dec 25, 2007 12:09 AM

そうそう。Office 2000 以来、意外なところで意外なほど HTML を取り扱えるんですよね。

ちなみに私が初めて Web コンテンツを作り始めたときは、Word 97 用のアドインになっていた HTML 出力機能を使ってましたっけ。あの頃はまだ別立てだったんですよ (遠い目)

もっとも、その後すぐに手打ち HTML に移行してしまいましたがw

Posted by: 井上 | Dec 25, 2007 12:25 AM

私だとRubyあたりでスクリプト組んじゃいそうな……。
こういうのに比べるとExcelの文字列操作関数はどうしても貧弱に見えてしまって。せめて正規表現くらい使えるようになっていて欲しいです。
先日もExcelで「ある文字を含む単語の前の区切り文字で文字列を分離する」と言うことをしようとして四苦八苦しました。

Posted by: ぬ゛ | Dec 25, 2007 09:58 AM

さすがに正規表現までは実装してないですねえ。Excel がそこまでやるのはお門違いかなと思います。

あくまで、Excel の文字列処理関数は単純なパターンの定型処理に向いているといえるでしょうね。それでも、工夫次第で案外と役立ちますけれど。

ただ、工夫しすぎると数式がバカみたいに長くなって、収拾がつかなくなるかも。

Posted by: 井上 | Dec 25, 2007 10:34 AM

>ただ、工夫しすぎると数式がバカみたいに長くなって、収拾がつかなくなるかも。

実は、実際にそうなってたりします。(-_-;)
(自分で書いた数式が理解できんorz)
おまけに、数式作っているより手作業でやった方が早かったんじゃないかという気が……。

Posted by: ぬ゛ | Dec 25, 2007 03:19 PM

前に何かの書籍だか雑誌だかで書いたような気がするんですが、

・数式がむやみに長い
・同じ内容の関数の組み合わせを何度も使う

といった場面では、セル範囲名に数式を割り当てて「部品」として使うと、ちょっと保守性が良くなると思います。

このネタ、どこで書いたんだったかなあ…

Posted by: 井上 | Dec 25, 2007 05:13 PM

> 数式作っているより手作業でやった方が早かったんじゃ

最初のセルに考え考え入力してる時には、いつもそう思うのですが、入力が終わってそれを一気に100セルくらいにコピーする時には「やっぱり最初に手間かけといて良かったな...」というパターンが多かったですね。

式が長くって混乱しそうな時は、一つのセルで途中まで計算して、その内容を別のセルに送って残りの計算をさせたりということもやってましたね。 ちょっと頭悪い感じですが。(笑)

Posted by: H@tokara | Dec 25, 2007 09:08 PM

事故 res。「このネタ = セル範囲名への数式割り当て」は、「Excel マニアックス !」で書いてました。他にあり得なかったかも。

>途中まで計算して
それ、私もよくやります。個別のパーツごとに別々のセルを使って動作検証してから、ひとつの数式にまとめるんです。あと、数式の一部だけ選択してから [F9] キーを押して結果を見る方法もお約束です。

Posted by: 井上 | Dec 25, 2007 09:12 PM

マクロを使わなくても度分秒を弄る式を作ったことがあります
=ROUNDDOWN($E2,0)+MOD($E2,0.01)*5/3+(MOD($E2,1)-MOD($E2,0.01))*5/3
いやね、測量合宿の時にパソコン持ってきたのば班の中で自分だけで、みんなが酒かっくらって盛り上がってるなか、一人で測量の結果を整理してただけですよ(´・ω・`)

Posted by: 憑かれた大学隠棲 | Dec 27, 2007 02:14 AM

つД`)・゚・。・゚゚・*:.。..。.:*・゚

確かに、度分秒をいじる関数ってないですもんねえ。

Posted by: 井上 | Dec 27, 2007 05:02 PM

切り上げ切り捨てってのは実は簡単なIF THEN構文の代わりになるんですよね
たとえばモンテカルロ法の場合での0~1で2個の乱数を発生させて自乗の和の小数点以下を切り捨てればIF THENを使わなくても済むわけです。VB5でなぜかうまく条件分岐が通らなかったので、ことごとくを切り捨てで表現した覚えがw

Posted by: 憑かれた大学隠棲 | Dec 27, 2007 09:49 PM

まさに「アイデアの勝負」ってやつですね。奥が深いなあ。

私が学生の時分には PC の利用が普及していなかったので、ややこしい計算式でも全部、関数電卓で処理していました。
数式を部分的に取り出して、そこだけ電卓で計算、その結果と残りの部分を組み合わせて残りの計算。なんてことを、脳内レジスタに値を出し入れしながらものすごい勢いで電卓のキーを叩いてこなしていましたが、いま、同じことをやれといわれたらできません (´・ω・`)

Posted by: 井上 | Dec 28, 2007 01:15 PM

Post a comment



(Not displayed with comment.)




« スピードアップと費用のバランス | Main | あるはずの道路がない »