MEMO
- この記事は GitHub - ClosedXML - Wiki を参考に書かせていただいたものですが、C# から VB.NET への書き換えをし、英語から日本語へ翻訳しただけでなく、元記事の構成・コード・コメント等を変更している場合もありますのでご了承ください。
- 現在 ClosedXML のメンテナンスをご担当されている Francois Botha 様からの掲載許可もいただいてます。
- この記事のコードサンプルについては、Imports ClosedXML.Excel が宣言されていることを前提としています。
- ClosedXML の作成者について:Francois Botha, Aleksei Pankratev, Manuel de Leon, Amir Ghezelbash
- ClosedXML のライセンスについて:GitHub - ClosedXML - MIT License
目次
入力規則:1~5 の小数点数のみ許容
ws.Cell(1, 1).DataValidation.Decimal.Between(1, 5)
入力規則:整数 2 のみ許容、エラーメッセージ付き
Dim dv = ws.Range("A2:A3").SetDataValidation dv.WholeNumber.EqualTo(2) dv.ErrorStyle = XLErrorStyle.Warning dv.ErrorTitle = "範囲外の数値" dv.ErrorMessage = "このセルに入力できるのは 2 だけです。"
注意
元記事では var dv1 = ws.Range("A2:A3").DataValidation; と書かれているのですが、実際に試してみると .Range に .DataValidation プロパティは存在せずエラーになりました(2019/07/07)。
いろいろ試してみたら(上記コードの通り).SetDataValidation メソッドを使うことで期待通りの結果を得られたのですが、これが正しいやり方なのか保証はできません。
by エレン・イースト(当サイトの管理人)
入力規則:西暦2000年以降の日付のみ許容、入力時メッセージ付き
Dim dv = ws.Cell("A4").DataValidation dv.Date.EqualOrGreaterThan(New DateTime(2000, 1, 1)) dv.InputTitle = "1999年は盛り上がりましたが" dv.InputMessage = "今世紀の日付を入力してください。"
入力規則:リストから選択(範囲からリストを取得)
ws.Cell("C1").Value = "Yes" ws.Cell("C2").Value = "No" ws.Cell("A5").DataValidation.List(ws.Range("C1:C2"))
入力規則:リストから選択(コードからリストを取得)
'この形式で指定します:"オプション1,オプション2,オプション3" Dim options = New List(Of String)({"オプション1","オプション2","オプション3"}) Dim validOptions = $"""{String.Join(",", options)}""" ws.Cell(1,1).DataValidation.List(validOptions, True)
MEMO
念のためメモしておきますが、上記コード中の $ は補完文字列 (string interpolation) の機能を提供しています。
Console.WriteLine($"Today is {Now.DayOfWeek}.")
' --> Today is Sunday.
Console.WriteLine($"It's {Now:HH:mm} now.")
' --> It's 08:44 now.