• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:EXCEL:ID番号の自動入力)

EXCEL:ID番号の自動入力

このQ&Aのポイント
  • 複数のシートに、B列  C列が入力されるファイルがあり、A列に自動的にID番号をふりたいと考えております。
  • B列の日付ごとに複数シートにわたってID番号が入力されるとベストですが、同日付の案件もあるので関数では難しいですか?
  • B列に日付を入力すると連番式にIDが入力されるVBAを組み、行を削除した場合に他のIDも自動的に一個前に詰めることはできますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.3

串刺し集計を利用すれば、比較的簡単にシートをまたぐ連番を自動入力することができます。 Sheet1(一番左のシート)のA2セルに以下の式を入力し下方向にオートフィルします。 =IF(B2="","",COUNT(Sheet1!A:A)+COUNT($A$1:A1)+1) Sheet2の(2枚目のシート)A2セルには以下の式を入力し下方向にオートフィルします。 =IF(B2="","",COUNT(Sheet1!A:A)+COUNT($A$1:A1)+1) Sheet3(3枚目以降)のシートには以下のような串刺し集計の数式を入力します(同じ式を3枚目以降にはコピー貼り付けし、Sheet2の部分を1つ前のシート名に変更する)。 =IF(B2="","",COUNT(Sheet1:Sheet2!A:A)+COUNT($A$1:A1)+1) これで特定の行を削除しても、問題なく、新しい連番が表示されます。

namsan3
質問者

お礼

回答ありがとうございました。 下の方のお礼にも記入したのですが、結局連番は手入力で いくこととなりました。 シンプルな方法をお教え下さりありがとうございました。 串刺し集計、他でも活用させていただきます!

その他の回答 (2)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 まず、作業用シートを3枚設けます。(仮に、作業用シートA、作業用シートB、作業用シートC、という名称だとします)  次に、作業用シートAのA1セルに「シート名入力⇒」と入力して下さい。  次に、作業用シートAの1行目に、B列から始まって、右方向に向かって、 B1セル Sheet1 C1セル Sheet2 D1セル Sheet3 E1セル Sheet4  ・   ・  ・   ・  ・   ・ という具合に、IDを振り分けるシートの名称を、入力して下さい。  この時、Sheet1 (2)の様に、セル参照をすると、 'Sheet1 (2)'! という具合に、シート名が「'」で囲まれるシートの、シート名を入力する際には、次の様な形式で、数式を使って入力して下さい。 ="'Sheet1 (2)'"  又、シート名を並べる順序は特に気にされなくても結構ですが、同じ名称を重複して入力する事はしないで下さい。  次に、作業用シートAのB1セルに次の数式を入力して下さい。 =IF(ISNUMBER(INDIRECT(B$1&"!B"&ROWS($1:1))),ROUND(INDIRECT(B$1&"!B"&ROWS($1:1))*86400,0)/86400,"")  続いて、作業用シートAのB2セルをコピーして、 列はB列から始まって、IDを振り分けるシートの枚数を上回るのに充分な列数になる様に、 行は2行目から始まって、IDを振り分けるシートの中で最も件数の多いシートの件数を上回るのに充分な行数になる様に、 セル範囲を選択して、その範囲に貼り付けて下さい。  次に、作業用シートBのA1セルに次の数式を入力して下さい。 =IF(作業用シートA!B$1="","",作業用シートA!B$1)  続いて、作業用シートBのA2セルをコピーして、同じ行の右方向に向かって、IDを振り分けるシートの枚数を上回るのに充分な回数だけ貼り付けて下さい。  次に、作業用シートBのA2セルに次の数式を入力して下さい。 =IF(作業用シートA!B2="","",作業用シートA!B2+(COUNTIF(作業用シートA!$A:A,作業用シートA!B2)+COUNTIF(作業用シートA!B$1:B2,作業用シートA!B2))/(COUNTIF(OFFSET(作業用シートA!$A:$A,,,,MATCH("/",作業用シートA!$1:$1,-1)),作業用シートA!B2)*99999))  続いて、作業用シートBのA2セルをコピーして、右方向と下方向にに貼り付けて下さい。  次に、作業用シートBのA2セルをコピーして、作業用シートCのA1から右方向に向かって、貼り付けて下さい。  次に、作業用シートCのA2セルに次の数式を入力して下さい。 =IF(作業用シートA!B2="","",RANK(作業用シートB!A2,OFFSET(作業用シートB!$A:$A,,,,MATCH("/",作業用シートB!$1:$1,-1)),1))  続いて、作業用シートCのA2セルをコピーして、右方向と下方向にに貼り付けて下さい。  次に、IDを振り分けるシートの中から適当な1枚を選び、そのA列にある適当なセルに、次の数式を入力して下さい。 =IF(ISNUMBER(INDEX($B:$B,ROW())),OFFSET(作業用シートC!$A$1,ROW(),MATCH(MID(CELL("filename",INDIRECT("A1")),FIND("]",CELL("filename",INDIRECT("A1")))+1,99),作業用シートC!$1:$1,0)-1),"")  続いて、そのセルをコピーして、IDを表示させる可能性のある全てのセル(他のシートも含む)に、貼り付けて下さい。  以上で準備は完了で、後は案件が入力される各シートのB列に、日付が入力されれば、自動的にBOOK内における日付順に付けられた連番が、同じ行のA列のセルに表示されます。  勿論、行の削除にも対応しております。

namsan3
質問者

お礼

回答ありがとうごさいました! 実際やってみたところうまくできたのですが、 ファイルに関数を多く使用しているので、PCのスペック的に かなり時間がかかってしまうことになったので、連番は手入力で いくことにしました。 ありがとうございます。

  • soixante
  • ベストアンサー率32% (401/1245)
回答No.1

>やはり関数では難しいでしょうか? そう思います。マクロでしょうか。 >その行を削除した場合、他のIDも自動的に一個前に詰める >ように組むことはできますでしょうか? VBAならできるでしょう。 そもそもですが、ID番号は多くの案件から当該案件を一意に識別するための番号だと思うのですが、これが案件の削除によって、後からずれたり変更になること自体は問題はないのですか。 そのあたりの運用方法によっても変わりそうですね。

namsan3
質問者

補足

早速の回答ありがとうございます。 言葉足らずで申し訳ありません。 ここで言うIDはいわば連番です。 複数シートに同内容のデータがまたがって存在しているので、 日付順(重複があるので入力順)にID番号をふって、後々集計する際に その番号をもとに一覧を作ったりしたいと考えております。