- 日時: 2012/07/02 11:08
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:Excel VBA,Excel2010,Excel 2005,表示処理速度を向上,検索 * *********************************************************************************** '=================================================================================================== '投 稿 日:2012.07.02 '投 稿 者:VBレスキュー(花ちゃん) 'タイトル:VB2010 から Excel の表示処理速度を向上及び検索(VB.NET) '========1=========2=========3=========4=========5=========6=========7=========8=========9=========0 まずは、>>32 VB2010 から Excel のセルに関する操作、1行 Tips 集その1及び2をご覧になってから こちらをご覧下さい。 尚、この Tips を使用される場合は、Excel の Com オブジェクトの解放に関する処理を理解 されてから使用するようにして下さい。 '-------------------------------------------------------------------------------
Private Sub Button33_Click(sender As System.Object, e As System.EventArgs) Handles Button33.Click Call ExcelOpen("", "") '新規ファイルをオープンして、Excel を起動 '========================== 表示処理速度を向上及び検索 ======================= '-------------------------------------------------------------------------- '仮データの入力 Dim xlRangeDat As Excel.Range = Nothing Dim xlRange As Excel.Range = Nothing Dim nRnd As New System.Random() Dim sTime0 As DateTime Dim eTime0 As DateTime xlApp.ScreenUpdating = False For i As Integer = 1 To 2 xlApp.ScreenUpdating = True '画面の更新を停止して表示処理速度を向上させる If i = 1 Then xlApp.ScreenUpdating = False sTime0 = Now '処理時間計測開始 For c As Integer = 1 To 50 For r As Integer = 1 To 50 xlRange = xlSheet.Range(R1ToA1(r, c), R1ToA1(r, c)) '1 〜 100 までのランダムなデータを作成 xlRange.Value = Strings.ChrW(CInt(nRnd.Next(12354, 12400))).ToString & _ Strings.ChrW(CInt(nRnd.Next(12354, 12400))).ToString MRComObject(xlRange) Next r Next c '画面の更新をする(デフォルトに戻す) xlApp.ScreenUpdating = True eTime0 = Now '処理時間計測終了 ' 3.8 秒 → 7.3 秒 MessageBox.Show(Me, eTime0.Subtract(sTime0).TotalSeconds & " 秒かかりました。") Next i
'[あい]を検索検索して見つかったセルをアクティブにする Dim xlCells As Excel.Range = Nothing Dim xlInterior As Excel.Interior = Nothing '下記のように、Cells プロパティを引数無しで使用しても解放されますが、 '検索範囲が解っているので、xlRange = xlSheet.Range(R1ToA1(1, 1), R1ToA1(50, 50)) の 'ようにした方が解放されやすい。 '尚、 xlSheet.Cells は、 xlSheet.Range("1:1048576") や xlSheet.Range("$1:$1048576") や 'xlSheet.Range("A1:XFD1048576") と指定するのも同じ事です。 'xlCells = xlSheet.Cells xlCells = xlSheet.Range(R1ToA1(1, 1), R1ToA1(50, 50)) xlRange = xlCells.Find("あい") If xlRange IsNot Nothing Then xlRange.Activate() xlInterior = xlRange.Interior xlInterior.Color = Color.Red xlApp.Goto(Reference:=xlRange, Scroll:=True) MessageBox.Show(Me, "大吉! 愛は、" & xlRange.Address & " に見つかりました。") ' Debug.Print(xlRange.Address) MRComObject(xlInterior) MRComObject(xlRange) Else MessageBox.Show(Me, "凶! 愛は、見つかりませんでした。") End If MRComObject(xlCells) '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
'============================================================================= 'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行 Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了 'Excel.EXE がタスクマネージャに残っていないか調査(実使用時は必要なし) Call ProcessCheck() End Sub
|