質問するログイン新規登録

Q&A

解決済

2回答

6024閲覧

行挿入や行削除をしても変わらない番号を関数を使ってつけたい

c_php

総合スコア29

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

0グッド

0クリップ

投稿2020/01/28 05:09

0

0

いつも勉強させて頂いております。

表題の詳細ですが、
スプレッドシートで列に日付、人名、商品コードなどを入力しております。
そこから、日付&人名の頭文字のアルファベット&その日の人名の出現回数を関数で判断させて管理番号を自動で作っています。

管理番号日付人名商品
20200101-s-0120200101鈴木a-kkk2
20200101-s-0220200101鈴木v-154845
20200101-y-0120200101山下v-154888
20200101-s-0320200101鈴木AAA-AAA
20200101-y-0220200101鈴木BBB-BBB

このような表の場合、その日の出現回数が2回以上の場合、行削除や行挿入を行うと、連番がずれてしまいます。
例えば、上記表の1行目を削除すると出現回数が変わるので管理番号【20200101-s-02】が【20200101-s-01】と1つ下がってしまいます。

一度決まった管理番号を固定にしたいのですが、出現回数をとっている以上自動では無理だと思います。
しかし、一度コピーして値貼付けという方法も避けたいと思っております。

かなり矛盾したことを質問しているのは承知の上ですが
何かいい方法はないでしょうか?

管理番号の仕組み自体を変更しても良いとは思っていますが、
初めから00001などの固定連番を振るのではなく、あくまで管理番号以外の列が入力されたときに
入力された値から作りたいと思っております。

アドバイスをよろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

Zuishin

2020/01/29 11:09

もう一つ表を作り、出現回数を別でカウントしておけばいいのではないでしょうか。スプレッドシートなら容易いと思います。
c_php

2020/01/31 01:11

もう1つ表を作るとなると行挿入や行削除削除されても揺るがないように作成する必要があると思うので、importrangeやquery以外で表を別途転記する必要があると思いますが、手動であればはやりオペレーションミスが起こりうるかと思います。上記の方法以外で入力している表を別の場所に引っ張るにはGAS以外で方法はありますでしょうか?
Zuishin

2020/01/31 01:13

そういう表ではなく、人名と出現回数を記録するだけの表です。たとえばそこに佐藤さんが 2 とあれば、次に佐藤さんが出たときにそれをインクリメントして 3 にし、管理番号を 3 で作ります。この管理番号は一度作ればもう更新はしません。
c_php

2020/01/31 01:45

出現回数のみを記載する表ですね。出現回数を反映させる方法はGASでということでしょうか?
Zuishin

2020/01/31 02:03

そうなります。
guest

回答2

0

DBでも行うことですが、実際に削除するのではなく、削除フラグを立てるだけにするというてもあります。
保存や印刷したいときや、そのフラグを参照して立っていないものだけを対象にするようなスクリプトを用意するとか。

初めから00001などの固定連番を振るのではなく、あくまで管理番号以外の列が入力されたときに入力された値から作りたいと思っております。

ちなみに、そもそも出現回数を管理番号に利用している意図はなんなのでしょうか。
その意図を踏まえ、管理番号に含めることが本当に適切なのかを検討されることをお勧めいたします。管理番号に何を期待しているのでしょうか?

投稿2020/01/28 06:13

t_obara

総合スコア5488

c_php

2020/01/29 04:52

本来の表(上記は簡素化したもの)に登場する人物は多くても3人程度で、その日のうちに何度も同じ人が出現するので、ユニークな番号を振る為に出現回数をとっていました。固定的に連番を振ると入力者によって連番の振り間違えなどのオペレーションミスが起こる可能性がある為、このような形をとっていました。同様に行挿入や行削除を行わないというルール付けもしていましたが、徹底できないようなので、関数側で対応できないかと模索しておりました。
t_obara

2020/01/30 00:37

オペミスを考慮して、単純にユニークにしたいのであれば、それこそ管理番号付与部分を関数にして、日付やUUIDなどを利用すれば良いのではないかと思います。
c_php

2020/01/30 01:01

察しが悪くすいません。どのような形での付与が望ましいと思われますでしょうか?具体例があればおしえてほしいです。
t_obara

2020/01/30 01:09

すいません、管理番号付与部分はすでに関数化されているのですよね。その部分を単に入力されたデータからではなく、入力した時間を番号にするというだけです。DBのレコード挿入などでも良く使うやり方かと。
c_php

2020/01/30 01:48

タイムスタンプをとり、それを管理番号にするということですね。確かにその場合、どのセルに入力されたタイムスタンプをとるのかという問題とそのセルが編集されたときにタイムスタンプが更新されないようにする必要はありますが、行挿入などでは変化しない番号ですね。その方向で考えていきたいと思います。
guest

0

ベストアンサー

個人を識別する記号と、出現回数は、本来独立なものだから、それを連結させてはダメです。
ご自分でも「無理だと思います」というものなら、あきらめて別の方法を考えましょう。
たとえば
・行は削除しない(行の追加だけを許す)
同一人物のデータのうち、出現回数が最も多いものだけを有効とすれば、問題は生じない。
・1日ごとにユニークな人のリスト(1回以上出現した人のリスト)を別途作成して、出現数を含むデータと合わせて利用する

そもそも、頭文字のアルファベットが一致する人が複数人来れば、それで識別できなくなって破綻しますよね。

ほんとに何が必要なのかを、冷静に考えたほうが良いと思います。

投稿2020/01/28 06:13

coco_bauer

総合スコア6921

c_php

2020/01/29 04:53

ほかの方法を模索したいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.25%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問