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