tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
VB2010 から Excel の表示処理速度を向上及び検索(VB.NET) ( No.37 )  [親スレッドへ]
日時: 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



 [スレッド一覧へ] [親スレッドへ]