IronXL トラブルシューティング Excelの制限: 文字列リストのデータ検証 Excel Limitation Regarding Data Validation for Strings Curtis Chau 更新日:8月 19, 2025 Download IronXL NuGet Download テキストの検索と置換 Start Free Trial Copy for LLMs Copy for LLMs Copy page as Markdown for LLMs Open in ChatGPT Ask ChatGPT about this page Open in Gemini Ask Gemini about this page Open in Grok Ask Grok about this page Open in Perplexity Ask Perplexity about this page Share Share on Facebook Share on X (Twitter) Share on LinkedIn Copy URL Email article This article was translated from English: Does it need improvement? Translated View the article in English Microsoft Excelには、カンマなどの区切り記号を含めたリスト全体の長さが255文字を超えることはできないという、文字列リストの長さに関する既知の制限があります。 この問題は、既存の範囲からデータを選択するのではなく、ソースフィールドに手動で文字列リストを入力した場合に発生します。以下に示します。 class="competitors-section__wrapper-even-1"> Excel制限の問題 Excelの制限に対する解決策 この制限に対する標準的な回避策は、ソースフィールドに文字列リストを入力するのではなく、ワークシート内の列または行に値のリストを作成することです。 以下に示します。 class="competitors-section__wrapper-even-1"> Excel制限の解決策例 その後、データ検証でC1:C100などの数式参照を使用し、その範囲を指し示します。 class="competitors-section__wrapper-even-1"> このアプローチは制限を回避し、255文字の制限に縛られることなくドロップダウンリストを作成できるようにします。 IronXLの問題 IronXLはAddStringListRuleメソッドを使用して、データ検証のための文字列リストを適用します。 しかし、前述のExcelの同じ文字数制限により、保存メソッドはまだ機能するでしょう。 しかし、リストが255文字を超えると、ファイルを開くとExcelがクラッシュするという重大な問題になる可能性があることを認識することが重要です。 ここに問題を説明するための例があります。 using IronXL; using IronXL.DataValidations; // Set your license key here if you have one IronXL.License.LicenseKey = "YOUR-LICENSE-KEY"; var workBook = WorkBook.Create(ExcelFileFormat.XLSX); var sheet = workBook.CreateWorkSheet("Validation Rule Example using"); // Apply rules from row 2 down to row 500 var validationRangeStart = "2"; var validationRangeFinish = "500"; // --- 1. Define All Column Headers --- sheet["A1"].Value = "String List Test"; sheet["B1"].Value = "Formula List Test"; sheet["A1:B1"].Style.Font.Bold = true; // 256 string[] arrayString = new string[] { "SKU-A01-R", "SKU-A02-R", "SKU-A03-R", "SKU-A04-R", "SKU-A05-R", "SKU-B01-G", "SKU-B02-G", "SKU-B03-G", "SKU-B04-G", "SKU-B05-G", "SKU-C01-B", "SKU-C02-B", "SKU-C03-B", "SKU-C04-B", "SKU-C05-B", "SKU-D01-Y", "SKU-D02-Y", "SKU-D03-Y", "SKU-D04-Y", "SKU-D05-Y", "END-001", "END-002", "END-003", "END-004", "END-005", "END-010", "END-001" }; // total char with seperator 257 (230 char + 26 sperator [,] ) // no problem when write to a file var skuValidation = sheet.DataValidations.AddStringListRule(sheet[$"A{validationRangeStart}:A{validationRangeFinish}"].RangeAddress, arrayString); // set error box skuValidation.ShowErrorBox = true; skuValidation.ErrorBoxTitle = "Invalid SKU"; skuValidation.ErrorBoxText = "Please select a SKU from the list."; skuValidation.ErrorAlert = ErrorAlert.Stop; //attempt to save the file var fileName = "CategoryProductCatalog.xlsx"; workBook.SaveAs(fileName); using IronXL; using IronXL.DataValidations; // Set your license key here if you have one IronXL.License.LicenseKey = "YOUR-LICENSE-KEY"; var workBook = WorkBook.Create(ExcelFileFormat.XLSX); var sheet = workBook.CreateWorkSheet("Validation Rule Example using"); // Apply rules from row 2 down to row 500 var validationRangeStart = "2"; var validationRangeFinish = "500"; // --- 1. Define All Column Headers --- sheet["A1"].Value = "String List Test"; sheet["B1"].Value = "Formula List Test"; sheet["A1:B1"].Style.Font.Bold = true; // 256 string[] arrayString = new string[] { "SKU-A01-R", "SKU-A02-R", "SKU-A03-R", "SKU-A04-R", "SKU-A05-R", "SKU-B01-G", "SKU-B02-G", "SKU-B03-G", "SKU-B04-G", "SKU-B05-G", "SKU-C01-B", "SKU-C02-B", "SKU-C03-B", "SKU-C04-B", "SKU-C05-B", "SKU-D01-Y", "SKU-D02-Y", "SKU-D03-Y", "SKU-D04-Y", "SKU-D05-Y", "END-001", "END-002", "END-003", "END-004", "END-005", "END-010", "END-001" }; // total char with seperator 257 (230 char + 26 sperator [,] ) // no problem when write to a file var skuValidation = sheet.DataValidations.AddStringListRule(sheet[$"A{validationRangeStart}:A{validationRangeFinish}"].RangeAddress, arrayString); // set error box skuValidation.ShowErrorBox = true; skuValidation.ErrorBoxTitle = "Invalid SKU"; skuValidation.ErrorBoxText = "Please select a SKU from the list."; skuValidation.ErrorAlert = ErrorAlert.Stop; //attempt to save the file var fileName = "CategoryProductCatalog.xlsx"; workBook.SaveAs(fileName); Imports IronXL Imports IronXL.DataValidations ' Set your license key here if you have one IronXL.License.LicenseKey = "YOUR-LICENSE-KEY" Dim workBook = WorkBook.Create(ExcelFileFormat.XLSX) Dim sheet = workBook.CreateWorkSheet("Validation Rule Example using") ' Apply rules from row 2 down to row 500 Dim validationRangeStart = "2" Dim validationRangeFinish = "500" ' --- 1. Define All Column Headers --- sheet("A1").Value = "String List Test" sheet("B1").Value = "Formula List Test" sheet("A1:B1").Style.Font.Bold = True ' 256 Dim arrayString() As String = { "SKU-A01-R", "SKU-A02-R", "SKU-A03-R", "SKU-A04-R", "SKU-A05-R", "SKU-B01-G", "SKU-B02-G", "SKU-B03-G", "SKU-B04-G", "SKU-B05-G", "SKU-C01-B", "SKU-C02-B", "SKU-C03-B", "SKU-C04-B", "SKU-C05-B", "SKU-D01-Y", "SKU-D02-Y", "SKU-D03-Y", "SKU-D04-Y", "SKU-D05-Y", "END-001", "END-002", "END-003", "END-004", "END-005", "END-010", "END-001" } ' no problem when write to a file Dim skuValidation = sheet.DataValidations.AddStringListRule(sheet($"A{validationRangeStart}:A{validationRangeFinish}").RangeAddress, arrayString) ' set error box skuValidation.ShowErrorBox = True skuValidation.ErrorBoxTitle = "Invalid SKU" skuValidation.ErrorBoxText = "Please select a SKU from the list." skuValidation.ErrorAlert = ErrorAlert.Stop 'attempt to save the file Dim fileName = "CategoryProductCatalog.xlsx" workBook.SaveAs(fileName) $vbLabelText $csharpLabel コード内で、arrayStringという名前の文字列リストをドロップダウンリストを作成するための文字列リストのソースとして渡そうとしています。そしてCategoryProductCatalog.xlsxとして保存しようとします。 しかし、これらの制限により、Microsoft Excelでファイルを開くと、そのファイルが破損しており開けないというメッセージが表示されます。 IronXLの解決策 このExcelの制限に正しく対処するために、IronXLではDataValidationsプロパティから利用可能なAddFormulaListRuleメソッドを提供しています。 このメソッドは、Excelの処理に対応する解決策と似ています。 まず、ワークシートのある範囲に値のリストを書き込みます。 その後、AddFormulaListRuleを使用して、ドロップダウンリストのソースとしてその範囲を参照します。このようにして、Excelの解決策と同じ方法によって制限をプログラム的に回避します。 AddFormulaListRuleを適切に使用することでExcelの制限を回避すると同時に、長い値のリストであってもExcelで開く際にファイルが読み取り可能で安定していることも保証します。 コード例 以下はこの問題を回避する追加のサンプルコードです。 同じワークブックを使用して、まずワークシートを作成してからすべての列見出しを定義します。 前の例からの文字列リストと新しいデータを入力して、機能を説明します。 その後、上記の検証範囲でAddFormulaListRuleを呼び出します。 そしてそれをvalidationRuleExample.xlsxとして保存します。 ワークブックが破損せず正常に使用できることを確認するために、Excelで開きます。 この手順は、コードの成功した実装を実証する上で重要です。 using IronXL; using IronXL.DataValidations; using System; // Set your license key here if you have one IronXL.License.LicenseKey = "YOUR-LICENSE-KEY"; var workBook = WorkBook.Create(ExcelFileFormat.XLSX); var sheet = workBook.CreateWorkSheet("Validation Rule Example using"); // Apply rules from row 2 down to row 500 var validationRangeStart = "2"; var validationRangeFinish = "500"; // --- 1. Define All Column Headers --- sheet["A1"].Value = "String List Test"; sheet["B1"].Value = "Formula List Test"; sheet["A1:B1"].Style.Font.Bold = true; string[] arrayString2 = new string[] { "SKU-A01-R", "SKU-A02-R", "SKU-A03-R", "SKU-A04-R", "SKU-A05-R", "SKU-B01-G", "SKU-B02-G", "SKU-B03-G", "SKU-B04-G", "SKU-B05-G", "SKU-C01-B", "SKU-C02-B", "SKU-C03-B", "SKU-C04-B", "SKU-C05-B", "SKU-D01-Y", "SKU-D02-Y", "SKU-D03-Y", "SKU-D04-Y", "SKU-D05-Y", "END-001", "END-002", "END-003", "END-004", "END-005", "END-010", "END-001", "IRON01","IRON02","IRON03","IRON04","IRON05","IRON06","IRON07","IRON08","IRON09","IRON10", "IRON11","IRON12","IRON13","IRON14","IRON15","IRON16","IRON17","IRON18","IRON19","IRON20", "IRON21","IRON22","IRON23","IRON24","IRON25","IRON26","IRON27","IRON28","IRON29","IRON30", "IRON31","IRON32","IRON33","IRON34","IRON35","IRON36","IRON37","IRON38","IRON39","IRON40", "IRON41","IRON42","IRON43","IRON44","IRON45","IRON46","IRON47","IRON48","IRON49","IRON50", "IRON51","IRON52","IRON53","IRON54","IRON55","IRON56","IRON57","IRON58","IRON59","IRON60", "IRON61","IRON62","IRON63","IRON64","IRON65","IRON66","IRON67","IRON68","IRON69","IRON70", "IRON71","IRON72","IRON73","IRON74","IRON75","IRON76","IRON77","IRON78","IRON79","IRON80", "IRON81","IRON82","IRON83","IRON84","IRON85","IRON86","IRON87","IRON88","IRON89","IRON90", "IRON91","IRON92","IRON93","IRON94","IRON95","IRON96","IRON97","IRON98","IRON99","IRON100" }; // total char with seperator 257 (230 char + 26 sperator [,] ) //Write the contents of your array to column A of the data sheet. for (int i = 0; i < arrayString2.Length; i++) { // Note: IronXL row and cell indices are 1-based. sheet[$"A{i + 1}"].Value = arrayString2[i]; } // Create the formula string that points to our data range. // This will look like: 'ValidationData'!$A$1:$A$100 string formula = $"'{sheet.Name}'!$A$1:$A${arrayString2.Length}"; Console.WriteLine($"Generated formula for validation: {formula}"); var sku2Validation = sheet.DataValidations.AddFormulaListRule(sheet[$"B{validationRangeStart}:B{validationRangeFinish}"], formula); sku2Validation.ShowErrorBox = true; sku2Validation.ErrorBoxTitle = "Invalid SKU2"; sku2Validation.ErrorBoxText = "Please select a SKU from the list."; sku2Validation.ErrorAlert = ErrorAlert.Stop; // --- Final Touches --- sheet.AutoSizeColumn(0, true); sheet.AutoSizeColumn(1, true); var fileName = "validationRuleExample.xlsx"; workBook.SaveAs(fileName); Console.WriteLine($"Successfully created '{fileName}' with 2 validation rules example."); using IronXL; using IronXL.DataValidations; using System; // Set your license key here if you have one IronXL.License.LicenseKey = "YOUR-LICENSE-KEY"; var workBook = WorkBook.Create(ExcelFileFormat.XLSX); var sheet = workBook.CreateWorkSheet("Validation Rule Example using"); // Apply rules from row 2 down to row 500 var validationRangeStart = "2"; var validationRangeFinish = "500"; // --- 1. Define All Column Headers --- sheet["A1"].Value = "String List Test"; sheet["B1"].Value = "Formula List Test"; sheet["A1:B1"].Style.Font.Bold = true; string[] arrayString2 = new string[] { "SKU-A01-R", "SKU-A02-R", "SKU-A03-R", "SKU-A04-R", "SKU-A05-R", "SKU-B01-G", "SKU-B02-G", "SKU-B03-G", "SKU-B04-G", "SKU-B05-G", "SKU-C01-B", "SKU-C02-B", "SKU-C03-B", "SKU-C04-B", "SKU-C05-B", "SKU-D01-Y", "SKU-D02-Y", "SKU-D03-Y", "SKU-D04-Y", "SKU-D05-Y", "END-001", "END-002", "END-003", "END-004", "END-005", "END-010", "END-001", "IRON01","IRON02","IRON03","IRON04","IRON05","IRON06","IRON07","IRON08","IRON09","IRON10", "IRON11","IRON12","IRON13","IRON14","IRON15","IRON16","IRON17","IRON18","IRON19","IRON20", "IRON21","IRON22","IRON23","IRON24","IRON25","IRON26","IRON27","IRON28","IRON29","IRON30", "IRON31","IRON32","IRON33","IRON34","IRON35","IRON36","IRON37","IRON38","IRON39","IRON40", "IRON41","IRON42","IRON43","IRON44","IRON45","IRON46","IRON47","IRON48","IRON49","IRON50", "IRON51","IRON52","IRON53","IRON54","IRON55","IRON56","IRON57","IRON58","IRON59","IRON60", "IRON61","IRON62","IRON63","IRON64","IRON65","IRON66","IRON67","IRON68","IRON69","IRON70", "IRON71","IRON72","IRON73","IRON74","IRON75","IRON76","IRON77","IRON78","IRON79","IRON80", "IRON81","IRON82","IRON83","IRON84","IRON85","IRON86","IRON87","IRON88","IRON89","IRON90", "IRON91","IRON92","IRON93","IRON94","IRON95","IRON96","IRON97","IRON98","IRON99","IRON100" }; // total char with seperator 257 (230 char + 26 sperator [,] ) //Write the contents of your array to column A of the data sheet. for (int i = 0; i < arrayString2.Length; i++) { // Note: IronXL row and cell indices are 1-based. sheet[$"A{i + 1}"].Value = arrayString2[i]; } // Create the formula string that points to our data range. // This will look like: 'ValidationData'!$A$1:$A$100 string formula = $"'{sheet.Name}'!$A$1:$A${arrayString2.Length}"; Console.WriteLine($"Generated formula for validation: {formula}"); var sku2Validation = sheet.DataValidations.AddFormulaListRule(sheet[$"B{validationRangeStart}:B{validationRangeFinish}"], formula); sku2Validation.ShowErrorBox = true; sku2Validation.ErrorBoxTitle = "Invalid SKU2"; sku2Validation.ErrorBoxText = "Please select a SKU from the list."; sku2Validation.ErrorAlert = ErrorAlert.Stop; // --- Final Touches --- sheet.AutoSizeColumn(0, true); sheet.AutoSizeColumn(1, true); var fileName = "validationRuleExample.xlsx"; workBook.SaveAs(fileName); Console.WriteLine($"Successfully created '{fileName}' with 2 validation rules example."); Imports IronXL Imports IronXL.DataValidations Imports System ' Set your license key here if you have one IronXL.License.LicenseKey = "YOUR-LICENSE-KEY" Dim workBook = WorkBook.Create(ExcelFileFormat.XLSX) Dim sheet = workBook.CreateWorkSheet("Validation Rule Example using") ' Apply rules from row 2 down to row 500 Dim validationRangeStart = "2" Dim validationRangeFinish = "500" ' --- 1. Define All Column Headers --- sheet("A1").Value = "String List Test" sheet("B1").Value = "Formula List Test" sheet("A1:B1").Style.Font.Bold = True Dim arrayString2() As String = {"SKU-A01-R", "SKU-A02-R", "SKU-A03-R", "SKU-A04-R", "SKU-A05-R", "SKU-B01-G", "SKU-B02-G", "SKU-B03-G", "SKU-B04-G", "SKU-B05-G", "SKU-C01-B", "SKU-C02-B", "SKU-C03-B", "SKU-C04-B", "SKU-C05-B", "SKU-D01-Y", "SKU-D02-Y", "SKU-D03-Y", "SKU-D04-Y", "SKU-D05-Y", "END-001", "END-002", "END-003", "END-004", "END-005", "END-010", "END-001", "IRON01", "IRON02", "IRON03", "IRON04", "IRON05", "IRON06", "IRON07", "IRON08", "IRON09", "IRON10", "IRON11", "IRON12", "IRON13", "IRON14", "IRON15", "IRON16", "IRON17", "IRON18", "IRON19", "IRON20", "IRON21", "IRON22", "IRON23", "IRON24", "IRON25", "IRON26", "IRON27", "IRON28", "IRON29", "IRON30", "IRON31", "IRON32", "IRON33", "IRON34", "IRON35", "IRON36", "IRON37", "IRON38", "IRON39", "IRON40", "IRON41", "IRON42", "IRON43", "IRON44", "IRON45", "IRON46", "IRON47", "IRON48", "IRON49", "IRON50", "IRON51", "IRON52", "IRON53", "IRON54", "IRON55", "IRON56", "IRON57", "IRON58", "IRON59", "IRON60", "IRON61", "IRON62", "IRON63", "IRON64", "IRON65", "IRON66", "IRON67", "IRON68", "IRON69", "IRON70", "IRON71", "IRON72", "IRON73", "IRON74", "IRON75", "IRON76", "IRON77", "IRON78", "IRON79", "IRON80", "IRON81", "IRON82", "IRON83", "IRON84", "IRON85", "IRON86", "IRON87", "IRON88", "IRON89", "IRON90", "IRON91", "IRON92", "IRON93", "IRON94", "IRON95", "IRON96", "IRON97", "IRON98", "IRON99", "IRON100"} 'Write the contents of your array to column A of the data sheet. For i As Integer = 0 To arrayString2.Length - 1 ' Note: IronXL row and cell indices are 1-based. sheet($"A{i + 1}").Value = arrayString2(i) Next i ' Create the formula string that points to our data range. ' This will look like: 'ValidationData'!$A$1:$A$100 Dim formula As String = $"'{sheet.Name}'!$A$1:$A${arrayString2.Length}" Console.WriteLine($"Generated formula for validation: {formula}") Dim sku2Validation = sheet.DataValidations.AddFormulaListRule(sheet($"B{validationRangeStart}:B{validationRangeFinish}"), formula) sku2Validation.ShowErrorBox = True sku2Validation.ErrorBoxTitle = "Invalid SKU2" sku2Validation.ErrorBoxText = "Please select a SKU from the list." sku2Validation.ErrorAlert = ErrorAlert.Stop ' --- Final Touches --- sheet.AutoSizeColumn(0, True) sheet.AutoSizeColumn(1, True) Dim fileName = "validationRuleExample.xlsx" workBook.SaveAs(fileName) Console.WriteLine($"Successfully created '{fileName}' with 2 validation rules example.") $vbLabelText $csharpLabel Excelファイルの出力 class="competitors__card"> ご覧のとおり、ExcelファイルはAddFormulaListRuleを使用した後でも安定しており、クラッシュを引き起こしません。 自分で試してみるには、この記事で使用されているアプリケーションのデモとExcelファイルのリンクを参照してください。この デモを使用すると、プロセスを実際に確認し、どのようにして作業に適用するかを理解することができます。 Curtis Chau 今すぐエンジニアリングチームとチャット テクニカルライター Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。 準備はいいですか? Nuget ダウンロード 1,686,155 | バージョン: 2025.11 ただ今リリースされました 試用ライセンスキーがメールで送信されました。 総ダウンロード数: 1,686,155 ライセンスを見る