複数のEXCELファイルを制御したい

ひとつのスクリプトで複数のExcelファイルからデータを取得したいのですが、 うまくいきません。 スクリプトは下記の通りです。
// A1には『りんご』 A2 には『ごりら』

PT1 = "C:\Users\UWSC\Desktop\TEST1.xls"
PT2 = "C:\Users\UWSC\Desktop\TEST2.xls"

Excel = XLOPEN(PT1)
PRINT XLGETDATA( Excel,"A1") //結果:りんご

Excel = XLOPEN(PT2)
PRINT XLGETDATA( Excel,"A2") //結果:ごりら
PRINT XLGETDATA( Excel,"A1") //結果は空になる

対策を教えて下さい。

COMオブジェクトの認識の問題ですね。

エクセルの操作はExcel = XLOPEN(ファイル名)と考えがちですが、
実際は戻値 = XLOPEN(ファイル名)です。
なので、戻値のCOMオブジェクトを適切に設定すれば、解決します。

修正コード

PT1 = "C:\Users\UWSC\Desktop\TEST1.xls"
PT2 = "C:\Users\UWSC\Desktop\TEST2.xls"

Excel = XLOPEN(PT1)
PRINT XLGETDATA( Excel,"A1") //結果:りんご

Excel2 = XLOPEN(PT2)
PRINT XLGETDATA( Excel2,"A2") //結果:ごりら
PRINT XLGETDATA( Excel,"A1")  //結果はりんご

ちなみに、COMオブジェクトをクリアーしないで、質問のコードを連続して走らせると、
『空』→『ごりら』→『空』になります。

タグ

2013年3月6日 | コメントは受け付けていません。 |

カテゴリー:Q&A

ブックを保存し閉じる

ブックを保存し閉じる


ActiveWorkbook.Save
ActiveWorkbook.SaveAs(ファイル名)
ActiveWorkbook.Saved
ActiveWorkbook.Close

ブックを保存し閉じる

ブックを上書き保存(Save)、別名で保存(SaveAs)をすることができます。
またブックの変更後に保存されたか否かをSavedで取得することができます。
最後にCloseとすることでブックが閉じられます。

EXCEL = CREATEOLEOBJ("Excel.Application")
EXCEL.visible = True
EXCEL.Workbooks.add()
EXCEL.ActiveWorkbook.Save
EXCEL.ActiveWorkbook.SaveAS("C:\myBook.xls")
PRINT "保存済み? "EXCEL.ActiveWorkbook.Saved
EXCEL.ActiveWorkbook.Close

上記のスクリプトを実施すると、ブックの保存やクローズが確認できます。
なお、上書き保存時に保存されるパスはご自身のマシンにより異なります。
※例えばマイドキュメントに保存されます

保存状況に応じて保存する

Savedを使うことにより、未保存時はFalse、保存時はTrueが返ります。
条件分岐に使用し、未保存ならば上書き、保存済みならば別名で保存をするようにしてみます。
スクリプトは下記のとおりです。

この投稿の続きを読む »

タグ

2013年1月14日 | コメントは受け付けていません。 |

カテゴリー:UWSCとExcel

ワークブック名、シート名を取得・選択する

ワークブック名、シート名を取得・選択する


ActiveWorkbook.name
ActiveWorksheet.name
Sheets.count
Sheets(N).Select

ワークブック名、シート名を取得・選択する

ワークブックの名前やシートの名前をNameで取得することが出来ます。
またSheetsオブジェクトに対してCountをすることでシート数を取得できます。

EXCEL = CREATEOLEOBJ("Excel.Application")
EXCEL.visible = True
EXCEL.workbooks.add()
PRINT "ワークブック名:" + EXCEL.ActiveWorkbook.name
PRINT "ワークシート名:" + EXCEL.ActiveSheet.Name
PRINT "シート数:" + EXCEL.Sheets.count
sName = EXCEL.ActiveSheet.Name
EXCEL.Sheets(sName).Select

全てのシート名を取得する

上のスクリプトで、ワークブック名、ワークシート名、シート数を取得できました。
これらのパーツを組み合わせて、現在選択しているワークブックの全てのシート名を取得、選択してみましょう。
下記のスクリプトのようになります。

この投稿の続きを読む »

タグ

2013年1月6日 | コメントは受け付けていません。 |

カテゴリー:UWSCとExcel

[ファイルを開く]からファイル名を取得する

[ファイルを開く]からファイル名を取得する


GetOpenFileName

[ファイルを開く]を表示して、選択されたファイル名を取得する

このメソッドは、ファイルを開くのではなく、選択されたファイルの名称を取得します

EXCEL = CREATEOLEOBJ("Excel.Application")
EXCEL.visible = True
PRINT EXCEL.GetOpenFileName

ファイルを開いたかを判定する

選択されなかった場合はFALSEの値を返すので、ファイルを開いたか、開いていないか判定しましょう。
下記のスクリプトのようになります。

この投稿の続きを読む »

タグ

2013年1月2日 | コメントは受け付けていません。 |

カテゴリー:UWSCとExcel

再計算を実行する

再計算を実行する


Calculate

計算式を再実行する

セルの値を再計算します。

例えば”=Now()”という関数が埋め込まれたセルは現在時間を表示します。再計算を実行することでまた最新の時間に更新されます。

EXCEL = CREATEOLEOBJ("Excel.Application")
EXCEL.visible = True
EXCEL.workbooks.add()
EXCEL.ActiveCell.value = "=Now()"
MSGBOX("時間を更新します")
EXCEL.calculate

ランダム値を更新する

