If関数を使って連番を振る | サラリーマン八神かかしの「パソコンおシゴト日記」
2007-03-18 06:42:11

If関数を使って連番を振る

テーマ:エクセル関数

4月から新しい販売管理の仕組みが稼動します。

販売管理には、前年同期比や計画比がつきものです。それを計算しようと思えば、当然ながら前年実績や計画の値が、その新しい仕組みの手が届く範囲に入力されていなければ不可能です。

ですから、前年実績と計画の値を、新しい仕組みに入力しないといけません。

でも、聞けばどちらもエクセルの表に必要事項を入力して、新しい仕組みにアップロードすればおしまいのようです。




ならば簡単だ。

計画値を入力するのは、従来の仕組みが継続されていたとしても、決められた時期が来れば、すべきおシゴトに変わりはありません。入力する先が変わっただけのこと。どうってことはない。

一方、前年実績にしたって、従来の仕組みでデータを蓄積している。それを新しい仕組みに持っていくだけの事。要するにデータのお引越し。これだって、どうってことはないだろう。




そうタカをくくっていたのですが、いざ着手したら、ちょっとした「つまずき」がありました。



つまづいたのは、具体的には「連番を振る」という作業でした。



なんでも、新しい仕組みでは、データ1件ごとの識別のため、連番が必要らしいのです。

エクセルの世界で「連番」と来れば、適当に数字を入力して、後はドラッグするヤツ。名前を忘れてしまいましたが、これが定番機能です。

それを使えば大したことはない。と思ったのですが、実際にはそうはいかなかったのです。





結論を先に言うと、最初のデータにだけ1番を振って、その後は式を使って計算をさせることで連番を振りました。



要求されていたデータ様式はこんな感じです。



問題は、「アイテムNo.」。従来の仕組みでは、実績データの中になかった項目です。

だから、力任せでも何でも、要求されている通りに入力しなければなりません。



でもデータ総数は1000件を越しています。できれば手抜きをして、それでも正確な方法が望まれるのです。



連番の振り方のポイントはこうです。


  1. 同一注文Noに含まれる品番一つ一つに対して、ダブらないように10から始めて、10ずつのステップで順番に連番を振ること。
  2. 別の注文Noに変わったら、同様に10から始める。


わたしは、

  1. セルB2に10と手で入力して、
  2. セルB3に、=if(exact(A2,A3),B2+10,10)、こんな式を入力して、
  3. この式を、以下データがある行全部にコピー。

これで連番を完成させました。



実は、式を入力する前に、一つだけ必ずやっておかなければならないことがありました。それは、注文Noごとにデータをソートすることです。

そうすれば、同一注文Noが一箇所に固まっていて、それ以外の場所に同一注文Noのデータは絶対に出現しません。

この条件さえ成立すれば、「連番を振る」という作業は、次の2つのうちどちらかだけをすればよいことになります。

  1. 同一の注文Noが続く限り、一つ前の番号よりも1ステップ大きい番号を振る。
  2. 別の注文Noが出現したら、最初の番号を振る。


つまり、

条件
現データの注文Noは、前出データの注文Noと同じか?
その条件を満たす場合
一つ前の番号よりも1ステップ大きい番号を振る。
その条件を満たさない場合
最初の番号を振る。


日本語でこうしゃべることを、よりエクセル語に近い表現をするとこんな感じです。


条件
exact(A2,A3)
その条件を満たす場合
B2+10
その条件を満たさない場合
10


で、これらの要素をIf関数として表現すると、

=if(exact(A2,A3),B2+10,10)
と、こうなります。



これで晴れて、連番を

  • 手を抜いて、
  • それでも正確に
振ることができました。



条件を表わすところで、今回はexact(A2,A3)という関数を使ってみました。これは、

セルA2とA3に入力されている文字の並びが同一かどうか

その結果を出力する関数です。



「連番を振る」と来れば、その機能の名称を忘れてしまいましたが、ドラッグする方法、これが定番です。でも、今回の場合では、この機能はあまり有効だとは感じませんでした。



連番の振り方のポイントとして、先ほど2つ記しました。そのうちの1つ目がこれです。

同一注文Noに含まれる品番一つ一つに対して、ダブらないように10から始めて、10ずつのステップで順番に連番を振ること。



最初に、同一注文Noだけを表示させるため、わたしはオートフィルタをかけました。

その上で、ドラッグさせて連番を振ろうとしたのですが、オートフィルタをかけた状態では、どうやら連番を振ることはできません。

オートフィルタによって表示されている内容は、連続した行番号のデータだけが表示されるとは限りません。だから、きっと連番が振れないような仕組みになっているのでしょう。



で、オートフィルタを使うのはやめて、データ全部を表示させたまま、ドラッグをして連番を振ることを考えました。確かに連番を振ることはできるのですが、不安になってきました。

1000件を超えるデータに対してドラッグしていては、2番目のポイントをきっちり守れる自信がありません。


2番目のポイントとはこれです。

別の注文Noに変わったら、同様に10から始める。



と、まあこんな具合に、ちょっとした試行錯誤の末、目的を達成したのでした。