解説書 「Delphi  Excel操作」
Delphi OLEのExcel操作術 第1回:基本編
Delphi OLEのExcel操作術 第2回:印刷編
Delphi OLEのExcel操作術 第3回:セル操作編(基本)

 


1.開く 閉じる

●新規作成

w1Excel := CreateOleObject('Excel.Application');
w1Excel.Visible := False;
w1WorkBook := w1Excel.Workbooks.Add;
while w1WorkBook.sheets.count < 1 do
begin
w1WorkBook.sheets.add;
end;
w1WorkSheet := w1WorkBook.WorkSheets[1];

●セーブ

w1WorkBook.SaveAs( Filename := AppPath + 'チェックシート');
w1WorkBook.close;
w1WorkBook :=unAssigned;
w1WorkSheet :=unAssigned;
w1Excel.Quit;

 


2.シート全体

●セル全体の背景色を付ける

//セル全体の背景色の指定
w1WorkSheet.Cells.Interior.ColorIndex := 2;  //白色

●セル全体のフォント指定

w1WorkSheet.Cells.Font.Size := 8;

●列幅の調整

//列幅調整
for wwI := 3 to 12 do w1WorkSheet.Columns[wwI].EntireColumn.AutoFit;

w1WorkSheet.Columns[2].ColumnWidth := 14;
w1WorkSheet.Columns[4].ColumnWidth := 14;
w1WorkSheet.Columns[6].ColumnWidth := 14;
w1WorkSheet.Columns[7].ColumnWidth := 14;

●並び替え

//SORT
w1WorkSheet.activate;
w1WorkSheet.range['B8:' + 'K' + wwCelEnd].sort (w1WorkSheet.Columns[3],xlAscending);

●ウインドゥ枠の固定

//ウインドゥ枠の固定
w1WorkSheet.Activate;
w1WorkSheet.Range['B8'].Select;
w1Excel.ActiveWindow.FreezePanes := True;


 


3.セル単位 行単位 列単位

●Font色の変更

wwPP : String;
wwPP := FormatFloat('###0', wwI+2);
w1WorkSheet.Range['A'+wwPP ,'H'+wwPP].font.ColorIndex := 3; //赤色

或いは

w1WorkSheet.Range['B3' ,'B3'].font.ColorIndex := 5;

 

●Fontサイズの変更

w1WorkSheet.Range['A2' ,'W2'].font.size := 10;

●Font強調文字

 w1WorkSheet.Range['B9' ,'B9'].font.Bold := True;

●セルの背景色

w1WorkSheet.Range['B'+wwPP ,'J'+wwPP].Interior.ColorIndex := 19;

●セルの高さの指定

//高さの指定
w1WorkSheet.Rows[7].RowHeight := 30;

●文字としてセルにセットする

w1WorkSheet.Cells[wwI+10,wwCol].NumberFormatLocal := '@';
w1WorkSheet.Cells[wwI+10,wwCol].Value := PIECE(Memo_Data.Lines.Strings[wwI],',', wwP, wwP) ;

●計算式
  普通に計算式としてセットするだけ

//=IF(L10="a",G10*K10,G10/K10)
wwCellNo := FormatFloat('###0', wwI+10);
w1WorkSheet.Cells[wwI+10,13].Value := '=IF(L' + wwCellNo + '="a",G' + wwCellNo + '*K' + wwCellNo + ',G' + wwCellNo + '/K' + wwCellNo + ')';

//=M10*R10*Q10*S10
if Ini_SYori = '1' then
w1WorkSheet.Cells[wwI+10,14].Value := '=M' + wwCellNo + '*R' + wwCellNo + '*Q' + wwCellNo + '*S' + wwCellNo

●列幅

//列幅調整
for wwI := 1 to 23 do w1WorkSheet.Columns[wwI].EntireColumn.AutoFit;
for wwI := 25 to 50 do w1WorkSheet.Columns[wwI].EntireColumn.AutoFit;
w1WorkSheet.Columns[1].ColumnWidth := 7.5;
w1WorkSheet.Columns[2].ColumnWidth := 5.5;
w1WorkSheet.Columns[3].ColumnWidth := 4;

●高さ

//高さの指定
w1WorkSheet.Rows[5].RowHeight := 30;
w1WorkSheet.Rows[6].RowHeight := 30;


 


