// 新規ワークブックの作成 var workbook = new GrapeCity.Documents.Excel.Workbook(); var sheet = workbook.Worksheets[0]; #region Init Data sheet.Name = "API Evaluate2"; sheet.Range["B3:B11"].Value = new object[,] { { "商品名" }, { "りんご"}, { "ぶどう"}, { "なし"}, { "バナナ"}, { "ココナッツ"}, { "いちご"}, { "みかん"}, { "パイナップル"} }; sheet.Range["C3"].Value = "Evaluate 結果"; sheet.Range["D3"].Value = "Evaluate2 結果"; sheet.Range["F2"].Value = "参照返却の比較 (=B4:B11)"; sheet.Range["F3"].Value = "Evaluate 結果"; sheet.Range["G3"].Value = "Evaluate2 結果"; ITable table = sheet.Tables.Add(sheet.Range["B3:B11"], true); ITable table1 = sheet.Tables.Add(sheet.Range["C3:C11"], true); ITable table2 = sheet.Tables.Add(sheet.Range["D3:D11"], true); table.ConvertToRange(); table1.ConvertToRange(); table2.ConvertToRange(); #endregion //------------------------------- // 1) 動的配列数式の比較: =LEN(B4:B11) //------------------------------- // Evaluate は Excel 2019 以前準拠のため、LEN に配列を直接渡すと #VALUE! になる var evalSingle = sheet.Evaluate("=LEN(B4:B11)"); sheet.Range["C4"].Value = evalSingle; // Evaluate2 はスピル範囲の全結果を返す var evalSpill = sheet.Evaluate2("=LEN(B4:B11)"); sheet.Range["D4:D11"].Value = evalSpill; //------------------------------- // 2) 参照を返す式の比較: =B4:B11 // → 両者とも IRange を返す(同じ動作) //------------------------------- IRange refEval = (IRange)sheet.Evaluate("=B4:B11"); IRange refEval2 = (IRange)sheet.Evaluate2("=B4:B11"); sheet.Range["F4:F11"].Value = refEval.Value; sheet.Range["G4:G11"].Value = refEval2.Value; //------------------------------- // 3) 通常の数式の比較: =LEN(B4) // → どちらも単一値(同じ動作) //------------------------------- sheet.Range["B13"].Value = "通常の数式の比較 (=LEN(B4))"; var normal1 = sheet.Evaluate("=LEN(B4)"); var normal2 = sheet.Evaluate2("=LEN(B4)"); sheet.Range["C13"].Value = normal1; sheet.Range["D13"].Value = normal2; // 列幅調整 sheet.Range["B:D"].AutoFit(); sheet.Range["F:G"].AutoFit(); // xlsx ファイルに保存 workbook.Save("Evaluate2.xlsx");
' 新規ワークブックの作成 Dim workbook As New Workbook Dim sheet = workbook.Worksheets(0) #Region "Init Data" sheet.Name = "API Evaluate2" sheet.Range("B3:B11").Value = New Object(,) { {"商品名"}, {"りんご"}, {"ぶどう"}, {"なし"}, {"バナナ"}, {"ココナッツ"}, {"いちご"}, {"みかん"}, {"パイナップル"} } sheet.Range("C3").Value = "Evaluate 結果" sheet.Range("D3").Value = "Evaluate2 結果" sheet.Range("F2").Value = "参照返却の比較 (=B4:B11)" sheet.Range("F3").Value = "Evaluate 結果" sheet.Range("G3").Value = "Evaluate2 結果" Dim table As ITable = sheet.Tables.Add(sheet.Range("B3:B11"), True) Dim table1 As ITable = sheet.Tables.Add(sheet.Range("C3:C11"), True) Dim table2 As ITable = sheet.Tables.Add(sheet.Range("D3:D11"), True) table.ConvertToRange() table1.ConvertToRange() table2.ConvertToRange() #End Region '------------------------------- ' 1) 動的配列数式の比較: =LEN(B4:B11) '------------------------------- ' Evaluate は Excel 2019 以前準拠のため、LEN に配列を直接渡すと #VALUE! になる Dim evalSingle = sheet.Evaluate("=LEN(B4:B11)") sheet.Range("C4").Value = evalSingle ' Evaluate2 はスピル範囲の全結果を返す Dim evalSpill = sheet.Evaluate2("=LEN(B4:B11)") sheet.Range("D4:D11").Value = evalSpill '------------------------------- ' 2) 参照を返す式の比較: =B4:B11 ' → 両者とも IRange を返す(同じ動作) '------------------------------- Dim refEval As IRange = DirectCast(sheet.Evaluate("=B4:B11"), IRange) Dim refEval2 As IRange = DirectCast(sheet.Evaluate2("=B4:B11"), IRange) sheet.Range("F4:F11").Value = refEval.Value sheet.Range("G4:G11").Value = refEval2.Value '------------------------------- ' 3) 通常の数式の比較: =LEN(B4) ' → どちらも単一値(同じ動作) '------------------------------- sheet.Range("B13").Value = "通常の数式の比較 (=LEN(B4))" Dim normal1 = sheet.Evaluate("=LEN(B4)") Dim normal2 = sheet.Evaluate2("=LEN(B4)") sheet.Range("C13").Value = normal1 sheet.Range("D13").Value = normal2 ' 列幅調整 sheet.Range("B:D").AutoFit() sheet.Range("F:G").AutoFit() ' xlsx ファイルに保存 workbook.Save("Evaluate2.xlsx")