上のスクリプトでは、時間の経過が確認しずらいかもしれません。
代わりに乱数を使って、いっせいに再更新するスクリプトを実行してみます。
10×10の範囲内に”=RAND()”関数を挿入し、0~1の間のランダムな数が表示されます。
そこで再計算を実行することで、ランダムな値が一斉に変わるようになります。 スクリプトは下記のようになります。

この投稿の続きを読む »

タグ

2012年12月30日 | コメントは受け付けていません。 |

カテゴリー:UWSCとExcel

[ファイルを開く]を表示する

[ファイルを開く]を表示する


FindFile

[ファイルを開く]を表示する

ユーザが指定してファイルを開くようにすることができます。
ファイルを開いた後もスクリプトの作業は継続できます。

EXCEL = CREATEOLEOBJ("Excel.Application")
EXCEL.visible = True
EXCEL.FindFile

ファイルを開いたかを判定する

FindFileはTRUE/FALSEの値を返すので、ファイルを開いたか、開いていないか判定しましょう。
下記のスクリプトのようになります。

この投稿の続きを読む »

タグ

2012年12月27日 | コメントは受け付けていません。 |

カテゴリー:UWSCとExcel

特定の範囲を置換する

特定の範囲を置換する


Find(keyword)

文字列を指定し、検索で合致するセルを置換する

範囲を指定(Range(X:X)し、Replaceを実行することで、該当キーワードに一致するセルの文字列を指定文字列に置換できます。

以下のサンプルにおいて、「おにぎり」と入力し、セルの移動を行い、その後でReplaceで「パン」に置換しています。

EXCEL = CREATEOLEOBJ("Excel.Application")
EXCEL.visible = True
EXCEL.workbooks.add()
EXCEL.ActiveCell.value = "おにぎり"
EXCEL.ActiveCell.Offset(10,10).Select
A = EXCEL.Range("A1:J10").Replace("おにぎり","パン")

複数の箇所が置換されるか確認する

上記のスクリプトでは、一瞬のうちに処理が完了してしまうので、本当に挙動したかわかりにくいです。
次のスクリプトで、メッセージによる処理のコメントを行い、複数セルの一斉処理が出来るか確認してみましょう
これで処理の流れがわかりやすくなると思います。
スクリプトは下記のようになります。

この投稿の続きを読む »

タグ

2012年12月22日 | コメントは受け付けていません。 |

カテゴリー:UWSCとExcel

色を指定する

色を指定する


Color = 16進数
ColorIndex = 0~56

ColorもしくはColorIndexで色を指定する

Colorは16進数での色指定、ColorIndexはあらかじめ決められた色セットの数値(57色)から選択指定します。

EXCEL = CREATEOLEOBJ("Excel.Application")
EXCEL.visible = True
EXCEL.workbooks.add()
EXCEL.ActiveCell.Interior.Color = $808000
EXCEL.ActiveCell.Offset(1,0).Interior.ColorIndex = 13

ColorIndexの一覧を見てみる

実際はColorで16進数指定する事は煩雑なため、
ColorIndexを使うケースが多いです。
下記のスクリプトでColorIndexの一覧を出力してみましょう。

スクリプトは以下のようになります。

この投稿の続きを読む »

タグ

2012年12月19日 | コメントは受け付けていません。 |

カテゴリー:UWSCとExcel

ステータスバーを取得/設定

ステータスバーを取得/設定


StatusBar

ステータスバーに文字列を設定、取得する

StatusBarに文字列を設定することで、ステータスバーに任意の文字を表示できます。
ステータスバーにセットした文字を取得することも可能です。

EXCEL = CREATEOLEOBJ("Excel.Application")
EXCEL.visible = True
EXCEL.workbooks.add()
EXCEL.StatusBar = "ステータスバーにセット!"
PRINT EXCEL.StatusBar

参考に掲載したキャプチャのように、ステータスバーに値がセットできました

処理位置を表示するなど、便利な使い方も

ステータスバーに現在の処理位置を表示しておくことで、
途中でスクリプトが止まっても、どこまで処理したかわかる場合もあります。
UWSCのスクリプトが高速で処理している場合でも、
ステータスバーを活用することで進捗の可視化もはかれます。

スクリプトは以下のようになります。

この投稿の続きを読む »

タグ

2012年12月15日 | コメントは受け付けていません。 |

カテゴリー:UWSCとInternetExplorer

オートフィルを実行する

オートフィルを実行する


AutoFill(Rangeオブジェクト, Type)
Rangeオブジェクト・・・Range(範囲)で取得できる範囲オブジェクト
Type・・・連続値の場合は2、最適値の場合は0、日付の場合は5、曜日は6を指定
※数値はxlFillSeriesクラスの定数を指定している

1と入力したセルの下に2、3、4・・・と連続させる

AutoFillメソッドで呼ばれるオートフィルという機能は
Excelでも重宝する機能です。
連続した数値の範囲を選択し、ドラッグすると連続した値を自動で埋めてくれます。
これをスクリプトで実現すると下記のようになります。

EXCEL = CREATEOLEOBJ("Excel.Application")
EXCEL.visible = True
EXCEL.workbooks.add()
EXCEL.ActiveCell.value = 1  //開始値を入力
RNG = EXCEL.Range("A1:A10") //範囲を取得
EXCEL.ActiveCell.AutoFill(RNG , 2) //連続する値でオートフィル

1に続いて2~10までの値がオートフィルされました。

日付や曜日、適切な値の場合も見てみる

オートフィルのタイプに様々なタイプを指定してみましょう。
サンプルは下記の通りとなります。

この投稿の続きを読む »

タグ

2012年12月11日 | コメントは受け付けていません。 |

カテゴリー:UWSCとExcel

このページの先頭へ