4.罫線
 

//下の枠線
w1WorkSheet.Range['B'+wwPP ,'W'+wwPP].Borders[9].LineStyle := -4115;      //スタイル 破線
w1WorkSheet.Range['B'+wwPP ,'W'+wwPP].Borders[9].Weight := 1;     //細線 (最も細い罫線)

//左の枠線
w1WorkSheet.Range['B'+wwPP ,'W'+wwPP].Borders[7].LineStyle := -4115;
w1WorkSheet.Range['B'+wwPP ,'W'+wwPP].Borders[7].Weight := 1;

//右の枠線
w1WorkSheet.Range['B'+wwPP ,'W'+wwPP].Borders[10].LineStyle := -4115;
w1WorkSheet.Range['B'+wwPP ,'W'+wwPP].Borders[10].Weight := 1;

//選択内部の縦
w1WorkSheet.Range['B'+wwPP ,'W'+wwPP].Borders[11].LineStyle := -4115;
w1WorkSheet.Range['B'+wwPP ,'W'+wwPP].Borders[11].Weight := 1;



●LineStyle プロパティ
  罫線の種類を設定します。値の取得および設定が可能です。取得の場合、罫線の種類を表す定数の値を返します。

定数 内容
xlContinuous 1 実線
xlDashDot 4 一点鎖線
xlDashDotDot 5 ニ点鎖線
xlSlantDashDot 13 斜破線
xlDash -4115 破線
xlDot -4118 点線
xlDouble -4119 2 本線
xlLineStyleNone -4142 線なし


●Weight プロパティ
 罫線の太さを設定します。値の取得および設定が可能です。取得の場合、罫線の太さを表す定数の値を返します。

定数 内容
xlMedium -4138 普通
xlHairline 1 細線 (最も細い罫線)
xlThin 2 極細
xlThick 4 太線 (最も太い罫線)


●罫線の色を設定する

 Color プロパティ
ColorIndex プロパティThemeColor プロパティ・TintAndShade プロパティなどを使用して罫線の色を設定します。いずれものプロパティも、値の取得および設定が可能です。

【書式】

 

object.Color = rgb                         ・・・  色を表す RGB 値を指定します。

object.ColorIndex = c_index    ・・・  カラーパレットの色を表す 1 〜 56 のパレット番号を指定します。

object.ThemeColor = t_index   ・・・  テーマカラーの基本色を表すMsoThemeColorSchemeindex 列挙型の定数または値(1 〜 12)を指定します。

object.TintAndShade = single   ・・・  色の明るさを -1(暗い) 〜 1(明るい)で指定します。


 

サンプルVBAソース

 

Sub Sample_Borders()
    Dim myRng As Range    
    'セル「B2:I11」
    Set myRng = Range("B2:I11")    
    With myRng.Borders        
        '範囲内全ての罫線 黒・実線・普通線
        .Color = rgbBlack
        .LineStyle = xlContinuous
        .Weight = xlMedium
        
        '範囲内の水平罫線のみ 赤・ニ点鎖線・細線
        .Item(xlInsideHorizontal).Color = rgbRed
        .Item(xlInsideHorizontal).LineStyle = xlDashDotDot
        .Item(xlInsideHorizontal).Weight = xlHairline
        
        '範囲上のみ 青・太線
        .Item(xlEdgeTop).Color = rgbBlue
        .Item(xlEdgeTop).Weight = xlThick
        
        '範囲下のみ 青・太線
        .Item(xlEdgeBottom).Color = rgbBlue
        .Item(xlEdgeTop).Weight = xlThick
        
        '範囲左のみ 緑・太線
        .Item(xlEdgeLeft).Color = rgbGreen
        .Item(xlEdgeLeft).Weight = xlThick
        
        '範囲右のみ 緑・太線
        .Item(xlEdgeRight).Color = rgbGreen
        .Item(xlEdgeRight).Weight = xlThick
    End With
    
    'セル「B8:B11」に左下から右上の斜罫線
    With Range("B8:B11").Borders(xlDiagonalUp)
        '二重線
        .LineStyle = xlDouble        
        '色の設定
        .Color = RGB(220, 150, 20)        
        '太さ(普通)
        .Weight = xlMedium        
    End With        
End Sub

 


実行結果

Borders プロパティ 例


 


5.カラー

