- 日時: 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
|