

c#で既に作られたExcelファイルを開き、一定の範囲を指定して、  
条件付き書式を利用して空白のセルを「黄色」に表示したいですが、

[code]

    Excel.Range range = sheet.get_Range(一定の範囲);
    range.FormatConditions.Add(Excel.XlFormatConditionType.xlBlanksCondition);
    range.Interior.ColorIndex = ExcelColorIndex.Yellow;
    
[/code]

上記のコードで実行してみた結果、  
条件付き書式の書式で「黄色」が指定されるのではなく  
ただ範囲全体が塗り替える結果が出ました。

vbaのようにwithを利用しても`range.FormatConditions.Add(Excel.XlFormatConditionType.xlBlanksCondition).Interior.ColorIndex
= 27`  
を利用してもエラーが出ました。

条件付き書式の書式を「黄色」に設定する方法を教えていただけますでしょうか。


CC BY-SA 4.0
2022-03-17T04:33:11.903
86865
2023-09-17T07:07:00.770
2022-03-17T09:48:25.790
9820
51851
question
c# vba
C#でExcelの条件付き書式を指定したいです。


`Excel.Range`(範囲全体)に対して塗り替えるコードになっているのが原因です。  
`Excel.FormatCondition`(条件付き書式の書式)に対して塗り替えるように見直してください。  
`range.FormatConditions.Add`の戻り値として`Excel.FormatCondition`が返ってきますので、下記のコードのように記述するとうまく行くはずです。

[code]

    using System;
    using Excel = Microsoft.Office.Interop.Excel;
    
    namespace ConsoleApp1
    {
        class Program
        {
    
            static void Main(string[] args)
            {
                // ToDo 読み取り先ファイルパスに書きなおす
                string file = System.IO.Path.Combine(Environment.CurrentDirectory, "Book1.xlsx");
    
                Excel.Application app = new Excel.Application();
                Excel.Workbook book = app.Workbooks.Open(file);
                try
                {
                    Excel.Worksheet sheet = book.Worksheets[1];
                    Excel.Range range = sheet.Range["A1", "B2"];
    
                    // 条件付き書式の書式を変数に格納
                    Excel.FormatCondition condition = range.FormatConditions.Add(Excel.XlFormatConditionType.xlBlanksCondition);
                    // 書式のColorIndexを指定する
                    condition.Interior.ColorIndex = 27;
    
                    book.Save();
                }
                finally
                {
                    book.Close();
                }
            }
        }
    }
    
[/code]

後半のコードはvbaでwithを利用したのでしょうか？  
変数名が`range`になっていて意図しないエラーが発生しているかもしれません。  
vbaで下記のコードを実行したところ正常に動作しました。

[code]

    Sub ボタン1_Click()
        Dim rng As range
        Set rng = range("A1:B2")
        rng.FormatConditions.Add(Excel.XlFormatConditionType.xlBlanksCondition).Interior.ColorIndex = 27
    End Sub
    
[/code]

`rng`変数を`range`変数に変更した場合は下記のエラーが発生します。

[code]

    実行時エラー'91':
    オブジェクト変数または With ブロック変数が設定されていません。
    
[/code]


CC BY-SA 4.0
2022-03-17T09:45:57.587
86878
2022-03-17T09:45:57.587
9820
86865
answer