ColorIndex Color(10進数) Color(10進数/RGB) Color(16進数)
1   0 RGB(0,0,0) &H000000
2   16777215 RGB(255,255,255) &HFFFFFF
3   255 RGB(255,0,0) &H0000FF
4   65280 RGB(0,255,0) &H00FF00
5   16711680 RGB(0,0,255) &HFF0000
6   65535 RGB(255,255,0) &H00FFFF
7   16711935 RGB(255,0,255) &HFF00FF
8   16776960 RGB(0,255,255) &HFFFF00
9   128 RGB(128,0,0) &H000080
10   32768 RGB(0,128,0) &H008000
11   8388608 RGB(0,0,128) &H800000
12   32896 RGB(128,128,0) &H008080
13   8388736 RGB(128,0,128) &H800080
14   8421376 RGB(0,128,128) &H808000
15   12632256 RGB(192,192,192) &HC0C0C0
16   8421504 RGB(128,128,128) &H808080
17   16751001 RGB(153,153,255) &HFF9999
18   6697881 RGB(153,51,102) &H663399
19   13434879 RGB(255,255,204) &HCCFFFF
20   16777164 RGB(204,255,255) &HFFFFCC
21   6684774 RGB(102,0,102) &H660066
22   8421631 RGB(255,128,128) &H8080FF
23   13395456 RGB(0,102,204) &HCC6600
24   16764108 RGB(204,204,255) &HFFCCCC
25   8388608 RGB(0,0,128) &H800000
26   16711935 RGB(255,0,255) &HFF00FF
27   65535 RGB(255,255,0) &H00FFFF
28   16776960 RGB(0,255,255) &HFFFF00
29   8388736 RGB(128,0,128) &H800080
30   128 RGB(128,0,0) &H000080
31   8421376 RGB(0,128,128) &H808000
32   16711680 RGB(0,0,255) &HFF0000
33   16763904 RGB(0,204,255) &HFFCC00
34   16777164 RGB(204,255,255) &HFFFFCC
35   13434828 RGB(204,255,204) &HCCFFCC
36   10092543 RGB(255,255,153) &H99FFFF
37   16764057 RGB(153,204,255) &HFFCC99
38   13408767 RGB(255,153,204) &HCC99FF
39   16751052 RGB(204,153,255) &HFF99CC
40   10079487 RGB(255,204,153) &H99CCFF
41   16737843 RGB(51,102,255) &HFF6633
42   13421619 RGB(51,204,204) &HCCCC33
43   52377 RGB(153,204,0) &H00CC99
44   52479 RGB(255,204,0) &H00CCFF
45   39423 RGB(255,153,0) &H0099FF
46   26367 RGB(255,102,0) &H0066FF
47   10053222 RGB(102,102,153) &H996666
48   9868950 RGB(150,150,150) &H969696
49   6697728 RGB(0,51,102) &H663300
50   6723891 RGB(51,153,102) &H669933
51   13056 RGB(0,51,0) &H003300
52   13107 RGB(51,51,0) &H003333
53   13209 RGB(153,51,0) &H003399
54   6697881 RGB(153,51,102) &H663399
55   10040115 RGB(51,51,153) &H993333
56   3355443 RGB(51,51,51) &H333333

 

 


6.印刷
●用紙設定

//用紙設定
//PageSetup.PrintArea = Range('A1').CurrentRegion.Address
w1WorkSheet.PageSetup.Orientation := xlLandscape; //用紙向き 縦 xlPortrait;
w1WorkSheet.PageSetup.PaperSize := xlPaperA4; //用紙サイズ
//w1WorkSheet.PageSetup.LeftMargin := 10;
//w1WorkSheet.PageSetup.RightMargin := 10;
//w1WorkSheet.PageSetup.TopMargin := 10;
//w1WorkSheet.PageSetup.BottomMargin := 10;

w1WorkSheet.PageSetup.CenterHeader := '在庫数対比リスト';
w1WorkSheet.PageSetup.RightHeader := '&P/&N'; //ヘッダーに「ページ数/総ページ数」を印刷
w1WorkSheet.PageSetup.Zoom := False; //ズームを無効に
w1WorkSheet.PageSetup.FitToPagesTall := false; //縦を1ページ内で印刷
w1WorkSheet.PageSetup.FitToPagesWide := 1; //横を1ページ内で印刷