ワークシートに一意の番号を生成するためにExcelが必要になる場合があります。たとえば、Excelを使用してhttp://www.formville.com/C2_free-invoice-forms.html [invoice]、ステートメント、トラッキングシートなどのフォームを作成することができ、フォームごとに一意の番号が必要です(これを_チケット番号_と呼びます)。もちろん、これは、Excelが1つのセッションから次のセッションまでの番号を記憶する必要があることを意味します。

この問題に取り組むには、いくつかの方法があります。番号を連続させる必要がない場合は、現在の時刻に基づいてチケット番号を秒単位で作成できます。次のマクロをThisWorksheetオブジェクトに追加できます:

Private Sub Workbook_NewSheet(ByVal Sh As Object)

Dim lTicket As Long     lTicket = CLng(Time  24  60 * 60)

Sh.Range("A1") = lTicket End Sub

マクロは、新しいワークシートがブックに追加されるたびにトリガーされます。現在の時刻を取得し、それを整数の秒数に変換してから、その値をセルA1に配置します。特定の日にチケット番号が重複する可能性はほとんどありませんが、時間の経過とともに発生する可能性があります。 (たとえば、昨日または先週とまったく同じ時刻にチケットを作成した場合。)

この問題を回避するには、次の方法でチケット番号を作成できます。

Private Sub Workbook_NewSheet(ByVal Sh As Object)

Dim sTemp As String     sTemp = Format(Date, "yymmdd") & Format(Time, "hhmmss")

Sh.Range("A1") = sTemp End Sub

このバージョンのイベントハンドラーは、日付と時刻の両方に基づいてチケット番号を作成します。チケットを非常に迅速に作成しない限り、このアプローチにより、マクロによって生成される番号が重複する可能性を減らすことができます。

番号が現在のワークブック内で連続している必要がある場合は、チケット番号の現在の高い値を含む名前を定義してから、その番号を新しいワークシートのセルに配置し、保存されている値をインクリメントするマクロを定義できます。数。次の手順に従って開始します:

。リボンの[数式]タブを表示します。

。 [定義済みの名前]グループの[名前の定義]ツールをクリックします。 Excelに[新しい名前]ダイアログボックスが表示されます。 (図1を参照)

。 [名前]ボックスに、MaxNumなどの名前を入力します。

。ダイアログボックスの下部にある[参照先]領域で、等号に続けて、次のチケット番号に使用する値を入力します。

。 [OK]をクリックします。新しい名前はブックに保存されます。

次に、VBAエディターのThisWorksheetオブジェクトに次のマクロを追加します。

Private Sub Workbook_NewSheet(ByVal Sh As Object)

Dim iMax As Integer     iMax = Mid(ThisWorkbook.Names("MaxNum"), 2)

Sh.Range("A1") = iMax     iMax = iMax + 1     ThisWorkbook.Names("MaxNum").RefersTo = "=" & iMax End Sub

このマクロは、ブックに新しいワークシートを挿入するたびに実行されます。 MaxNumに格納されている値を取得し、その値を新しいワークシートのセルA1に配置してから、MaxNumに格納されている値をインクリメントします。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(11192)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice 365のExcelに適用されます。Excelの古いメニューインターフェイス用のこのヒントのバージョンは、次の場所にあります。