2010年8月22日日曜日

第155回目、縦のものを横に展開する計算式を作る既成関数の発見

○第155回目、縦のものを横に展開する計算式を作る既成関数の発見

 縦のものを横に展開するにはどうするのか、人によっていろいろあるので、ある人に聞いてみたところ、すでにそのような関数があるとのこと。エクセルは幅が広いと感心しました。
 これをきっかけにして…

 通常のエクセル操作ではどうやって、計算式を入れるのか。
 まず、計算式を入れたい先頭のセルに、Alt+I+Fから、TRANSPOSE関数の挿入を行います。
 範囲には、A2:C2を入れておきます。
 この段階では、まだ未完成です。
 次に、このセル(計算式を入れたい範囲の先頭のセルセル)から下に向かって3セル縦に指定します。
 F2を押します。
 Ctrl+Shift+Enterを押します。
 すると、A2:C2の内容が縦に展開されます。
 計算式は3セルとも、表示上は=TRANSPOSE(A2:C2)となっています。
 
 これは便利だ、便利だ、と思ってやっていましたが、思わぬ問題が発生しました。
 それは、コピー元が配列として連結されてしまっているので、中を裂くようなセルの挿入ができないのです。
 また、コピーもとにセルを挿入すると、計算式がずれてくれないのです。
 エクセルの特徴である好きなときに好きなところにセルを挿入したり削除したりすることが不可能になってしまうのです。
 
 これは悲劇です。TRANSPOSE関数を多用して計算システムを作ってしまうと、あとで修正ができなくなってしまい、最初から作り直しになってしまうのです。
 それを知らずに、マクロでこの関数作りを使用と思い立ったのです。
 ちなみに、マクロで、この関数を入れるには、次のようにします。
 Selection.FormulaArray = "=TRANSPOSE(A2:C2)"
 このような関数を作り上げるのは簡単なものですが、さきほどの大問題があって、作ったもののお蔵入りになってしまいました。
 
 でも、よく考えますと、単純な計算式作りであれば、このような問題もないし、ニーズからいってまあまあかなと思い、改めて単純形式の縦横変換式つくりのお手伝いを作ることにしました。
 
 流れです。
 0.コピー元を選択してマクロを実行(縦横は自動判断)
 1.ブック、シートを指定して、計算式を作る先頭のセルを指定
 2.繰り返し回数の入力
 3.(複数繰り返しの場合)参照先の横飛び、たて飛び数を入力
 4.(複数繰り返しの場合)計算式を入れる場所の横飛び、たて飛び数を入力
 
 このマクロのポイントは、列番号を列記号にするということです。
 すでにこの機能はユーザ関数として登録していますので簡単にできます。
 (第26回目 計算式関係、参照)
 まずは、2-3を省略して、作ってみてください。
 また、ブックの指定とかシートの指定とかはあとでやればいいと思います。
 
 横を縦にするを例に取ると
 0.段階の座標の取得を行います。
 列番号はretu1、行番号はgyo1、列数はretu_cntとなります。
 計算式を入れる先(gyo2,retu2が先頭)では、
  for i=0 to retu_cnt-1
   cells(gyou2+i,retu2).formula= 列記号関数(retu1+i) & gyo1
  next
 となります。
 これは難易度がかなり低いですね。
 なぜこんなのが、第155回になったのでしょうか。
 (このケースは、"複雑形式の計算式作成のお手伝い"で行っていました。それでほとんど支障がなかったものですので、単純なかたちは考えていなかったというのが理由と思われます。これは今回、TRANSPOSE関数のおかげで日の目を見たということでしょうか)
 
 それはさておき、くれぐれも、TRANSPOSE関数に入らないようにしてください。

0 件のコメント: