C# Excel 背景色設定 色が出ない

このQ&Aのポイント
  • C#でExcelを作るプログラムを作成しています。背景色を任意の色に設定したいのですが、設定出来る色と出来ない色があるようで、両者の違いがよくわかりません。
  • もし原因をご存知の方がいらっしゃいましたらご教授ください。
  • 実行環境とソースについては、Microsoft Visual Studio 2005を使用しており、Interop.Excel.dllのバージョンは1.3.0.0です。
回答を見る
  • ベストアンサー

C# Excel 背景色設定 色が出ない

C#でExcelを作るプログラムを作成しています。 背景色を任意の色に設定したいのですが、 設定出来る色と出来ない色があるようで、 両者の違いがよくわかりません。 もし原因をご存知の方がいらっしゃいましたらご教授ください。 実行環境とソースは以下のものとなります。 ----- 実行環境ここから Microsoft Visual Studio 2005 Version 8.0.50727.42 (RTM.050727-4200) Microsoft .NET Framework Version 2.0.50727 SP2 Microsoft Visual C# 2005(Edition: Professional) Interop.Excel.dll: 1.3.0.0 ----- 実行環境ここまで ----- ソース抜粋ここから // 準備 string fileName = "D:\\project\\test.xls"; Excel.Application app = new Excel.Application(); app.Visible = false; Excel.Workbook workbook = app.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet); workbook.Activate(); Excel.Sheets sheets = workbook.Sheets; Excel.Worksheet sheet = (Excel.Worksheet)sheets[sheets.Count]; // 色指定"#FFFFEE" -> 白で塗りつぶされる (sheet.get_Range(sheet.Cells[1, 1], sheet.Cells[1, 1])).Interior.Color = ColorTranslator.ToOle(ColorTranslator.FromHtml("#FFFFEE")); // 色指定"#CCFFFF" -> 指定色で塗りつぶされる (sheet.get_Range(sheet.Cells[1, 2], sheet.Cells[1, 2])).Interior.Color = ColorTranslator.ToOle(ColorTranslator.FromHtml("#CCFFFF")); // 色指定"#FFCCFF" -> 白で塗りつぶされる (sheet.get_Range(sheet.Cells[1, 3], sheet.Cells[1, 3])).Interior.Color = ColorTranslator.ToOle(ColorTranslator.FromHtml("#FFCCFF")); // 色指定"#FFF3F9" -> 白で塗りつぶされる (sheet.get_Range(sheet.Cells[1, 4], sheet.Cells[1, 4])).Interior.Color = ColorTranslator.ToOle(ColorTranslator.FromHtml("#FFF3F9")); // 色指定"#FFFF33" -> 指定色で塗りつぶされる (sheet.get_Range(sheet.Cells[1, 5], sheet.Cells[1, 5])).Interior.Color = ColorTranslator.ToOle(ColorTranslator.FromHtml("#FFFF33")); // 色指定"#FFCC33" -> 指定色で塗りつぶされる (sheet.get_Range(sheet.Cells[1, 6], sheet.Cells[1, 6])).Interior.Color = ColorTranslator.ToOle(ColorTranslator.FromHtml("#FFCC33")); // 終了処理 workbook.SaveAs(fileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing); workbook.Close(false, Type.Missing, Type.Missing); app.Quit(); ----- ソース抜粋ここまで

質問者が選んだベストアンサー

  • ベストアンサー
  • phoenix343
  • ベストアンサー率15% (296/1946)
回答No.1

結論から言うと、Excelの仕様かなと思います 以下のページが参考になりますかね? Excelで同時に指定できる色に限りがあるみたいです。 Excelでセルの色を変える - Interior.Colorでうまくいかない(Excel VBA) http://www.bird-soft.net/mt/2008/07/excel-interiorcolorexcel-vba.html

kkensetu
質問者

お礼

とても参考になりました。 貴重な情報ありがとうございます。

関連するQ&A

  • C# Excelファイルへの画像挿入。

    C# shapes.AddPictureによるExcelファイルへの画像挿入。 現在、C#でExcelファイル(xls)にPNG画像を貼り付けるツールを作成しています。 以下のプログラムを実行したのですが、 shapes.AddPicture(@"C:\test.png", MsoTriState.msoFalse,MsoTriState.msoFalse,fx, fy, 100,100); の部分で以下の様なエラーが表示されました。 ---------------- エラー文 ---------------- 型 'System.Runtime.InteropServices.COMException' のハンドルされていない例外が mscorlib.dll で発生しました 追加情報: 指定された値は境界を超えています。 ---------------- つきましては解決方法を教えてください。 ----------------------- プログラム ----------------------- Excel.Application exApp = new Excel.Application(); Excel.Workbook wkbook; Excel.Workbooks wkbooks = exApp.Workbooks; exApp.Visible = true; exApp.DisplayAlerts = false; wkbook = (Excel.Workbook)wkbooks.Open(@"C:\test.xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); Excel.Sheets sheets = wkbook.Worksheets; Excel.Worksheet wksheet = (Excel.Worksheet)sheets["test"]; Excel.Range cells = wksheet.Cells; Excel.Range range = (Excel.Range)cells[1, 21]; range.Select(); Excel.Shapes shapes = wksheet.Shapes; float fx = float.Parse(range.Left.ToString()); float fy = float.Parse(range.Top.ToString()); shapes.AddPicture(@"C:\test.png", MsoTriState.msoFalse,MsoTriState.msoFalse,fx, fy, 100,100); -----------------------

  • C#でEXCEL オープンできない

    C#でEXCEL オープンできない C#でEXCELファイルをオープンするプログラムを作りました。 自分のPCでは問題なくオープンすることができましたが、 他のPCで動かすとエラーが出てしまいます。(画像参照) 何が足りないのでしょうか、どなたかご教授ください。 よろしくお願いいたします。 以下、EXCELをオープンするソース部分 ---- using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using Excel = Microsoft.Office.Interop.Excel; namespace Testxxx { <中略> // ボタン押下時 private void btn_Click(object sender, EventArgs e) { // ファイル名作成 string sNewXls = Application.StartupPath + @"\TEST.xls"; // Excelをオープン Excel.Workbook oWBook = OpenExcel(sNewXls); } // エクセルオープン private Excel.Workbook OpenExcel(string strExFile) { Excel.Application oXls; Excel.Workbook oWBook; oXls = new Excel.Application(); // Excelファイルをオープンする oWBook = (Excel.Workbook)(oXls.Workbooks.Open(strExFile,Type.Missing,false,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing)); Excel.Worksheet oSheet; oSheet = (Excel.Worksheet)oWBook.Sheets[1]; oSheet.Unprotect("test99"); // 仮設定 oSheet.Cells[3, 12] = "10965"; oSheet.Cells[4, 12] = "102"; oSheet.Protect("test", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); oXls.Visible = true; // Excelのウィンドウを表示する // Excel終了 //oXls.Workbooks.Close(); //oXls.Quit(); //System.Runtime.InteropServices.Marshal.ReleaseComObject(oXls); return oWBook; } ----

  • C#でのEXCEL出力に関して

    教えて下さい。 C#でEXCELシートにデータを出力していますが、その際に以下のような記述をした場合、 EXCELファイルは作成されるものの、そのファイルをダブルクリックで開こうとすると、 EXCELの枠だけ表示され、中身のシートが表示されない現象となってしまいます。 それらしきオブジェクトはすべて開放しているつもりですが、その事象を解決できません。 どこがおかしいか教えて頂きたいと思います。 記述に過不足あればご指摘下さい。 尚、環境は、WindowsXP Office2000-EXCEL です。 《記述内容》 ////////////////////////////////// //ここからエクセルシートへの転記// ////////////////////////////////// Excel.Application objExcel = null; Excel.Workbooks objBooks = null; Excel.Workbook objBook = null; Excel.Worksheet sheet = null; Excel.Range range1 = null; Excel.Range range2 = null; Excel.Range range3 = null; //ExcelのCOMオブジェクトの生成 objExcel = new Excel.Application(); //Excelを表示する設定 //objExcel.Visible = isVisible; //ワークブックの集合体取得 objBooks = objExcel.Workbooks; //ブックの新規作成 objBook = objBooks.Add(Missing.Value); //シートを取得 sheet = (Excel.Worksheet)objBook.Sheets.get_Item(1); //Rangeを取得 range1 = (Excel.Range)sheet.Cells[1, 1]; range2 = (Excel.Range)sheet.Cells[1, 2]; //文字列を設定 //ヘッダ書き込み range1.Value = "仕入先名"; range2.Value = "図面番号"; //エクセルシート側の行数カウント変数 int rcount = 2; //データテーブル側の行数カウント変数 int tcount = 0; for (tcount = 0; tcount < mst_cnt;tcount++ ) { range1 = (Excel.Range)sheet.Cells[rcount, 1]; range2 = (Excel.Range)sheet.Cells[rcount, 2]; range1.Value = 仕入先名[tcount]; range2.Value = 図面番号[tcount]; rcount++; } //エクセルシート削除 DeleteFile(@"c:\\" + h_no + ".xls"); //エクセルシート生成 objBook.SaveAs( "c:\\" + h_no + ".xls", Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, 0, Missing.Value, Missing.Value, Missing.Value, Missing.Value ); //COMオブジェクト解放 Marshal.ReleaseComObject(range1); Marshal.ReleaseComObject(range2); //COMオブジェクトの開放(必須) Marshal.ReleaseComObject(objBook); objBook = null; Marshal.ReleaseComObject(sheet); sheet = null; Marshal.ReleaseComObject(objBooks); objBooks = null; //System.Runtime.InteropServices.Marshal.ReleaseComObject(objExcel); objExcel.Quit(); Marshal.ReleaseComObject(objExcel); objExcel = null; //objExcel.Quit(); return; } よろしくお願いします。

  • VBA Excel2003 謎のエラー

    いろいろ検索してみたのですが、問題が解決できません。 エクセルのSheet1のA1からG16のセルの内容を一つずつ感知し、マイナスだったら赤、プラスだったら緑、それ以外だったら何もしないという処理にしたいです。 Private Sub Workbook_Open() ThisWorkbook.Sheets("Sheet1").Select ThisWorkbook.Sheets("Sheet1").Range("A1").Select Dim 英語 As Integer Dim 数字 As Integer Dim sheet1 As Worksheets sh1 = Worksheets("Sheet1") sh1.Activate 英語 = 1 数字 = 1 For 数字 = 1 To 16 For 英語 = 1 To 6 '選択位置が、マイナスだったら赤、プラスだったら緑、それ以外は無視 If Range(sh1.Cells(英語 & 数字)) < 0 Then Range(sh1.Cells(英語 & 数字)).Interior.ColorIndex = 7 ElseIf Range(sh1.Cells(英語 & 数字)) > 0 Then Range(sh1.Cells(英語 & 数字)).Interior.ColorIndex = 4 Else Range(sh1.Cells(英語 & 数字)).Interior.ColorIndex = 0 End If 英語 = 英語 + 1 Next 英語 数字 = 数字 + 1 Next 数字 End Sub

  • VS2003.NET(C#)からのEXCELのプロセス解放

    ご存知の方がいたら教えて下さい。 【動作環境】 OS:WINDOWS XP(SP2) VisualStadio20003.NET(C#) EXCEL2003 VS.NETのプロジェクトメニューの参照の追加で「Microsoft Excel 11.0 Object Library」を追加してあります。 セルの更新を行った場合に、プロセスが解放されずに残ってしまいます。 (セルの更新を行っている行を実行しない場合にはプロセスは解放されます) いろいろ調べてはみたのですが、どうも原因がつかめません。 ご存知の方がいましたら教えてください。 (以下ソースコードになります) Excel.Application app; Excel.Workbook book; Excel.Worksheet sheet; Excel.Workbooks books; Excel.Sheets sheets; Excel.Range range; app = new Excel.Application(); books = app.Workbooks; book = books.Add("c:\\inetpub\\wwwroot\\ExcelData.xls"); sheets = book.Worksheets; sheet = (Excel.Worksheet)sheets["Sheet1"]; range = sheet.get_Range("A1","A1"); range.Value2 = "テストです"; // 解放 Marshal.ReleaseComObject(range); Marshal.ReleaseComObject(sheet); Marshal.ReleaseComObject(sheets); Marshal.ReleaseComObject(book); Marshal.ReleaseComObject(books); // Excel終了 app.Quit(); Marshal.ReleaseComObject(app); よろしくお願いします。

  • 【C#】Excelへの出力と保存

    お世話になります。 よろしくお願いいたします。 現在ListBoxに表示された内容を、Excel保存できるようなプログラムを考えています。ListBoxにはカラムは5つあり、それぞれ文字列を表示しています。表示する文字列の中には00:00.000など、時間表示をしているものがあり、これはExcelの書式設定でSheetを文字列に変更する必要があるのかな?と思っています。 まずは基本的なファイル出力方法なのですが、いまいち理解できていません。ご教授のほどよろしくお願いいたします。 その前に、現在のファイル出力方法はFileStreamを使用しています。これは、既存のファイルを選択した場合、以前の文末に追記していく形式を取りたいために使用しています。(第二パラメータでTrue) この追記していくタイプで、現在SaveFileDialogより選択されたファイルに出力しています。拡張子が.xlsを選択された際は、\tを途中で入れ、セル移動をさせて記述し、保存しています。 一応これでExcelファイルが作成されるのですが、"0.000"などの小数点がついた場合、デフォルトのエクセルの設定ですと小数点以下が省略されてしまいます。(10.123→10) この時点で何か改良するべき点等がございましたら、ご教授のほどよろしくお願いいたします。 次にExcelファイル出力をさせた場合です。 この場合以下のようなソースコードを考えました。 // Excelを作成 Excel.Application app; app = new Excel.Application(); // 表示する app.Visible = true; // ワークシートを追加する Excel.Workbook workbook = app.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet); // ワークシートをアクティブにする workbook.Activate(); // シートコレクションを取得 Excel.Sheets sheets = workbook.Sheets; // 一番最後に追加したシートが返却される Object after = sheets[sheets.Count]; Object before = System.Reflection.Missing.Value; Excel.Worksheet sheet = (Excel.Worksheet)sheets[sheets.Count]; sheet.Cells[1, 2] = "名前"; sheet.Cells[1, 3] = "結果"; 上記のコードですと、Excelファイルが出力され、文字列も表示されています。しかし、書式設定や、ファイルの保存場所の指定などが分かりません。 サイトでExcel関連を調査したのですが、保存場所に関しての説明はほとんどされていませんでしたので、お知恵をお借りしたいと思います。 長文になってしまい、分かりづらいかも知れませんが、どうかよろしくお願いいたします。

  • C#でExcelのセル操作の件

    お世話になります。 .NET Frameworkで開発しています。 ソースコードはC#です。 中身でExcelのファイルに書き出す所があり、 その中で、Excelのセルに着色したり、文字を太文字にしたり する部分が有り、そこは何とか下記の様に対応出来たのですが、 セルを網掛けしなければならない箇所が有り、 色々ネットを見たのですが、やり方(コード書き方)が 分かりませんでした。 どなたかご親切な方ご教示下さいます様、 宜しくお願い致します。          記 Excel.Range RANGE = sheet1.get_Range(sheet1.Cells[1, 43], sheet1.Cells[1, 43]); RANGE.Interior.ColorIndex = 6; sheet1.Cells[1, 44] = "6ヶ月以内";

  • VBA 実行時エラー1004 について

    いつもお世話になります。 作表をしていて、項目に色をつけたいのですが VBA 実行時エラー1004 Rangeメソッドは失敗しました。Globalオブジェクト というエラーが If Range(Cells(5, n - 4)).Interior.Color = RGB(252, 213, 180) Then のところででます。 If Range("Z5").Interior.Color = RGB(252, 213, 180) Then とすると、実行できます。 Sub カラー() Dim n As Long '列番号取得 '最終列取得 n = Cells(5, Columns.Count).End(xlToLeft).Column MsgBox "最終列は" & n   '= 今回は30です。 'セルの色を変える If Range(Cells(5, n - 4)).Interior.Color = RGB(252, 213, 180) Then Range(Cells(3, n - 3), Cells(5, n)).Interior.Color = RGB(230, 184, 183) Range(Cells(39, n - 3), Cells(41, n)).Interior.Color = RGB(230, 184, 183) Range(Cells(68, n - 3), Cells(70, n)).Interior.Color = RGB(230, 184, 183) Range(Cells(104, n - 3), Cells(106, n)).Interior.Color = RGB(230, 184, 183) Range(Cells(133, n - 3), Cells(135, n)).Interior.Color = RGB(230, 184, 183) Range(Cells(169, n - 3), Cells(171, n)).Interior.Color = RGB(230, 184, 183) Range(Cells(198, n - 3), Cells(200, n)).Interior.Color = RGB(230, 184, 183) Range(Cells(234, n - 3), Cells(236, n)).Interior.Color = RGB(230, 184, 183) Range(Cells(263, n - 3), Cells(265, n)).Interior.Color = RGB(230, 184, 183) Range(Cells(299, n - 3), Cells(301, n)).Interior.Color = RGB(230, 184, 183) Range(Cells(329, n - 3), Cells(331, n)).Interior.Color = RGB(230, 184, 183) Range(Cells(365, n - 3), Cells(367, n)).Interior.Color = RGB(230, 184, 183) Else Range(Cells(3, n - 3), Cells(5, n)).Interior.Color = RGB(252, 213, 180) Range(Cells(39, n - 3), Cells(41, n)).Interior.Color = RGB(252, 213, 180) Range(Cells(68, n - 3), Cells(70, n)).Interior.Color = RGB(252, 213, 180) Range(Cells(104, n - 3), Cells(106, n)).Interior.Color = RGB(252, 213, 180) Range(Cells(133, n - 3), Cells(135, n)).Interior.Color = RGB(252, 213, 180) Range(Cells(169, n - 3), Cells(171, n)).Interior.Color = RGB(252, 213, 180) Range(Cells(198, n - 3), Cells(200, n)).Interior.Color = RGB(252, 213, 180) Range(Cells(234, n - 3), Cells(236, n)).Interior.Color = RGB(252, 213, 180) Range(Cells(263, n - 3), Cells(265, n)).Interior.Color = RGB(252, 213, 180) Range(Cells(299, n - 3), Cells(301, n)).Interior.Color = RGB(252, 213, 180) Range(Cells(329, n - 3), Cells(331, n)).Interior.Color = RGB(252, 213, 180) Range(Cells(365, n - 3), Cells(367, n)).Interior.Color = RGB(252, 213, 180) End If End Sub どこが間違っているのか教えていただけないでしょうか? あと、スマートなコードの書き方もお願いします。

  • Excel2007 VBAで行のセルカラー変更後の枠線

    VBAを使い行全体の色を変更しました。 Range(Cells(1, 1), Cells(1, 256)).Interior.Color = RGB(210, 210, 255) この方法だと完全に塗り潰されるのですが枠線を残すことはできないでしょうか? 宜しくお願いします

  • VBAのCopyコマンドについて

    エクセルVBAでシート3のRangeの値をからシート2のRangeへデータをコピーしようとしているのですが Sheets(3).Range("B3:B100").Copy _ Sheets(2).Range(Cells(3, col2 - 1), Cells(100, col2 - 1)) がうまくいって、 Sheets(3).Range(Cells(2, col1), Cells(100, col1)).Copy _ sheets(2).Range(Cells(2, col2), Cells(100, col2)) が何故、オブジェクト定義エラーになってしまうのがわかりません。 col1、col2は列の変数です。 よろしくお願いします。

専門家に質問してみよう