
3 つの列 (A、B、C) が各行の一意の識別子を形成する Excel シートがありますが、列の値は一意ではありません。例:
ABC REF 001
ABC REF 002
ABC REF 003
ABC DOC 001
ABC DOC 002
ABC DOC 003
上記の行は、同じ値の組み合わせを持つ行がないため有効です (たとえば、列 B と C が重複している場合でも、「ABC REF002」を持つ行は 2 つありません)。
ユーザーが列 A、B、C に別の行の組み合わせと一致する値の組み合わせを入力した場合、検証エラーが発生するような Excel 検証を追加するにはどうすればよいですか?
答え1
ワークシート コード領域に次のイベント マクロを入力します。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim I As Long, st As String, J As Long, k As Long
Dim CH As String
If Intersect(Range("A:C"), Target) Is Nothing Then Exit Sub
CH = Chr(1)
I = Target.Row
J = Cells(Rows.Count, 1).End(xlUp).Row
st = Cells(I, 1).Text & CH & Cells(I, 2).Text & CH & Cells(I, 3).Text
For k = 1 To J
If k <> I Then
stk = Cells(k, 1).Text & CH & Cells(k, 2).Text & CH & Cells(k, 3).Text
If st = stk Then
MsgBox "Combination already in use:" & vbCrLf & stk
Exit Sub
End If
End If
Next k
End Sub
ワークシート コードなので、インストールが非常に簡単で、自動的に使用できます。
- Excelウィンドウの下部にあるタブ名を右クリックします
- 「コードの表示」を選択すると、VBEウィンドウが表示されます。
- 内容を貼り付けてVBEウィンドウを閉じます
不安な点があれば、まずはトライアルシートで試してみてください。
ブックを保存すると、マクロも一緒に保存されます。2003以降のバージョンのExcelを使用している場合は、ファイルを次のように保存する必要があります。.xlsmそれよりも.xlsx
マクロを削除するには:
- 上記のようにVBEウィンドウを表示します
- コードを消去する
- VBEウィンドウを閉じる
マクロ全般の詳細については、以下を参照してください。
http://www.mvps.org/dmcritchie/excel/getstarted.htm
そして
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
イベント マクロ (ワークシート コード) の詳細については、以下を参照してください。
http://www.mvps.org/dmcritchie/excel/event.htm
これを機能させるにはマクロを有効にする必要があります。