tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
VB2010 から Excel のセルに関する操作1行Tips集その3(VB.NET) ( No.35 )  [親スレッドへ]
日時: 2012/06/10 10:45
名前: VBレスキュー(花ちゃん)

***********************************************************************************
* カテゴリー:[エクセル][][]                                                      *
* キーワード:Excel VBA,Excel2010,セルに関する操作,行と列,セル参照,セル操作,範囲  *
***********************************************************************************
'===================================================================================================
'投 稿 日:2012.06.10
'投 稿 者:VBレスキュー(花ちゃん)
'タイトル:VB2010 から Excel のセルに関する操作1行Tips集その3(VB.NET)
'========1=========2=========3=========4=========5=========6=========7=========8=========9=========0
まずは、>>32 VB2010 から Excel のセルに関する操作、1行 Tips 集その1及び2をご覧になってから
こちらをご覧下さい。
尚、この Tips を使用される場合は、Excel の Com オブジェクトの解放に関する処理を理解
されてから使用するようにして下さい。
'-------------------------------------------------------------------------------

Private Sub Button32_Click(sender As System.Object, e As System.EventArgs) Handles Button32.Click
   Call ExcelOpen("", "")     '新規ファイルをオープンして、Excel を起動
   '==================== セルに関する操作1行Tips集その3 =======================
   '-------------------------------------------------------------------------------

   '1.Range オブジェクトの色々な、Clear メソッドを試す
   '・Range.Clear メソッド (オブジェクト全体をクリアします。)
   '指定のシートの指定のセル範囲のデータと数式と書式設定を削除します。

   MessageBox.Show(Me, "セル A1 〜 A4 の範囲に(Range.Clear)を試したいデータ" & _
                                          "(数式・書式・文字)等を入力して下さい。")
   Dim xlRange As Excel.Range = xlSheet.Range("A1:A4")
   xlRange.Clear()
   MRComObject(xlRange)

   '・Range.ClearContents メソッド(選択範囲から数式と文字を削除します。)
   '指定のシートの指定のセル範囲の書式設定を残して、数式と文字を削除します。
   MessageBox.Show(Me, "セル A1 〜 A4 の範囲に(ClearContents)を" & _
                              "試したいデータ(数式・書式・文字)等を入力して下さい。")
   xlRange = xlSheet.Range("A1:A4")
   xlRange.ClearContents()
   MRComObject(xlRange)

   '・Range.ClearFormats メソッド(オブジェクトの書式設定を削除します。)
   '指定のシートの指定のセル範囲のすべての書式設定を削除します。(数式やデータは削除されません。)
   MessageBox.Show(Me, "セル A1 〜 A4 の範囲に(ClearFormats)を" & _
                              "試したいデータ(数式・書式・文字)等を入力して下さい。")
   xlRange = xlSheet.Range("A1:A4")
   xlRange.ClearFormats()
   MRComObject(xlRange)

   '上記の他、下記のようなメソッドも用意されています。(別の項で紹介予定)
   '・Range.ClearComments メソッド(指定されたセル範囲からすべてのコメントを消去します。)
   '・Range.ClearNotes メソッド(指定されたセル範囲内のすべてのセルからコメントを削除します。)
   '・Range.ClearOutline メソッド(指定した範囲のアウトラインを消去します。)
   '確認のために、1秒間表示しておく
   System.Threading.Thread.Sleep(1000)

   '仮データの入力
   Dim xlRangeDat As Excel.Range = Nothing
   Dim n As Integer = 0
   For r As Integer = 1 To 10
      For c As Integer = 1 To 5
         n += 1
         xlRangeDat = xlSheet.Range(R1ToA1(r, c), R1ToA1(r, c))
         xlRangeDat.Value = n
         MRComObject(xlRangeDat)
      Next
   Next
   '確認のために、1秒間表示しておく
   System.Threading.Thread.Sleep(1000)

   '2.セル(セル範囲)をコピー及び貼り付ける
   Dim xlCopyRange As Excel.Range = xlSheet.Range("B2")
   Dim xlDestRange As Excel.Range = xlSheet.Range("G2")
   xlCopyRange.Copy(Destination:=xlDestRange)
   MRComObject(xlCopyRange)
   MRComObject(xlDestRange)
   '確認のために、1秒間表示しておく
   System.Threading.Thread.Sleep(1000)

   '3.セル(表全体)をコピー及び貼り付ける
   Dim xlCurrentRegion As Excel.Range
   xlCopyRange = xlSheet.Range("B2")
   xlCurrentRegion = xlCopyRange.CurrentRegion
   xlDestRange = xlSheet.Range("A15")
   xlCurrentRegion.Copy(Destination:=xlDestRange)
   MRComObject(xlCurrentRegion)
   MRComObject(xlCopyRange)
   MRComObject(xlDestRange)
   '確認のために、1秒間表示しておく
   System.Threading.Thread.Sleep(1000)

   '4.セル(セル範囲)を移動する
   xlCopyRange = xlSheet.Range("C3")
   xlDestRange = xlSheet.Range("H3")
   xlCopyRange.Cut(Destination:=xlDestRange)
   MRComObject(xlCopyRange)
   MRComObject(xlDestRange)
   '確認のために、1秒間表示しておく
   System.Threading.Thread.Sleep(1000)

   '5.セル(表全体)をを移動する
   xlCopyRange = xlSheet.Range("B2")
   xlCurrentRegion = xlCopyRange.CurrentRegion
   xlDestRange = xlSheet.Range("G11")
   xlCurrentRegion.Cut(Destination:=xlDestRange)
   MRComObject(xlCurrentRegion)
   MRComObject(xlCopyRange)
   MRComObject(xlDestRange)
   '確認のために、1秒間表示しておく
   System.Threading.Thread.Sleep(1000)

   '6.形式を選択して貼り付け
   xlRange = xlSheet.UsedRange
   xlRange.Clear()
   MRComObject(xlRange)
   n = 0
   For r As Integer = 1 To 5
      For c As Integer = 1 To 5
         n += 1
         xlRangeDat = xlSheet.Range(R1ToA1(r, c), R1ToA1(r, c))
         xlRangeDat.Value = n
         MRComObject(xlRangeDat)
      Next
   Next

   '確認のために、1秒間表示しておく
   System.Threading.Thread.Sleep(1000)
   xlRange = xlSheet.Range("A1:F6")
   'Excel をアクティブにする(エクセルにフォーカスを移す。)
   AppActivate(xlApp.Caption)    '必要ありませんが、見た目に解り易くする為に
   xlRange.Select()
   SendKeys.SendWait("%+(=)")
   MRComObject(xlRange)

   xlCopyRange = xlSheet.Range("B2")
   xlCurrentRegion = xlCopyRange.CurrentRegion
   xlCurrentRegion.Copy()
   MRComObject(xlCurrentRegion)
   MRComObject(xlCopyRange)

   xlDestRange = xlSheet.Range("A10")
   xlDestRange.PasteSpecial(Excel.XlPasteType.xlPasteValues)
   MRComObject(xlDestRange)
    '確認のために、1秒間表示しておく
   System.Threading.Thread.Sleep(1000)

   '7.セルのエラー値を取得する
   'xlRange = xlSheet.UsedRange
   'xlRange.Clear()

   'Excel 上にエラーを発生(生成)させる
   xlRange = xlSheet.Range("A1") : xlRange.Formula = "#DIV/0!"
   MRComObject(xlRange)
   xlRange = xlSheet.Range("A2") : xlRange.Formula = "#N/A"
   MRComObject(xlRange)
   xlRange = xlSheet.Range("A3") : xlRange.Formula = "#NAME?"
   MRComObject(xlRange)
   xlRange = xlSheet.Range("A4") : xlRange.Formula = "#NULL!"
   MRComObject(xlRange)
   xlRange = xlSheet.Range("A5") : xlRange.Formula = "#NUM!"
   MRComObject(xlRange)
   xlRange = xlSheet.Range("A6") : xlRange.Formula = "#REF!"
   MRComObject(xlRange)
   xlRange = xlSheet.Range("A7") : xlRange.Formula = "#VALUE!"
   MRComObject(xlRange)
   xlRange = xlSheet.Range("A8") : xlRange.Value = CDec("1234567890123")
   'この場合、Style オブジェクトでなく、Style プロパティなので、解放処理は必要ありません。
   xlRange.Style = "Currency [0]"
   xlRange.ColumnWidth = 8
   MRComObject(xlRange)

   '確認のために、2秒間表示しておく
   System.Threading.Thread.Sleep(2000)

   Dim xlFunction As Excel.WorksheetFunction = xlApp.WorksheetFunction
   For r As Integer = 1 To 10
      For c As Integer = 1 To 3
         xlRangeDat = xlSheet.Range(R1ToA1(r, c), R1ToA1(r, c))
         If xlFunction.IsError(xlRangeDat) Then
            'セル上のエラーの発生場所とエラーの種類を取得
            Debug.Print(" R" & r.ToString & ", C" & c.ToString & " で " & _
            xlRangeDat.Text.ToString & vbTab & "(" & xlRangeDat.Value.ToString & _
                                                         ") のエラーが発生しました。")
            'エラーが表示しているセルの書式設定を残して、数式と文字を削除(お好みで)
            xlRangeDat.ClearContents()
         End If
         '文字数に対して表示列幅が不足して[####]のように表示しているセルを改善。
         If xlRangeDat.Text.ToString.Length > 3 AndAlso _
                                    xlRangeDat.Text.ToString.Substring(0, 3) = "###" Then
            'データの文字列長に合せて列幅を自動調整
            xlRange = xlRangeDat.Columns
            xlRange.AutoFit()
            MRComObject(xlRange)
         End If
         MRComObject(xlRangeDat)
      Next
   Next
   MRComObject(xlFunction)

   '上記実行結果
   'R1, C1 で #DIV/0!    (-2146826281) のエラーが発生しました。
   'R2, C1 で #N/A       (-2146826246) のエラーが発生しました。
   'R3, C1 で #NAME?    (-2146826259) のエラーが発生しました。
   'R4, C1 で #NULL!    (-2146826288) のエラーが発生しました。
   'R5, C1 で #NUM!       (-2146826252) のエラーが発生しました。
   'R6, C1 で #REF!       (-2146826265) のエラーが発生しました。
   'R7, C1 で #VALUE!    (-2146826273) のエラーが発生しました。
   '確認のために、3秒間表示しておく
   System.Threading.Thread.Sleep(1000)

   '=============================================================================
   'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行
   Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False)  'False の場合保存しないで終了
   'Excel.EXE がタスクマネージャに残っていないか調査(実使用時は必要なし)
   Call ProcessCheck()
End Sub



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