UWSC
Warning : Use of undefined constant full - assumed 'full' (this will throw an Error in a future version of PHP) in
/home/hikarujyouho/hikarujyouhou.com/public_html/wp-content/themes/giraffe/single.php on line
49
YOUTUBEチャンネル
https://www.youtube.com/channel/UCRzkIVd28RRt9fI4gNraIqQ/featured
1. EXCELの起動(visible)
CREATEOLEOBJからExcelのCOMオブジェクトを作成し、
visibleプロパティを操作してExcel表示させます
visibleプロパティ
EXCEL.visible = True / False
visibleプロパティ
・True・・・オブジェクトを表示します
・False・・・オブジェクトを非表示にします
EXCELを起動する
さあ、まずはExcelのCOMオブジェクトを生成し、起動させてみましょう。
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
上記のスクリプトを実行してみましょう。
するとExcelが画面に表示されます。
冒頭の「EXCEL = CREATEOLEOBJ(“Excel.Application”)」で、
ExcelのCOMオブジェクト(インスタンス)を作成し、EXCELという変数に格納しています。
続いて、そのExcelオブジェクトのvisibleプロパティの値をTrueに設定しています。
visibleとは「可視性」の意味で、オブジェクトの表示/非表示を司ります。
ただし、InternetExplorerとは少し異なり、Workbooks.add()という一文を加えることで、
通常Excelを起動した場合と同じ状況になります。
visibleプロパティの順番を変えてみよう
例えばVisible=Trueを先ではなく、Workbooks.add()の後に行った場合はどうなるでしょうか。
結果は変わらないことが想像できますが、
試しにやってみましょう。
スクリプトは以下になります。
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
どうでしょうか。
おそらく結果は変わらないでしょう。
ここでお伝えしたいことは、CREATEOLEOBJ(“Excel.Application”)で、
ExcelのCOMオブジェクトを作成した時点で、
利用や取得が可能になるメソッドやプロパティがあるという事です。
2. ワークブックの追加(workbooks.add)
ExcelのCOMオブジェクトを作成し、
ワークブックを追加します
workbooks.addメソッド
EXCEL.workbooks.add()
workbooks.add()
EXCELにワークブックを追加する
EXCELにワークブックを追加しましょう。
特に指定、設定をしていなければBook1という名前のワークブックが追加され
3枚のワークシート「Sheet1、Sheet2、Sheet3」が付属しているはずです。
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
上記のスクリプトを実行することで、結果を確認できます。
workbooks.addを複数実行するとどうなるか
workbooks.add()を連続してみましょう。 スクリプトは以下になります。
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
PRINT
EXCEL.workbooks.
count
() +
"つのワークブックがあります"
どうでしょうか。
2つのワークブックが追加され、
最後にワークブックの数をworkbooks.count()で取得しています。
3. アクティブワークブックとワークシートの追加(activeworkbook, worksheets.add)
Excelが起動しており、ワークブックが存在する場合に、
activeworkbookで選択しているワークブックを指定します。
そしてそのワークブックにワークシートを追加します。
activeworkbook
と
worksheets.add
EXCEL.activeworkbook.worksheets.add()
workbooks.add()
選択しているワークブックを指定しEXCELにワークシートを追加する
EXCELにワークシートを追加しましょう。
下記のスクリプトでは4枚のワークシート「Sheet4」が追加されます。
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
EXCEL.activeworkbook.worksheets.add()
上記のスクリプトを実行することで、結果を確認できます。
worksheets.addを複数実行し、数をかぞえる
worksheets.add()を連続してみましょう。 スクリプトは以下になります。
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
EXCEL.activeworkbook.worksheets.add()
EXCEL.activeworkbook.worksheets.add()
PRINT
EXCEL.activeworkbook.worksheets.
count
() +
"つのワークシートがあります"
どうでしょうか。
ワークブックにワークシートが追加され、
最後にワークシートの数をworksheets.count()で取得しています。
4. 既存Excelファイルのオープン(workbooks.open)
Excelファイルが存在する場合に、
そのファイルをオープンする方法を解説します。
workbooks.open
EXCEL.workbooks.open(ファイル)
workbooks.open()
Excelファイルをオープンする
例えばデスクトップにいくつかのExcelファイルが並んでいるとしましょう。
その中の一つ(yes.xls)をオープンします。
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
EXCEL.workbooks.open(
"C:\Users\root\Desktop\yes.xls"
)
上記のスクリプトを実行することで、結果を確認できます。
複数ファイルをオープンする
openを連続してみましょう。
デスクトップに3ファイル(yes.xls、no.xls、unknown.xls)が並んでいる場合
スクリプトは以下になります。
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
EXCEL.workbooks.open(
"C:\Users\root\Desktop\yes.xls"
)
EXCEL.workbooks.open(
"C:\Users\root\Desktop\no.xls"
)
EXCEL.workbooks.open(
"C:\Users\root\Desktop\unknown.xls"
)
FOR A = 1 TO EXCEL.workbooks.
count
()
PRINT
EXCEL.workbooks(A).name
どうでしょうか。
3ファイルがオープンされ、ファイル名が出力されます。
5. ワークシートの追加、ワークシートの選択と名前取得
ワークシートの追加、
および選択と名前取得をする方法を解説します
worksheets.add
worksheets(N).name
ワークシートの追加、選択、名前取得を実行
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
EXCEL.activeworkbook.worksheets.add()
FOR A = 1 TO Excel.activeworkbook.worksheets.
count
PRINT
Excel.activeworkbook.worksheets(A).name
上記のスクリプトを実行することで、結果を確認できます。
複数のシートを追加し、シート名を変更する
シートの名前は変更することができます。複数のワークシートを処理する以下のスクリプトを見てみましょう。
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
EXCEL.activeworkbook.worksheets.add()
FOR B = 1 TO Excel.activeworkbook.worksheets.
count
Excel.activeworkbook.worksheets(B).name =
"Rename_"
+ B
ワークブックにワークシートが10枚追加され、全てが「Rename_」で始まる名前になりました。
6. セルの位置を取得する
セルの位置を取得する
address([列絶対参照、行絶対参照])
//引数はTRUE/FALSEで指定
新規ワークブックを追加した際の現在のセル位置を取得する
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
PRINT
"絶対参照:"
+ EXCEL.ActiveCell.Address()
上記のスクリプトを実行することで、結果を確認できます。
ワークブックを新規追加すると、
A1の位置にセルが置かれています。
そのため結果が「$A$1」となります。
絶対参照、相対参照でセル位置を取得する
パラメータを利用することで、取得時に絶対参照か相対参照か選ぶことができます
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
PRINT
"絶対参照:"
+ EXCEL.ActiveCell.Address()
PRINT
"列相対参照:"
+ EXCEL.ActiveCell.Address(FALSE)
PRINT
"行相対参照:"
+ EXCEL.ActiveCell.Address(TRUE,FALSE)
PRINT
"相対参照:"
+ EXCEL.ActiveCell.Address(FALSE,FALSE)
それぞれ、絶対参照、列や行の相対参照、相対参照でセル位置を取得できました。
7. セルの行や列の位置を取得する
セルの行や列の位置を取得する
Row //行
Column //列
新規ワークブックを追加した際の現在のセルの行や列の位置を取得する
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
PRINT
"列の位置:"
+ EXCEL.ActiveCell.Row
PRINT
"行の位置:"
+ EXCEL.ActiveCell.Column
上記のスクリプトを実行することで、結果を確認できます。
ワークブックを新規追加すると、
A1の位置にセルが置かれています。
行は行番号となり、
列の場合はAから採番されているので、対応する数値が返ります。
セルの位置を変更してから取得してみる
上記のサンプルだと、結果がどちらも1となります。分かりやすい様にセルの位置を変えてから、再度取得してみましょう
サンプルは下記のようになります。
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
PRINT
"列の位置(初回時):"
+ EXCEL.ActiveCell.Row
PRINT
"行の位置(初回時):"
+ EXCEL.ActiveCell.Column
EXCEL.ActiveCell.Offset(10,15).Select
PRINT
"列の位置(変更後:"
+ EXCEL.ActiveCell.Row
PRINT
"行の位置(変更後):"
+ EXCEL.ActiveCell.Column
移動前と後で数値が変化しているのがわかると思います。
8. セルを絶対移動、相対移動する
セルを絶対移動、相対移動する
Range(セル位置).Select //絶対移動(例:A100、AC32)
ActiveCell.Offset(行, 列).Select //現在位置から相対移動
セルを移動してみる
絶対移動で行のアルファベット、列の数字を組み合わせたセル位置を入力し、Selectすることで該当場所へ移動できます。
ActiveCell.Offsetで行の数字、列の数字を入力し、Selectすることで該当場所へ移動できます。
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
EXCEL.Range(
"A30"
).Select
EXCEL.ActiveCell.Offset(1,2).Select
上記のスクリプトを実行することで、セルの移動結果を確認できます。
まずはA30の位置に移動、
そしてそこから下行に1つ、右列に2つ相対移動します。
セルの位置を確認しながら実行する
上記のサンプルだと、一瞬のうちに移動してしまうので確認がしづらいです。
分かりやすい様にメッセージを出しながら実行してみましょう。
スクリプトは下記のようになります。
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
EXCEL.Range(
"A30"
).Select
MSGBOX(EXCEL.ActiveCell.Address() +
"に移動しました"
)
EXCEL.Range(
"BC130"
).Select
MSGBOX(EXCEL.ActiveCell.Address() +
"に移動しました"
)
MSGBOX(EXCEL.ActiveCell.Address() +
"に移動しました"
)
EXCEL.ActiveCell.Offset(1,2).Select
PRINT
A +
"回目:"
+ EXCEL.ActiveCell.Address()
視覚的にセル移動を確認できたと思います。
9. 対象セルを含む領域の終端を取得する
対象セルを含む領域の終端を取得する
end(-4121).Address() //下終端セルのアドレス情報
end(-4161).Address() //右終端セルのアドレス情報
end(-4159).Address() //左終端セルのアドレス情報
end(-4162).Address() //上終端セルのアドレス情報
終端を取得する
下記のサンプルでは3 × 3の範囲で値を入力した範囲の終端のアドレスを取得しています
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
EXCEL.ActiveCell.Offset(A,0).value = RANDOM(30)
EXCEL.ActiveCell.Offset(A,B).value = RANDOM(30)
PRINT
"下終端:"
+ EXCEL.ActiveCell.
End
(-4121).Address()
PRINT
"右終端:"
+ EXCEL.ActiveCell.
End
(-4161).Address()
PRINT
"左終端:"
+ EXCEL.ActiveCell.
End
(-4159).Address()
PRINT
"上終端:"
+ EXCEL.ActiveCell.
End
(-4162).Address()
上記のスクリプトを実行することで、終端の情報が取得できます。
冒頭の例や、サンプルスクリプトではAddressで位置情報を取得していますが、
Selectによる移動、Valueによる値取得も行えます。
30 × 30の範囲で終端のアドレス、値を取得する
上記のサンプルより規模を大きくし、
かつ位置情報以外にもセル移動や値取得をしてみましょう。
スクリプトは下記のようになります。
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
EXCEL.ActiveCell.Offset(A,0).value = RANDOM(30)
EXCEL.ActiveCell.Offset(A,B).value = RANDOM(30)
PRINT
"下終端:"
+ EXCEL.ActiveCell.
End
(-4121).Address()
PRINT
"右終端:"
+ EXCEL.ActiveCell.
End
(-4161).Address()
PRINT
"左終端:"
+ EXCEL.ActiveCell.
End
(-4159).Address()
PRINT
"上終端:"
+ EXCEL.ActiveCell.
End
(-4162).Address()
PRINT
"下終端の値:"
+ EXCEL.ActiveCell.
End
(-4121).value
PRINT
"右終端の値:"
+ EXCEL.ActiveCell.
End
(-4161).value
PRINT
"左終端の値:"
+ EXCEL.ActiveCell.
End
(-4159).value
PRINT
"上終端の値:"
+ EXCEL.ActiveCell.
End
(-4162).value
EXCEL.ActiveCell.
End
(-4121).Select
EXCEL.ActiveCell.
End
(-4162).Select
EXCEL.ActiveCell.
End
(-4161).Select
EXCEL.ActiveCell.
End
(-4159).Select
終端を検知できるため、繰り返し処理の時にどこまで実行すればよいのか把握するのに便利です。
10. 特定の範囲を検索する
特定の範囲を検索する
Find(keyword)
文字列を指定し、検索に合致するセルに移動する
範囲を指定(Range(X:X)し、Findを実行することで、該当キーワードに一致するセルの位置情報を取得できます。
以下のサンプルにおいて、「a」と入力してから、セルの移動を行い、その後でFindで見つけた位置を選択しています。
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
EXCEL.ActiveCell.value =
"a"
EXCEL.ActiveCell.Offset(10,10).Select
A = EXCEL.Range(
"A1:J10"
).Find(
"a"
).Select
検索にヒットした箇所の背景色を変えてみる
上記のスクリプトでは、一瞬のうちに処理が完了してしまうので、本当に挙動したかわかりにくいです。
次のスクリプトで、メッセージによる処理のコメントや、検索結果セルの背景色の変更を実施してみます。
これで処理の流れがわかりやすくなると思います。
スクリプトは下記のようになります。
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
EXCEL.ActiveCell.value =
"a"
EXCEL.ActiveCell.Offset(10,10).Select
MSGBOX(
"いったん、セルを別の箇所に移動します"
)
MSGBOX(
"検索結果のセル位置を表示します"
)
PRINT
EXCEL.Range(
"A1:J10"
).Find(
"a"
).Address
MSGBOX(
"検索結果のセル位置を赤色にします"
)
EXCEL.Range(
"A1:J10"
).Find(
"a"
).Interior.ColorIndex = 3
該当のセルが赤色になりました。
11. 検索を繰り返す
検索を繰り返す
after = Find(keyword) //検索の返り値
FindNext(after) //次を検索:検索の返り値を引数にする
FindPrevious(after) //前を検索
検索を繰り返す
「特定の範囲を検索する」で、検索の方法について説明しました。
この記事では複数検索にヒットする状況の場合の、繰り返し方法を説明します。
複数の検索条件に合致するセルがあった場合に、次のセル、次のセルと移動する処理を実現するためFindNextやFindPreviousを使います。
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
EXCEL.ActiveCell.value =
"a"
+ i
EXCEL.ActiveCell.Offset(1,0).Select
After = EXCEL.Range(
"A1:A10"
).Find(
"a"
)
EXCEL.Range(
"A1:A10"
).Find(
"a"
).Select
EXCEL.Range(
"A1:A10"
).FindNext(After).Select
EXCEL.Range(
"A1:A10"
).FindPrevious(After).Select
メッセージを出しながら検索を繰り返す
上記のスクリプトでは、一瞬のうちに処理が完了してしまうので、挙動しているのか確認が難しいです。
次のスクリプトで、メッセージによる処理のコメント、背景色の変更が行われるので、検索の繰り返しがわかりやすく確認できます。
スクリプトは下記のようになります。
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
EXCEL.ActiveCell.value =
"a"
+ i
EXCEL.ActiveCell.Offset(1,0).Select
After = EXCEL.Range(
"A1:A10"
).Find(
"a"
)
MSGBOX(
"次を検索(あと"
+ i +
"回)"
)
EXCEL.Range(
"A1:A10"
).FindNext(After).Interior.ColorIndex = (i MOD 2) + 3
After = EXCEL.Range(
"A1:A10"
).FindNext(After)
MSGBOX(
"前を検索(あと"
+ i +
"回)"
)
EXCEL.Range(
"A1:A10"
).FindPrevious(After).Interior.ColorIndex = (i MOD 2) + 5
After = EXCEL.Range(
"A1:A10"
).FindPrevious(After)
繰り返し「次」「前」と検索できることが確認できました。
12. セル内の値を数式や文字列で取得する
セル内の値を数式や文字列で取得する
Formula //数式
Text //文字列
数式や文字列を取得する
valueの場合、セルに格納されている情報を取得しますが、
数式や、実際に表示されている値を取得する場合には上記の方法を使います。
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
EXCEL.ActiveCell.value =
"=rand()"
PRINT
EXCEL.ActiveCell.Formula
PRINT
EXCEL.ActiveCell.Text
数式のまま、あるいは表示文字列で取得できました。
valueとの違いを見てみる
続いて、valueにより取得した値も並べて表示し、違いを見て見ましょう
スクリプトは下記のようになります。
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
EXCEL.ActiveCell.value =
"=rand()"
PRINT
"値:"
+ EXCEL.ActiveCell.value
PRINT
"数式:"
+ EXCEL.ActiveCell.Formula
PRINT
"表示:"
+ EXCEL.ActiveCell.Text
実現したい処理に応じて、取得する値の形式を分けてることができます。
13. オートフィルを実行する
オートフィルを実行する
AutoFill(Rangeオブジェクト, Type)
Rangeオブジェクト・・・Range(範囲)で取得できる範囲オブジェクト
Type・・・連続値の場合は2、最適値の場合は0、日付の場合は5、曜日は6を指定
※数値はxlFillSeriesクラスの定数を指定している
1と入力したセルの下に2、3、4・・・と連続させる
AutoFillメソッドで呼ばれるオートフィルという機能は
Excelでも重宝する機能です。
連続した数値の範囲を選択し、ドラッグすると連続した値を自動で埋めてくれます。
これをスクリプトで実現すると下記のようになります。
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
EXCEL.ActiveCell.value = 1
RNG = EXCEL.Range(
"A1:A10"
)
EXCEL.ActiveCell.AutoFill(RNG , 2)
1に続いて2~10までの値がオートフィルされました。
日付や曜日、適切な値の場合も見てみる
オートフィルのタイプに様々なタイプを指定してみましょう。
サンプルは下記の通りとなります。
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
EXCEL.ActiveCell.Offset(0,0) =
"連続値"
EXCEL.ActiveCell.Offset(0,1) =
"適切な値"
EXCEL.ActiveCell.Offset(0,2) =
"日付"
EXCEL.ActiveCell.Offset(0,3) =
"曜日"
EXCEL.ActiveCell.Offset(1,0) = 1
EXCEL.ActiveCell.Offset(1,1) = 100
EXCEL.ActiveCell.Offset(2,1) = 110
EXCEL.ActiveCell.Offset(1,2) =
"2012/1/1"
EXCEL.ActiveCell.Offset(1,3) =
"Sunday"
RNG1 = EXCEL.Range(
"A2:A10"
)
RNG2 = EXCEL.Range(
"B2:B10"
)
RNG3 = EXCEL.Range(
"C2:C10"
)
RNG4 = EXCEL.Range(
"D2:D10"
)
EXCEL.ActiveCell.Offset(1,0).AutoFill(RNG1 , 2)
EXCEL.Range(
"B2:B3"
).AutoFill(RNG2 , 0)
EXCEL.ActiveCell.Offset(1,2).AutoFill(RNG3 , 5)
EXCEL.ActiveCell.Offset(1,3).AutoFill(RNG4 , 6)
それぞれ、任意のオートフィルで値が展開されています。
14. 色を指定する
色を指定する
Color = 16進数
ColorIndex = 0~56
ColorもしくはColorIndexで色を指定する
Colorは16進数での色指定、ColorIndexはあらかじめ決められた色セットの数値(57色)から選択指定します。
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
EXCEL.ActiveCell.Interior.Color =
$808000
EXCEL.ActiveCell.Offset(1,0).Interior.ColorIndex = 13
ColorIndexの一覧を見てみる
実際はColorで16進数指定する事は煩雑なため、
ColorIndexを使うケースが多いです。
下記のスクリプトでColorIndexの一覧を出力してみましょう。
スクリプトは以下のようになります。
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
EXCEL.ActiveCell.value = A
EXCEL.ActiveCell.Offset(0,1).Interior.ColorIndex = A
EXCEL.ActiveCell.Offset(1,0).Select
ColorIndexの一覧とその番号を確認できました。3=赤、5=青、46=オレンジなどを知っておくと便利です。
15. 特定の範囲を置換する
特定の範囲を置換する
Find(keyword)
文字列を指定し、検索で合致するセルを置換する
範囲を指定(Range(X:X)し、Replaceを実行することで、該当キーワードに一致するセルの文字列を指定文字列に置換できます。
以下のサンプルにおいて、「おにぎり」と入力し、セルの移動を行い、その後でReplaceで「パン」に置換しています。
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
EXCEL.ActiveCell.value =
"おにぎり"
EXCEL.ActiveCell.Offset(10,10).Select
A = EXCEL.Range(
"A1:J10"
).Replace(
"おにぎり"
,
"パン"
)
複数の箇所が置換されるか確認する
上記のスクリプトでは、一瞬のうちに処理が完了してしまうので、本当に挙動したかわかりにくいです。
次のスクリプトで、メッセージによる処理のコメントを行い、複数セルの一斉処理が出来るか確認してみましょう
これで処理の流れがわかりやすくなると思います。
スクリプトは下記のようになります。
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
EXCEL.ActiveCell.value =
"a"
EXCEL.ActiveCell.Offset(10,10).Select
MSGBOX(
"いったん、セルを別の箇所に移動します"
)
MSGBOX(
"検索結果のセル位置を表示します"
)
PRINT
EXCEL.Range(
"A1:J10"
).Find(
"a"
).Address
MSGBOX(
"検索結果のセル位置を赤色にします"
)
EXCEL.Range(
"A1:J10"
).Find(
"a"
).Interior.ColorIndex = 3
該当のセルが赤色になりました。
16. [ファイルを開く]を表示する
[ファイルを開く]を表示する
FindFile
[ファイルを開く]を表示する
ユーザが指定してファイルを開くようにすることができます。
ファイルを開いた後もスクリプトの作業は継続できます。
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
ファイルを開いたかを判定する
FindFileはTRUE/FALSEの値を返すので、ファイルを開いたか、開いていないか判定しましょう。
下記のスクリプトのようになります。
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
EXCEL.ActiveCell.value =
"ファイルを開きました"
ファイルを開くことができました。
17. 再計算を実行する
再計算を実行する
Calculate
計算式を再実行する
セルの値を再計算します。
例えば”=Now()”という関数が埋め込まれたセルは現在時間を表示します。再計算を実行することでまた最新の時間に更新されます。
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
EXCEL.ActiveCell.value =
"=Now()"
ランダム値を更新する
上のスクリプトでは、時間の経過が確認しずらいかもしれません。
代わりに乱数を使って、いっせいに再更新するスクリプトを実行してみます。
10×10の範囲内に”=RAND()”関数を挿入し、0~1の間のランダムな数が表示されます。
そこで再計算を実行することで、ランダムな値が一斉に変わるようになります。 スクリプトは下記のようになります。
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
EXCEL.ActiveCell.Offset(A,B) =
"=Rand()"
MSGBOX( C +
"/3回目:再計算を実行します"
)
再計算が実行されました
18. [ファイルを開く]からファイル名を取得する
[ファイルを開く]からファイル名を取得する
GetOpenFileName
[ファイルを開く]を表示して、選択されたファイル名を取得する
このメソッドは、ファイルを開くのではなく、選択されたファイルの名称を取得します
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
PRINT
EXCEL.GetOpenFileName
ファイルを開いたかを判定する
選択されなかった場合はFALSEの値を返すので、ファイルを開いたか、開いていないか判定しましょう。
下記のスクリプトのようになります。
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
FileName = EXCEL.GetOpenFileName
ファイルを開くことができました。
19. ワークブック名、シート名を取得・選択する
ワークブック名、シート名を取得・選択する
ActiveWorkbook.name
ActiveWorksheet.name
Sheets.count
Sheets(N).Select
ワークブック名、シート名を取得・選択する
ワークブックの名前やシートの名前をNameで取得することが出来ます。
またSheetsオブジェクトに対してCountをすることでシート数を取得できます。
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
PRINT
"ワークブック名:"
+ EXCEL.ActiveWorkbook.name
PRINT
"ワークシート名:"
+ EXCEL.ActiveSheet.Name
PRINT
"シート数:"
+ EXCEL.Sheets.
count
sName = EXCEL.ActiveSheet.Name
EXCEL.Sheets(sName).Select
全てのシート名を取得する
上のスクリプトで、ワークブック名、ワークシート名、シート数を取得できました。
これらのパーツを組み合わせて、現在選択しているワークブックの全てのシート名を取得、選択してみましょう。
下記のスクリプトのようになります。
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
PRINT
"ワークブック名:"
+ EXCEL.ActiveWorkbook.Name
PRINT
"ワークシート名:"
+ EXCEL.ActiveSheet.Name
PRINT
"シート数:"
+ EXCEL.Sheets.
Count
FOR A = 1 TO EXCEL.Sheets.
count
PRINT
EXCEL.Sheets(A).name
シートの取得、選択を順番に行うので、最後のシートが選択されて終了していることでしょう。
20. ブックを保存し閉じる
ブックを保存し閉じる
ActiveWorkbook.Save
ActiveWorkbook.SaveAs(ファイル名)
ActiveWorkbook.Saved
ActiveWorkbook.Close
ブックを保存し閉じる
ブックを上書き保存(Save)、別名で保存(SaveAs)をすることができます。
またブックの変更後に保存されたか否かをSavedで取得することができます。
最後にCloseとすることでブックが閉じられます。
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
EXCEL.ActiveWorkbook.Save
EXCEL.ActiveWorkbook.SaveAS(
"C:\myBook.xls"
)
PRINT
"保存済み? "
EXCEL.ActiveWorkbook.Saved
EXCEL.ActiveWorkbook.Close
上記のスクリプトを実施すると、ブックの保存やクローズが確認できます。
なお、上書き保存時に保存されるパスはご自身のマシンにより異なります。
※例えばマイドキュメントに保存されます
保存状況に応じて保存する
Savedを使うことにより、未保存時はFalse、保存時はTrueが返ります。
条件分岐に使用し、未保存ならば上書き、保存済みならば別名で保存をするようにしてみます。
スクリプトは下記のとおりです。
EXCEL = CREATEOLEOBJ(
"Excel.Application"
)
IF EXCEL.ActiveWorkbook.Saved = False
EXCEL.ActiveWorkbook.Save
EXCEL.ActiveWorkbook.SaveAS(
"C:\myObject.xls"
)
EXCEL.ActiveWorkbook.Close
シートの取得、選択を順番に行うので、最後のシートが選択されて終了していることでしょう。
スポンサーリンク
Warning : Use of undefined constant full - assumed 'full' (this will throw an Error in a future version of PHP) in
/home/hikarujyouho/hikarujyouhou.com/public_html/wp-content/themes/giraffe/iine.php on line
4