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

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

Private Sub Button31_Click(sender As System.Object, e As System.EventArgs) Handles Button31.Click
   Call ExcelOpen("", "")     '新規ファイルをオープンして、Excel を起動

   '==================== セルに関する操作1行Tips集その2 =======================

   '1.アクティブ セル領域(空白行と空白列で囲まれたセル範囲)を取得
   Dim adrs1, adrs2 As String
   Dim msg As String = ""
   Dim xlRange As Excel.Range = Nothing
   'Worksheet.Range プロパティは、セルまたはセル範囲を表す Range オブジェクトを返します。
   xlRange = xlSheet.Range("A1:D5") 'xlSheet.Range プロパティが返す、Range オブジェクトを取得
   xlRange.Value = 123              '指定範囲内に仮データを入力
   MRComObject(xlRange)             '従って使い終わったら直ぐ、デクリメントする事。
   'ここで、違うセルを参照しているので(又は、変数名を別にするとか)
   xlRange = xlSheet.Range("F1:K5")
   xlRange.Value = "F1〜K5"
   MRComObject(xlRange)

   'セル "A1:D5" の範囲と"F1:K5" の範囲にデータが入っているものとして
   xlRange = xlSheet.Range("B2")
   Dim xlCurrentRegion As Excel.Range = Nothing
   'Range.CurrentRegion プロパティは、アクティブ セル領域(Range オブジェクト)を返します。
   xlCurrentRegion = xlRange.CurrentRegion
   adrs1 = xlRange.Address(RowAbsolute:=False, ColumnAbsolute:=False)
   adrs2 = xlCurrentRegion.Address(RowAbsolute:=False, ColumnAbsolute:=False)
   MRComObject(xlCurrentRegion)
   MRComObject(xlRange)
   msg = "No.1 セル [{0:}] のアクティブ セル領域は、[{1:}] です。"
   MessageBox.Show(Me, String.Format(msg, adrs1, adrs2))

   xlRange = xlSheet.Range("H3")
   xlCurrentRegion = xlRange.CurrentRegion
   adrs1 = xlRange.Address(RowAbsolute:=False, ColumnAbsolute:=False)
   adrs2 = xlCurrentRegion.Address(RowAbsolute:=False, ColumnAbsolute:=False)
   MRComObject(xlRange)
   MRComObject(xlCurrentRegion)
   MessageBox.Show(Me, String.Format(msg, adrs1, adrs2))
   '-------------------------------------------------------------------------------
   xlRange = xlSheet.Range("A1:L20")
   xlRange.Value = Nothing
   MRComObject(xlRange)
   MessageBox.Show(Me, "一旦データを削除しました。")
   '-------------------------------------------------------------------------------
   '2.現在のセルに対して相対的な位置を指定・取得
   xlRange = xlSheet.Range("A1:D5")
   xlRange.Value = "A1〜D5"
   Dim xlOffsetRange As Excel.Range = Nothing
   'Range.Offset プロパティは、指定された範囲からのオフセットの範囲を表す Range オブジェクトを返す
   xlOffsetRange = xlRange.Offset(RowOffset:=2, ColumnOffset:=6)
   xlOffsetRange.Value = "Offset"
   adrs1 = xlRange.Address(RowAbsolute:=False, ColumnAbsolute:=False)
   MRComObject(xlRange)
   adrs2 = xlOffsetRange.Address(RowAbsolute:=False, ColumnAbsolute:=False)
   MRComObject(xlOffsetRange)
   msg = "No.2 セル[{0:}]の Offset(RowOffset:=2, ColumnOffset:=6) の領域は、[{1:}]です。"
   MessageBox.Show(Me, String.Format(msg, adrs1, adrs2))
   'Offset プロパティの使用例は、VB2010からExcelを操作するためのワンポイントテクニック集内でも
   '幾つか使っていますので、最上部の[このページ内の検索ができます。]の所の検索ボックスに
   '[Offset]をキーにして検索して見て下さい。
   '-------------------------------------------------------------------------------
   '3.対象となるセルが含まれる領域の終端のセルを取得
   'End + 方向キー (↑、↓、←、→のいずれか) に相当します。
   xlRange = xlSheet.Range("A1:E6")    'A1:E6 の範囲に仮データを入力
   xlRange.Value = "A1〜E6"
   MRComObject(xlRange)

   Dim xlRangeEnd As Excel.Range
   xlRange = xlSheet.Range("D3")
   'Range.End プロパティは,対象となるセルが含まれる領域の終端のセルを示すRangeオブジェクトを返す
   xlRangeEnd = xlRange.End(Excel.XlDirection.xlToLeft)
   adrs1 = xlRangeEnd.Address(RowAbsolute:=False, ColumnAbsolute:=False)
   MRComObject(xlRangeEnd)
   MRComObject(xlRange)
   msg = "No.3 セル範囲 A1:E6 に対するセル位置 D3 からの左端のセル位置は、"
   MessageBox.Show(Me, msg & adrs1 & " です。")

   xlRange = xlSheet.Range("D3")
   xlRangeEnd = xlRange.End(Excel.XlDirection.xlToRight)
   adrs1 = xlRangeEnd.Address(RowAbsolute:=False, ColumnAbsolute:=False)
   MRComObject(xlRangeEnd)
   MRComObject(xlRange)
   msg = "No.3 セル範囲 A1:E6 に対するセル位置 D3 からの右端のセル位置は、"
   MessageBox.Show(Me, msg & adrs1 & " です。")

   xlRange = xlSheet.Range("D3")
   xlRangeEnd = xlRange.End(Excel.XlDirection.xlUp)
   adrs1 = xlRangeEnd.Address(RowAbsolute:=False, ColumnAbsolute:=False)
   MRComObject(xlRangeEnd)
   MRComObject(xlRange)
   msg = "No.3 セル範囲 A1:E6 に対するセル位置 D3 からの上端のセル位置は、"
   MessageBox.Show(Me, msg & adrs1 & " です。")

   xlRange = xlSheet.Range("D3")
   xlRangeEnd = xlRange.End(Excel.XlDirection.xlDown)
   adrs1 = xlRangeEnd.Address(RowAbsolute:=False, ColumnAbsolute:=False)
   MRComObject(xlRangeEnd)
   MRComObject(xlRange)
   msg = "No.3 セル範囲 A1:E6 に対するセル位置 D3 からの下端のセル位置は、"
   MessageBox.Show(Me, msg & adrs1 & " です。")

   '-------------------------------------------------------------------------------
   '4.指定されたワークシートで使われたセル範囲を取得
   'Worksheet.UsedRange プロパティは、指定されたワークシートで使われた
   'セル範囲(Range オブジェクト)を返します。
   xlRange = xlSheet.UsedRange
   adrs1 = xlRange.Address(RowAbsolute:=False, ColumnAbsolute:=False)
   MRComObject(xlRange)
   msg = "No.4 指定のシート内での使用済みセル範囲は、[ "
   MessageBox.Show(Me, msg & adrs1 & " ]です。")
   '-------------------------------------------------------------------------------
   '5.指定のセル範囲から指定した列数、行数分のセル範囲にサイズ変更し変更されたセル範囲を取得
   'Range.Rows プロパティは、指定されたセル範囲の行を表す Range オブジェクトを返します。
    xlRange = xlSheet.Range("B3")
   xlCurrentRegion = xlRange.CurrentRegion  'A1:E6
   Dim xlResize As Excel.Range = Nothing
   Dim rowsCount, columnsCount As Integer
   Dim xlRows As Excel.Range = Nothing
   Dim xlColumns As Excel.Range = Nothing
   xlRows = xlCurrentRegion.Rows

   rowsCount = xlRows.Count
   'Range.Columns プロパティは、指定されたセル範囲の列を表す Range オブジェクトを返します。
   xlColumns = xlCurrentRegion.Columns
   columnsCount = xlColumns.Count
   xlResize = xlCurrentRegion.Resize(rowsCount + 1, columnsCount + 1)
   MRComObject(xlColumns)
   MRComObject(xlRows)

   'Excel をアクティブにする(エクセルにフォーカスを移す。)
   AppActivate(xlApp.Caption)    '必要ありませんが、見た目に解り易くする為に
   xlResize.Select()             'サイズ変更した範囲を選択

   adrs1 = xlResize.Address(RowAbsolute:=False, ColumnAbsolute:=False)
   MRComObject(xlResize)
   MRComObject(xlCurrentRegion)
   MRComObject(xlRange)
   msg = "No.5 セルB3に対するセル範囲[A1:E6]に対して、行・列 +1 したセル位置は、"
   MessageBox.Show(Me, msg & adrs1 & " です。")
   '-------------------------------------------------------------------------------
   '-------------------------------------------------------------------------------
   '6.セルを結合(マージ)する
   Dim xlMergeRange As Excel.Range
   xlMergeRange = xlSheet.Range("B10:D10")
   'Range.Merge メソッドは、Range オブジェクト内のセルを結合して 1 つのセルにします。
   xlMergeRange.Merge()
   xlMergeRange.Value = "セル [B10:D10] を結合しました"
   MRComObject(xlMergeRange)
   '確認のために、1秒間表示しておく
   System.Threading.Thread.Sleep(1000)
   '-------------------------------------------------------------------------------
   '7.指定のセル位置の結合セル範囲を取得する
   '指定のセルが結合セル範囲にある場合
   'Range.MergeArea プロパティは、指定されたセルがある結合セル範囲を表すRangeオブジェクトを返す
   xlMergeRange = xlSheet.Range("C10")
   Dim xlMergeArea As Excel.Range
   xlMergeArea = xlMergeRange.MergeArea
   adrs1 = xlMergeArea.Address(RowAbsolute:=False, ColumnAbsolute:=False)
   MessageBox.Show(Me, "No.7 C10 の xlMergeArea セル位置は、" & adrs1 & " です。")
   MRComObject(xlMergeArea)
   MRComObject(xlMergeRange)

   '指定のセルが結合セル範囲にない場合は、指定したセル位置が返る
   xlMergeRange = xlSheet.Range("A10")
   xlMergeArea = xlMergeRange.MergeArea
   adrs1 = xlMergeArea.Address(RowAbsolute:=False, ColumnAbsolute:=False)
   MessageBox.Show(Me, "No.7 A10 の xlMergeArea セル位置は、" & adrs1 & " です。")
   MRComObject(xlMergeArea)
   MRComObject(xlMergeRange)

   '-------------------------------------------------------------------------------
   '8.指定のセル範囲に結合セルが含まれているかどうかを調べる
   'Range.MergeCells プロパティは、セル範囲に結合セルが含まれている場合は、True を返します。
   xlRange = xlSheet.Range("C10")
   If CBool(xlRange.MergeCells) = True Then
      MessageBox.Show(Me, "No.8 セル範囲(""C10"")には、結合セルが含まれます")
   End If
   MRComObject(xlRange)

   xlRange = xlSheet.Range("A10")
   If CBool(xlRange.MergeCells) = True Then
      MessageBox.Show(Me, "No.8 セル範囲(""A10"")には、結合セルが含まれます")
   Else
      MessageBox.Show(Me, "No.8 セル範囲(""A10"")には、結合セルが含まれていません")
   End If
   MRComObject(xlRange)
   '-------------------------------------------------------------------------------
   '9.使用されたセル範囲内の最後のセルを取得
   'Range.SpecialCells メソッドは、指定された条件を満たしているすべてのセルを返します。
   Dim xlSpCells As Excel.Range
   Dim xlRange2 As Excel.Range      'この場合、変数名を別にしないと解放されない。
   xlSpCells = xlSheet.Cells
   xlRange2 = xlSpCells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell)
   xlRange2.Activate()
   adrs1 = xlRange2.Address(RowAbsolute:=False, ColumnAbsolute:=False)
   MRComObject(xlRange2)
   MRComObject(xlSpCells)
   MessageBox.Show(Me, "No.9 指定のシート内での使用済みの最後のセルは、[ " & adrs1 & " ]です。")
   '-------------------------------------------------------------------------------
   '11.指定のセル範囲内の空白のセルに、0 を代入する。
   xlRange = xlSheet.Range("A1:D5")
   xlRange.Activate()
   xlRange.Value = ""     '空白のセルを作成する
   MRComObject(xlRange)
   '確認のために、1秒間表示しておく
   System.Threading.Thread.Sleep(1000)

   'セル "B2:C4" の範囲に仮のデータを表示
   xlRange = xlSheet.Range("B2:C4")
   xlRange.Value = "1234"
   MRComObject(xlRange)

   Dim xlBlanksRange As Excel.Range = Nothing
   Dim nn As Integer = 0
   Dim xlRange1 As Excel.Range        'この場合、変数名を別にしないと解放されない。
   xlRange1 = xlSheet.Range("A1:D5")
   '※ SpecialCells メソッドは、指定した範囲に該当のセルが見つからない場合エラーとなります。
   Try
      '空白のセルを取得
      xlBlanksRange = xlRange1.SpecialCells(Excel.XlCellType.xlCellTypeBlanks)
      '見つかった、空白のセルに指定のデータを入力
      xlBlanksRange.Value = "0"  '※ 数字(String)でないとエラーとなります。
      '見つかった、空白のセル数を取得する
      nn = xlBlanksRange.Count
      MRComObject(xlRange1)
      MRComObject(xlBlanksRange)
   Catch ex As Exception
      nn = 0
   End Try
   If nn = 0 Then
      msg = "No.10 セル範囲[A1:D5]のは空白のセルが見つかりませんでした。"
      MessageBox.Show(Me, msg)
   Else
      msg = "No.10 セル範囲[A1:D5]の空白のセル(" & nn.ToString & " 個)に 0 を代入しました。"
      MessageBox.Show(Me, msg)
   End If
   '-------------------------------------------------------------------------------
   '上記の他、SpecialCells メソッドの XlCellType 定数を指定する事で下記のようなセルを取得できます。
   'xlCellTypeAllFormatConditions(表示形式が設定されているセル)
   'xlCellTypeAllValidation(条件の設定が含まれているセル)
   'xlCellTypeBlanks(空の文字列)
   'xlCellTypeComments(コメントが含まれているセル)
   'xlCellTypeConstants(定数が含まれているセル)
   'xlCellTypeFormulas(数式が含まれているセル)
   'xlCellTypeLastCell(使われたセル範囲内の最後のセル)
   'xlCellTypeSameFormatConditions(同じ表示形式が設定されているセル)
   'xlCellTypeSameValidation(同じ条件の設定が含まれているセル)
   'xlCellTypeVisible(すべての可視セル)

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



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