Excel の起動・終了に関する設定(VB.NET) (No.1の個別表示) [スレッド一覧へ] |
- 日時: 2012/06/13 08:36
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:VBA,Excel,Comオブジェクト,解放処理,起動,エクセル,終了,既存ファイル * *********************************************************************************** '=================================================================================================== '投 稿 日:2012.05.05 '投 稿 者:VBレスキュー(花ちゃん) 'タイトル:VB2010 から Excel の起動・終了に関する設定色々 '========1=========2=========3=========4=========5=========6=========7=========8=========9=========0
動作確認:WindowsVista / Windows 7 / Excel 2007/2010 VB2010 / Framework 4 / ターゲットCPU:X86 [Option Compare Text] [Option Explicit On] [Option Infer On] [Option Strict On]で設定 プロジェクト→参照の追加→COM→Microsoft Excel 12.0(14.0) ObjectLibrary を参照設定しておいてください。 '---------------------------------------------------------------------------------------------------
'下記でエラーの波線が表示されたなら、プロジェクト→参照の追加→.NETタブ→から参照追加して下さい。 '下記の部分もバージョンに注意して下さい。(Excel 2007 〜用になっています。) Imports Microsoft.Office.Interop Imports Microsoft.Office.Core Imports System.Runtime.InteropServices 'Imports Microsoft.Vbe.Interop
Public Class Form1
#Region "Form1_Load 時の設定"
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 'Form を右下の邪魔にならない位置に表示(お好みで設定して下さい) Dim w As Integer = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width Dim h As Integer = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height Me.Top = h - Me.Height - 35 Me.Left = w - Me.Width - 25 'メッセージボックス等がExcelの裏に隠れないようにする為に Me.TopMost = True End Sub
#End Region
#Region "Excel の起動・終了に関する設定"
'---------- Private な変数の宣言 ----------------------------------- Private xlApp As Excel.Application Private xlBooks As Excel.Workbooks Private xlBook As Excel.Workbook Private xlSheets As Excel.Sheets Private xlSheet As Excel.Worksheet
Private Sub ExcelOpen(ByVal FilePath As String, ByVal SheetName As String) 'Excel のオープン処理用プロシージャ xlClose = False '起動中は、ユーザが Excel を閉じれないように xlApp = New Excel.Application 'Excel の WorkbookBeforeClose イベントを取得 AddHandler xlApp.WorkbookBeforeClose, AddressOf xlApp_WorkbookBeforeClose xlBooks = xlApp.Workbooks If FilePath.Length = 0 Then '新規のファイルを開く場合 xlBook = xlBooks.Add xlSheets = xlBook.Worksheets xlSheet = DirectCast(xlSheets.Item(1), Excel.Worksheet) Else '既存のファイルを開く場合 xlBook = xlBooks.Open(FilePath) xlSheets = xlBook.Worksheets xlSheet = DirectCast(xlSheets(SheetName), Excel.Worksheet) End If xlApp.Visible = True End Sub
Private xlClose As Boolean 'ユーザが Excel を閉じようとしたかのフラグ
Private Sub xlApp_WorkbookBeforeClose(ByVal Wb As Excel.Workbook, ByRef Cancel As Boolean) 'VB2010 から Excel の WorkbookBeforeClose イベントを監視してユーザが Excel を閉じれないようにする If xlClose = False Then Cancel = True 'ユーザが Excel を閉じれないように Else Cancel = False 'プログラム上から指定の場合は、閉じる End If End Sub
Private Sub ExcelClose(ByVal FilePath As String, Optional ByVal CancelSave As Boolean = True) 'Excelファイルを上書き保存して終了処理用プロシージャ xlClose = True 'プログラムからExcel を閉じた時のフラグ xlApp.DisplayAlerts = False '保存時の問合せのダイアログを非表示に設定 If CancelSave Then Dim kts As String = System.IO.Path.GetExtension(FilePath).ToLower() Dim fm As Excel.XlFileFormat '拡張子に合せて保存形式を変更(使用する Excel のバージョンに注意) Select Case kts Case ".csv" 'CSV (カンマ区切り) 形式 fm = Excel.XlFileFormat.xlCSV Case ".xls" 'Excel 97〜2003 ブック形式 fm = Excel.XlFileFormat.xlExcel8 Case ".xlsx" 'Excel 2007〜ブック形式 fm = Excel.XlFileFormat.xlOpenXMLWorkbook Case ".xlsm" 'Excel 2007〜マクロ有効ブック形式 fm = Excel.XlFileFormat.xlOpenXMLWorkbookMacroEnabled Case Else '必要なものは、追加して下さい。 fm = Excel.XlFileFormat.xlWorkbookDefault MessageBox.Show("ファイルの保存形式を確認して下さい。") End Select Try xlBook.SaveAs(Filename:=FilePath, FileFormat:=fm) 'ファイルに保存 Catch ex As Exception MessageBox.Show(ex.Message) End Try End If MRComObject(xlSheet) 'xlSheet の解放 MRComObject(xlSheets) 'xlSheets の解放 xlBook.Close() 'xlBook を閉じる MRComObject(xlBook) 'xlBook の解放 MRComObject(xlBooks) 'xlBooks の解放 xlApp.Quit() 'Excelを閉じる MRComObject(xlApp) 'xlApp を解放 End Sub
Private Sub ProcessCheck() 'タスクマネージャに、Excel.exe が残っていないか確認(テスト環境でのみ使用の事) Dim st As Integer = System.Environment.TickCount '以前は、Loop しながら5秒間程繰り返し確認していたのだが、その間に解放される場合が 'ある事が判明したので、下記のように1回きりの確認でもデクリメント処理がキチンと '行われていたら解放される事が解ったので下記のように厳密に判定する事にしました。 System.Threading.Thread.Sleep(500) Application.DoEvents() If Process.GetProcessesByName("Excel").Length = 0 Then '先にフォームを閉じるとエラーが発生するので '必要により表示するなりコメントにして下さい。 MessageBox.Show(Me, "Excel.EXE は解放されました。") Exit Sub End If If Process.GetProcessesByName("Excel").Length >= 1 Then Dim ret As DialogResult ret = MessageBox.Show(Me, "まだ Excel.EXE が起動しています。強制終了しますか?", _ "確認", MessageBoxButtons.YesNo) If ret = Windows.Forms.DialogResult.Yes Then Dim localByName As Process() = Process.GetProcessesByName("Excel") Dim p As Process '起動中のExcelを取得 For Each p In localByName 'Windou の無い(表示していない)Excel があれば強制終了させる '画面に表示している Excel は、終了させないので必要なら手動で終了して下さい。 If System.String.Compare(p.MainWindowTitle, "", True) = 0 Then 'Excel.EXE のプロセスを削除 p.Kill() End If Next End If End If End Sub
Public Sub MRComObject(Of T As Class)(ByRef objCom As T, Optional ByVal force As Boolean = False) Dim IDEEnvironment As Boolean = False 'メッセージボックスを表示させたい場合は、True に設定 If objCom Is Nothing Then If IDEEnvironment = True Then 'テスト環境の場合は下記を実施し、後は、コメントにしておいて下さい。 MessageBox.Show(Me, "Nothing です。") End If Return End If Try If System.Runtime.InteropServices.Marshal.IsComObject(objCom) Then Dim count As Integer If force Then count = System.Runtime.InteropServices.Marshal.FinalReleaseComObject(objCom) Else count = System.Runtime.InteropServices.Marshal.ReleaseComObject(objCom) End If If IDEEnvironment = True AndAlso count <> 0 Then Try 'テスト環境の場合は下記を実施し、後は、コメントにしておいて下さい。 MessageBox.Show(Me, TypeName(objCom) & " 要調査! デクリメントされていません。") Catch ex As Exception MessageBox.Show(Me, " 要調査! デクリメントされていません。") End Try End If Else If IDEEnvironment = True Then 'テスト環境の場合は下記を実施し、後は、コメントにしておいて下さい。 MessageBox.Show(Me, "ComObject ではありませんので、解放処理の必要はありません。") End If End If Finally objCom = Nothing End Try End Sub
#End Region
End Class
|
VB2010からExcelを操作(サンプル集)するための注意事項(VB.NET) (No.2の個別表示) [スレッド一覧へ] |
- 日時: 2013/02/14 10:04
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:VBA,Excel,Comオブジェクト,解放処理,エクセル,定数,タスクマネージャ * *********************************************************************************** '=================================================================================================== '投 稿 日:2012.05.05 '投 稿 者:VBレスキュー(花ちゃん) 'タイトル:VB2010からExcelを操作(サンプル集含む)するための注意事項 '========1=========2=========3=========4=========5=========6=========7=========8=========9=========0
※ 気が付いたことを逐次、追加書き込みしておりますので、順不同となっており見難いかとは思いますが ご了承願い、[このページの検索]等の検索機能を活用して見て下さい。
1.VB2010からExcelを操作するためのワンポイントテクニック集 に掲載されているサンプルを 操作(試す)する場合は、必ず、 >>1 の Excel の起動・終了に関する設定 のコードを 使用して下さい。 ※ 終了時の処理の中のテスト環境のコードは絶対に実装しないで下さい。 実装される場合は、下記のコードを使って下さい。 http://www.hanatyan.sakura.ne.jp/dotnet/Excel01.htm 2.基本的な事は、http://www.hanatyan.sakura.ne.jp/dotnet/Excel08.htm 等にかいておりますので、 必ずご覧になってから、これらのサンプルをご利用願います。
3.開発環境は、VB2010 / Excel 2007 /Excel 2010 で作成し、動作確認を行っておりますので、ご使用の バージョンによっては、エラーが表示するかもしれませんので、その節は、ご使用のバージョンに合わせて 変更願います。
4.未掲載の操作方法等について調べる場合は、Excel 上でマクロの記録ができるものは、マクロの記録を 取ってそのコードを見て下さい。
5.VBA での操作例のサンプルや VB6.0 から Excel を操作するためのサンプルは、Net 上に多く掲載されて いるのでそれらを参考にして下さい。
6.解らない事は、VBA のヘルプ使って調べて下さい。 Excel を起動して、メニューの【開発】→【Visual Basic】をクリックすると VBA の IDE の画面が 表示されますので、質問欄に記入して検索するか、【ヘルプ】をクリックして調べて下さい。 ※ 同じ名前の、メソッドやプロパティであっても、使用するオブジェクトによって、引数が違ったり 定数が違ったりする場合がありますので、その辺もよく確認するようにして下さい。 例、Workbook.SaveAs メソッド 、Worksheet.SaveAs メソッド 、SaveAs メソッド 等のようなもの
又、上記ヘルプは、下記のようにすれば、単独で使用できますので便利かと思います。 http://www.hanatyan.sakura.ne.jp/dotnet/vbahelp.htm
7.Excel の定数を調べるには、下記の【★ Excelの定数の調べ方】をご覧下さい。 http://www.hanatyan.sakura.ne.jp/dotnet/Excel03.htm#teisuu VBA での定数名が解っている場合は、オブジェクトブラウザから定数名を検索すれば簡単に探せます。 (VB2010 の IDE 上の画面から【F2】キーを押すとオブジェクトブラウザが表示されますので、検索 ボックスに定数名を入力して検索して見て下さい。)
8・解放処理の確認は、Excel 2007 以上で VB2010(Framework 4) が条件となります。 VB2008 や VB2005 では、ReleaseComObject の仕様が変更されているので、各自ご自分の環境上で 確認して下さい。 又、下記のようなツールを作成してチェックすると一目瞭然で、解放漏れや問題個所が判別できます。 ★自作ツールの【Excel Com オブジェクトの解放漏れチェックツール(480)】(有料サンプル集に付属) http://www.hanatyan.sakura.ne.jp/dotnet/excelcom.htm
上記ツールのテスト用のコードですが、これを見ればどのようなコードが問題かも解ります。 http://www.hanatyan.sakura.ne.jp/dotnet/comtest.htm
9.このサンプルは、実行時バインディング(レイトバインディング)では、使用しないで下さい。 Excel が解放されなくなります。 又、このサンプルを参考にしたり、掲示板で質問されるレベルの方は、参照設定を外して Excel を操作 されると、Excel が解放されなくなり、原因もご自分で判断できない事になりますので、せめて動作確認中は、 事前バインディング(アーリーバインディング)で操作するようにして下さい。
10.VBA のサンプルを掲載している主なサイト インストラクターのネタ帳 → Excel 2003 の仕様・制限値 http://www.relief.jp/itnote/archives/000579.php
Excel2007図解説明 → Excel 2007 ワークシートとブックの仕様と制限 http://www.excel-img.com/system01.html moug モーグ → Excel VBA テクニック (テクニック数 728) http://www.moug.net/tech/exvba/
ミコの黄色いおうち http://park11.wakwak.com/~miko/miko.htm
Excelでお仕事!「VBA基本」メニュー http://www.asahi-net.or.jp/~ef2o-inue/menu/menu04.html Excelでお仕事!「VBA応用」メニュー http://www.asahi-net.or.jp/~ef2o-inue/menu/menu05.html
【Excel VBA サンプル集】- ExcelVBA@Workshop http://excel.style-mods.net/tips_vba/index.htm
Tips箪笥 VBA Tips http://www.geocities.co.jp/SiliconValley/4805/vbatips/vbatips000.htm
後は、[VBA サンプル] 等をキーワードにして検索してみて下さい。
11.当サイト内でのExcel 関係のサンプルの掲載ページ トップページ http://www.hanatyan.sakura.ne.jp/index.html の左のフレーム内のメニューの VB2005〜関係専用 http://www.hanatyan.sakura.ne.jp/dotnet/index.html のメニューの Excel・Word・他 をクリックして下さい。
トップページ http://www.hanatyan.sakura.ne.jp/index.html の左のフレーム内のメニューの VB6.0関係専用 http://www.hanatyan.sakura.ne.jp/vbhlp/index.html のメニューの Excel & Word関係 をクリックして下さい。
エクセルVBAキーワードリファレンス集 http://www.hanatyan.sakura.ne.jp/vbhlp/excel10.htm
このサンプル投稿用掲示板にも色々投稿してありますので、カテゴリ別表示 内から探して下さい。
12.事前バインディング(アーリーバインディング)で操作していると変数の型を指定する必要があるが 変数の型が解らない場合は、下記のようにして調べて下さい。
Excel2007のShape.TextFrame2.TextRangeの型が分かりません の 魔界の仮面弁士 さんの回答 http://hanatyan.sakura.ne.jp/vbnetbbs/wforum.cgi?mode=allread&no=9387#9390
13.掲載サンプルは、修正・追加等を逐次行っておりますので、最新のものをご覧下さい。
|
VB2010 から Excel へのデータの入力処理例(VB.NET) (No.3の個別表示) [スレッド一覧へ] |
- 日時: 2012/06/09 15:38
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:Excel VBA,Excel.Range,配列データ,エクセル,エクセルシートに入力 * *********************************************************************************** '=================================================================================================== '投 稿 日:2012.05.05 '投 稿 者:VBレスキュー(花ちゃん) 'タイトル:VB2010 から Excel へのデータの入力処理及び起動・終了処理例 '========1=========2=========3=========4=========5=========6=========7=========8=========9=========0
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click Call ExcelOpen("", "") '新規ファイルをオープンして、Excel を起動 '========================== データの入力処理 =================================
'-------------------- マクロの記録を取った場合 ---------------------------- 'ActiveCell.FormulaR1C1 = "10" 'Range("A2").Select() 'ActiveCell.FormulaR1C1 = "20" 'Range("A3").Select() 'ActiveCell.FormulaR1C1 = "=SUM(R[-2]C:R[-1]C)" 'Range("A4").Select() '-------------------------------------------------------------------------- '1.単純なデータの入力と計算式の入力例 Dim xlRange As Excel.Range Dim strDat(2, 0) As Object xlRange = xlSheet.Range("A1:A3") 'データの入力セル範囲 strDat(0, 0) = "10" 'データの作成 strDat(1, 0) = "20" strDat(2, 0) = "=Sum(A1:A2)" '計算式 xlRange.Value = strDat 'セルへデータの入力 MRComObject(xlRange)
'上記の他、下記のリンク先のサンプルを参考にして下さい。 'http://www.hanatyan.sakura.ne.jp/dotnet/Excel01.htm 'http://www.hanatyan.sakura.ne.jp/dotnet/Excel07.htm
'確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
'-------------------------------------------------------------------------- '2.2次元配列データの入力例 Dim xlRange1 As Excel.Range = Nothing Dim dat(20, 4) As String For r As Integer = 0 To 20 For c As Integer = 0 To 4 dat(r, c) = Str(r + 1) & "," & Str(c + 1) Next Next xlRange1 = xlSheet.Range("A1:D20") xlRange1.Value = dat '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000) '入力したデータを削除 xlRange1.Value = "" MRComObject(xlRange1) '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
'-------------------------------------------------------------------------- '3.1次元配列データの入力(For Each...Next ステートメントを使った)例 Dim xlRange2 As Excel.Range = Nothing Dim xlElement As Excel.Range = Nothing Dim dat1(0) As String Dim n As Integer = -1 '2次元配列データを1次元配列に格納 For r As Integer = 1 To 20 For c As Integer = 1 To 4 n += 1 ReDim Preserve dat1(n) dat1(n) = Str(r) & "," & Str(c) Next Next xlRange2 = xlSheet.Range("A1:D20") Dim no As Integer = -1 'For Each...Next ステートメントを使って、1次元配列を2次元配列に表示 For Each xlElement In xlRange2 no += 1 xlElement.Value = dat1(no) '仮データを表示(順番にも注目) 'xlElement の参照先が変更されたのだからデクリメントする必要がある MRComObject(xlElement) Next MRComObject(xlRange2) '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
'4.1次元配列データを指定位置に入力 Dim xlRange3 As Excel.Range = Nothing xlRange3 = xlSheet.Range("G1:G20") no = -4 For Each xlElement In xlRange3 no += 4 xlElement.Value = dat1(no) '仮データを表示(順番にも注目) MRComObject(xlElement) 'ここも同様に直ちにデクリメントを Next MRComObject(xlRange3) '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
'============================================================================= 'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行 Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了 'Excel.EXE がタスクマネージャに残っていないか調査(実使用時は必要なし) Call ProcessCheck() '正常に動作する事が確認できたらこの行は、コメントにして下さい。 End Sub
実行結果、【Excel.EXE は解放されました。】とメッセージボックスが表示されたら、OK です。 それ以外のメッセージボックスが表示された場合は、コードを確認して下さい。 (この事は各サンプル共通で今後この事は記入しません。)
|
VB2010からExcel上のデータをコピー&ペースト(VB.NET) (No.4の個別表示) [スレッド一覧へ] |
- 日時: 2012/06/06 18:54
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:Excel VBA,Excel.Range,マクロ,エクセル,コピー,ペースト,貼り付け * *********************************************************************************** '=================================================================================================== '投 稿 日:2012.05.05 '投 稿 者:VBレスキュー(花ちゃん) 'タイトル:VB2010 から Excel 上のデータをコピー&ペースト '========1=========2=========3=========4=========5=========6=========7=========8=========9=========0
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click Call ExcelOpen("", "") '新規ファイルをオープンして、Excel を起動 '========================== Excel 上でコピー&ペースト =======================
'-------------------- マクロの記録を取った場合 ---------------------------- 'ActiveCell.FormulaR1C1 = "あいうえお" 'Range("A1").Select 'Selection.Copy 'Range("D1").Select 'ActiveSheet.Paste '-------------------------------------------------------------------------- '上記マクロは、下記のように書き換えます。 'ActiveCell とか Selection とか ActiveSheet のような不特定のオブジェクトを '指しているものは、VB からは使用しないようにして下さい。(トラブルの元になります。) Dim xlRange As Excel.Range xlRange = xlSheet.Range("A1") xlRange.Value = "あいうえお" '指定のセルのデータをクリップボードへコピーする xlRange.Copy() '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
'クリップボードの内容を指定のシートの指定のセルに貼り付ける 'xlSheet.Paste(xlSheet.Range("D1")) 'これは、間違った使用例です。(解放されなくなる) '確認のために、1秒間表示しておく 'System.Threading.Thread.Sleep(1000)
'正しくは、 Dim xlPasteRange As Excel.Range = xlSheet.Range("D2") xlSheet.Paste(xlPasteRange) MRComObject(xlPasteRange) 'のように一度変数に受けて下さい。 MRComObject(xlRange) '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
'============================================================================= 'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行 Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了 'Excel.EXE がタスクマネージャに残っていないか調査(実使用時は必要なし) Call ProcessCheck() '正常に動作する事が確認できたらこの行は、コメントにして下さい。 End Sub
|
VB2010からExcelのセルの背景色を設定(VB.NET) (No.5の個別表示) [スレッド一覧へ] |
- 日時: 2012/05/29 09:06
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:網掛けパターン,エクセル,セルの背景色,塗りつぶし,カラーインデックス * *********************************************************************************** '=================================================================================================== '投 稿 日:2012.05.05 '投 稿 者:VBレスキュー(花ちゃん) 'タイトル:VB2010 から Excel のセルの背景色を設定 '========1=========2=========3=========4=========5=========6=========7=========8=========9=========0
Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click Call ExcelOpen("", "") '新規ファイルをオープンして、Excel を起動 '========================== セルの背景色を設定 ===============================
'-------------------- マクロの記録を取った場合 ---------------------------- 'ActiveCell.FormulaR1C1 = "あいうえお" 'Range("B2").Select() 'With Selection.Interior ' .Pattern = xlSolid ' .PatternColorIndex = xlAutomatic ' .Color = 65535 ' .TintAndShade = 0 ' .PatternTintAndShade = 0 'End With '-------------------------------------------------------------------------- 'Excel の定数を調べるには、>>2 の5.Excel の定数を調べるには の項をご覧下さい。 Dim xlRange As Excel.Range xlRange = xlSheet.Range("B2") xlRange.Value = "あいうえお" '仮データの表示 '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
Dim xlInterior As Excel.Interior xlInterior = xlRange.Interior With xlInterior '塗りつぶしのパターンと色を表す、xlPattern クラスの定数を設定 '検索キーワード [MSDN XlPattern 列挙型] http://tinyurl.com/7bwazhr .Pattern = Excel.XlPattern.xlPatternSolid '塗りつぶしのパターンと色を現在のカラー パレットのインデックス番号または定数で設定 'XlColorIndex クラスの xlColorIndexAutomatic または xlColorIndexNone です .PatternColorIndex = Excel.Constants.xlAutomatic '塗りつぶし等のカラーを設定下記のどの方法でも可 '.Color = 65535 '明るい黄色 '.Color = QBColor(14) '明るい黄色 .Color = RGB(255, 255, 0) '明るい黄色 '.Color = Color.Yellow '明るい黄色 ' カラーインデックス値の一覧表 ' http://hanatyan.sakura.ne.jp/samplepic/excel-1-1.gif '.ColorIndex = 6 '明るい黄色 '.ColorIndex = Excel.XlColorIndex.xlColorIndexNone 'セルの色(内部色)を標準にする '色を明るく、または暗くする単精度浮動小数点型 (-1 〜 + 1 の範囲の Single) の値を設定 .TintAndShade = 0 '網掛けパターンに濃淡を設定(TintAndShade と同様の設定値)塗りつぶしの場合は無視される '.PatternTintAndShade = 0 End With MRComObject(xlInterior) MRComObject(xlRange) '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
'============================================================================= 'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行 Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了 'Excel.EXE がタスクマネージャに残っていないか調査(実使用時は必要なし) Call ProcessCheck() End Sub
|
VB2010 から Excel のセルにグラデーションを設定(VB.NET) (No.6の個別表示) [スレッド一覧へ] |
- 日時: 2012/06/06 18:57
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:Excel VBA,Excel.Range,マクロ,エクセル,セルにグラデーション,背景色 * *********************************************************************************** '=================================================================================================== '投 稿 日:2012.05.05 '投 稿 者:VBレスキュー(花ちゃん) 'タイトル:VB2010 から Excel のセルにグラデーションを設定 '========1=========2=========3=========4=========5=========6=========7=========8=========9=========0
Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click Call ExcelOpen("", "") '新規ファイルをオープンして、Excel を起動 '======================== セルにグラデーションを設定 =========================
Dim xlRange As Excel.Range xlRange = xlSheet.Range("B2") xlRange.Value = "あいうえお" '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
Dim xlInterior As Excel.Interior xlInterior = xlRange.Interior Dim xlLinearGradient As Excel.LinearGradient Dim xlColorStops As Excel.ColorStops '塗りつぶしのパターンと色を表す、xlPattern クラスの定数を設定 '検索キーワード [MSDN XlPattern 列挙型] http://tinyurl.com/7bwazhr xlInterior.Pattern = Excel.XlPattern.xlPatternLinearGradient '型が不明の時は、下記のようにして調べる 'Debug.Print(TypeName(.Gradient)) ' LinearGradient xlLinearGradient = DirectCast(xlInterior.Gradient, Excel.LinearGradient) xlColorStops = xlLinearGradient.ColorStops 'グラデーションの塗りつぶしにおける直線の角度(0〜360の範囲) '左→右にグラデーション xlLinearGradient.Degree = 0 Dim xlColorStop1 As Excel.ColorStop Dim xlColorStop2 As Excel.ColorStop xlColorStops.Clear() xlColorStop1 = xlColorStops.Add(0) xlColorStop2 = xlColorStops.Add(1) xlColorStop1.Color = Color.Red '開始時の色 xlColorStop2.Color = Color.Yellow '終了時の色 'このようにここまで掘り下げて変数に受けてデクリメントしないと解放されない MRComObject(xlColorStop2) MRComObject(xlColorStop1) MRComObject(xlColorStops) MRComObject(xlLinearGradient) MRComObject(xlInterior) MRComObject(xlRange) '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000) '============================================================================= 'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行 Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了 'Excel.EXE がタスクマネージャに残っていないか調査(実使用時は必要なし) Call ProcessCheck() End Sub
上記サンプルの実行結果の図 http://www.hanatyan.sakura.ne.jp/samplepic/excelbut4_1.png
|
VB2010からExcelのセルの文字色を設定(VB.NET) (No.7の個別表示) [スレッド一覧へ] |
- 日時: 2012/06/06 18:59
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:Excel VBA,Excel.Range,マクロ,エクセル,セルの文字色を設定,前景色 * *********************************************************************************** '=================================================================================================== '投 稿 日:2012.05.05 '投 稿 者:VBレスキュー(花ちゃん) 'タイトル:VB2010 から Excel のセルの文字色を設定 '========1=========2=========3=========4=========5=========6=========7=========8=========9=========0
Private Sub Button5_Click(sender As System.Object, e As System.EventArgs) Handles Button5.Click Call ExcelOpen("", "") '新規ファイルをオープンして、Excel を起動 '========================== セルの文字色を設定 ===============================
'-------------------- マクロの記録を取った場合 ---------------------------- '同じ色の場合 'ActiveCell.FormulaR1C1 = "あいうえお" 'Range("C2").Select() 'With Selection.Font ' .Color = -16776961 ' .TintAndShade = 0 'End With
'個別に指定する場合 'Range("E2").Select() 'ActiveCell.FormulaR1C1 = "あいうえお" 'With ActiveCell.Characters(Start:=3, Length:=1).Font ' .Color = -16776961 'End With '--------------------------------------------------------------------------
'指定セル内の文字色を全て赤色に設定 Dim xlRange As Excel.Range Dim xlFont As Excel.Font xlRange = xlSheet.Range("B2") xlRange.Value = "あいうえお" xlFont = xlRange.Font xlFont.Color = Color.Red MRComObject(xlFont) MRComObject(xlRange) '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
'指定セル内の左から3文字目を赤色に設定 xlRange = xlSheet.Range("D2") xlRange.Value = "あいうえお" ' Debug.Print(TypeName(xlRange.Characters(Start:=3, Length:=1))) 'Characters 'Characters で s がついてはいるがデフォルトのプロパティがないので Dim xlCharacters As Excel.Characters xlCharacters = xlRange.Characters(Start:=3, Length:=1) xlFont = xlCharacters.Font xlFont.Color = Color.Red MRComObject(xlFont) MRComObject(xlCharacters) MRComObject(xlRange) '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
'============================================================================= 'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行 Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了 'Excel.EXE がタスクマネージャに残っていないか調査(実使用時は必要なし) Call ProcessCheck() End Sub
|
VB2010からExcelのセルのフォントを設定(VB.NET) (No.8の個別表示) [スレッド一覧へ] |
- 日時: 2012/05/29 09:25
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:Excel VBA,Excel 2010,フォントスタイル,エクセル,セルのフォントを設定 * *********************************************************************************** '=================================================================================================== '投 稿 日:2012.05.05 '投 稿 者:VBレスキュー(花ちゃん) 'タイトル:VB2010 から Excel のセルのフォントの設定 '========1=========2=========3=========4=========5=========6=========7=========8=========9=========0
Private Sub Button6_Click(sender As System.Object, e As System.EventArgs) Handles Button6.Click Call ExcelOpen("", "") '新規ファイルをオープンして、Excel を起動 '========================== セルのフォントの設定 =============================
'-------------------- マクロの記録を取った場合 ---------------------------- 'Range("C2").Select() 'ActiveCell.FormulaR1C1 = "あいうえお" 'With ActiveCell.Characters(Start:=3, Length:=1).Font ' .Name = "MS 明朝" ' .FontStyle = "太字" ' .Size = 15 ' .Strikethrough = False ' .Superscript = False ' .Subscript = False ' .OutlineFont = False ' .Shadow = False 、 ' .Underline = xlUnderlineStyleNone ' .ThemeColor = xlThemeColorLight1 ' .TintAndShade = 0 ' .ThemeFont = xlThemeFontNone 'End With '--------------------------------------------------------------------------
Dim xlRange As Excel.Range xlRange = xlSheet.Range("C2") xlRange.Value = "あいうえお" '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
Dim xlCharacters As Excel.Characters xlCharacters = xlRange.Characters(Start:=2, Length:=3) Dim xlFont As Excel.Font xlFont = xlCharacters.Font With xlFont .Name = "MS 明朝" 'フォント スタイルを設定(文字列型 (String) の値を使用) .FontStyle = "太字 斜体" .Size = 15 .Strikethrough = True '取り消し線 .Superscript = False 'True の場合、対象となるフォントが上付き文字になります .Subscript = False 'True の場合、対象となるフォントは下付き文字になります .OutlineFont = False 'True の場合、フォントをアウトライン フォントにします .Shadow = True 'True の場合、フォントを影付きフォントに、 'フォントに付いている下線の種類を設定() .Underline = Excel.XlUnderlineStyle.xlUnderlineStyleSingle '指定されたオブジェクトに適用する配色のテーマ(カラーを設定) .ThemeColor = Excel.XlThemeColor.xlThemeColorAccent2 '色を明るく、または暗くする .TintAndShade = 0 '指定されたオブジェクトに適用するテーマのフォントを設定() .ThemeFont = Excel.XlThemeFont.xlThemeFontNone End With MRComObject(xlFont) MRComObject(xlCharacters) MRComObject(xlRange) '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
'============================================================================= 'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行 Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了 'Excel.EXE がタスクマネージャに残っていないか調査(実使用時は必要なし) Call ProcessCheck() End Sub
|
VB2010からExcelのセルの表示形式を設定(VB.NET) (No.9の個別表示) [スレッド一覧へ] |
- 日時: 2012/05/29 09:27
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:Excel VBA,Excel 2010,桁区切り,エクセル,セルの表示形式,フォーマット * *********************************************************************************** '=================================================================================================== '投 稿 日:2012.05.05 '投 稿 者:VBレスキュー(花ちゃん) 'タイトル:VB2010 から Excel のセルの表示形式を設定 '========1=========2=========3=========4=========5=========6=========7=========8=========9=========0
Private Sub Button7_Click(sender As System.Object, e As System.EventArgs) Handles Button7.Click Call ExcelOpen("", "") '新規ファイルをオープンして、Excel を起動 '========================= セルの表示形式を設定 ==============================
'-------------------- マクロの記録を取った場合 ---------------------------- 'Columns("A:A").Select() 'Selection.NumberFormatLocal = "@"
'Columns("B:B").Select() 'Selection.NumberFormatLocal = "#,##0.0"
'Columns("C:C").Select() 'Selection.NumberFormatLocal = "yyyy/mm/dd" '-------------------------------------------------------------------------- Dim xlRange As Excel.Range xlRange = xlSheet.Range("A:A") xlRange.Select() xlRange.NumberFormatLocal = "@" MRComObject(xlRange)
xlRange = xlSheet.Range("A2") xlRange.Value = "123456.78" MRComObject(xlRange)
xlRange = xlSheet.Range("B:B") xlRange.Select() xlRange.NumberFormatLocal = "#,##0.0" MRComObject(xlRange)
xlRange = xlSheet.Range("B2") xlRange.Value = "123456.78" MRComObject(xlRange)
xlRange = xlSheet.Range("C:C") xlRange.Select() xlRange.NumberFormatLocal = "yyyy/mm/dd" MRComObject(xlRange)
xlRange = xlSheet.Range("C2") xlRange.Value = "4/8" MRComObject(xlRange)
'============================================================================= 'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行 Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了 'Excel.EXE がタスクマネージャに残っていないか調査(実使用時は必要なし) Call ProcessCheck() End Sub
|
VB2010からExcelのセル上に画像を表示及び拡大・縮小(VB.NET) (No.10の個別表示) [スレッド一覧へ] |
- 日時: 2012/06/06 19:02
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:Excel VBA,Excel2010,画像を表示,拡大,縮小,Pictureオブジェクト * *********************************************************************************** '=================================================================================================== '投 稿 日:2012.05.05 '投 稿 者:VBレスキュー(花ちゃん) 'タイトル:VB2010 から Excel のセル上に画像を表示及び拡大・縮小 '========1=========2=========3=========4=========5=========6=========7=========8=========9=========0
Private Sub Button8_Click(sender As System.Object, e As System.EventArgs) Handles Button8.Click Call ExcelOpen("", "") '新規ファイルをオープンして、Excel を起動 '==================== セル上に画像を表示及び拡大・縮小 =======================
'-------------------- 下記のVB6.0用コードを移植 --------------------------- ' http://hanatyan.sakura.ne.jp/vbhlp/Excel12.htm '1.Pictureオブジェクトを使って表示 'xlSheet.Range("B2").Select() 'xlSheet.Pictures.Insert(MyPath).Select()
'2.クリップボード経由での貼付け 'xlSheet.Range("H2").Select() 'xlSheet.Paste() '--------------------------------------------------------------------------
'1.Pictureオブジェクト(隠しオブジェクト)を使っての表示 Dim myPath As String = System.IO.Path.GetFullPath(".\Test.gif") Dim xlRange As Excel.Range xlRange = xlSheet.Range("B2") Dim xlPictures As Excel.Pictures Dim xlPicture As Excel.Picture 'Debug.Print(TypeName(xlSheet.Pictures)) 'Pictures '面倒でも下記のように変数に受けないと解放されない xlPictures = DirectCast(xlSheet.Pictures, Excel.Pictures) xlPicture = xlPictures.Insert(myPath) 'Excel 2007では画像の挿入位置指定が下記のようにしないと指定できません。 With xlPicture .Top = CDbl(xlRange.Top) .Left = CDbl(xlRange.Left) End With MRComObject(xlPicture) MRComObject(xlPictures) MRComObject(xlRange) 'テストの為1秒間表示 System.Threading.Thread.Sleep(1000)
''2.Web 上の画像を指定して、Pictureオブジェクト(隠しオブジェクト)を使っての表示 myPath = "http://www.hanatyan.sakura.ne.jp/toppicture.gif" xlRange = xlSheet.Range("I2") xlPictures = DirectCast(xlSheet.Pictures, Excel.Pictures) xlPicture = xlPictures.Insert(myPath) With xlPicture .Top = CDbl(xlRange.Top) .Left = CDbl(xlRange.Left) End With MRComObject(xlPicture) MRComObject(xlPictures) MRComObject(xlRange) 'テストの為1秒間表示 System.Threading.Thread.Sleep(1000)
'3.Web 上の画像を指定して、Shapes.Add メソッドを使っての表示 'Excel 2010 で Pictures.Insert メソッドを使用して図をワークシートに挿入すると '図がリンクオブジェクトとして挿入される 'http://support.microsoft.com/kb/2396509/ja myPath = "http://www.hanatyan.sakura.ne.jp/toppicture.gif" Dim xlShapes As Excel.Shapes xlRange = xlSheet.Range("I15") xlShapes = xlSheet.Shapes Dim xlShape As Excel.Shape '画像のサイズが前もって解らない場合は、適当なサイズで仮取得(縦横共 100ピクセルで) xlShape = xlShapes.AddPicture(Filename:=myPath, _ LinkToFile:=MsoTriState.msoFalse, SaveWithDocument:=MsoTriState.msoTrue, _ Left:=CSng(xlRange.Left), Top:=CSng(xlRange.Top), Width:=CSng(100), Height:=CSng(100)) '図のサイズを元のサイズに戻します With xlShape .ScaleHeight(1.0!, MsoTriState.msoTrue) .ScaleWidth(1.0!, MsoTriState.msoTrue) End With MRComObject(xlShape) MRComObject(xlShapes) MRComObject(xlRange) 'テストの為1秒間表示 System.Threading.Thread.Sleep(1000)
'4.クリップボード経由での貼付け '下記のリンクの画像をクリップボードにコピーしておいてから実行して下さい。 'http://www.hanatyan.sakura.ne.jp/toppicture.gif Dim iData As IDataObject = Clipboard.GetDataObject() 'クリップボードにBMPファイルがあれば If iData.GetDataPresent(DataFormats.Bitmap) = False Then 'Excel の裏に隠れたりしますので、オーナーウィンドウ(Me)を指定下さい。 MessageBox.Show(Me, "クリップボード上に画像がありませんので、すぐにコピーして下さい。") End If xlRange = xlSheet.Range("M2") xlRange.Select() xlSheet.Paste() MRComObject(xlRange) 'テストの為1秒間表示 System.Threading.Thread.Sleep(1000)
'5.拡大表示(1.25 = 拡大率(1.25倍)で指定) xlShapes = xlSheet.Shapes xlShape = xlShapes.Item(1) xlShape.Select() xlShape.ScaleWidth(1.25, MsoTriState.msoFalse, MsoScaleFrom.msoScaleFromTopLeft) xlShape.ScaleHeight(1.25, MsoTriState.msoFalse, MsoScaleFrom.msoScaleFromTopLeft) MRComObject(xlShape) MRComObject(xlShapes) 'テストの為1秒間表示 System.Threading.Thread.Sleep(1000)
'6.縮小表示 xlShapes = xlSheet.Shapes xlShape = xlShapes.Item(2) xlShape.Select() xlShape.ScaleWidth(0.75, MsoTriState.msoFalse, MsoScaleFrom.msoScaleFromTopLeft) xlShape.ScaleHeight(0.75, MsoTriState.msoFalse, MsoScaleFrom.msoScaleFromTopLeft) MRComObject(xlShape) MRComObject(xlShapes) 'テストの為1秒間表示 System.Threading.Thread.Sleep(1000)
'============================================================================= 'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行 Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了 'Excel.EXE がタスクマネージャに残っていないか調査(実使用時は必要なし) Call ProcessCheck() End Sub
|
VB2010からExcel上に図形(オートシェイプ等)の描画及び削除(VB.NET) (No.11の個別表示) [スレッド一覧へ] |
- 日時: 2012/06/06 19:03
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:Excel VBA,Excel2010,雲形吹き出し,オートシェイプ,図形の描画,削除 * *********************************************************************************** '=================================================================================================== '投 稿 日:2012.05.05 '投 稿 者:VBレスキュー(花ちゃん) 'タイトル:VB2010 から Excel の指定位置に図形(オートシェイプ等)の描画及び削除 '========1=========2=========3=========4=========5=========6=========7=========8=========9=========0
Private Sub Button9_Click(sender As System.Object, e As System.EventArgs) Handles Button9.Click Call ExcelOpen("", "") '新規ファイルをオープンして、Excel を起動 '=================== 図形(オートシェイプ等)の描画及び削除 ====================
'-------------------- 下記のVB6.0用コードを移植 --------------------------- ' http://hanatyan.sakura.ne.jp/patio/read.cgi?mode=view2&f=128&no=17 '--------------------------------------------------------------------------
Dim xlShapes As Excel.Shapes Dim xlShape As Excel.Shape xlShapes = xlSheet.Shapes '雲形吹き出しを描画 xlShape = xlShapes.AddShape(MsoAutoShapeType.msoShapeCloudCallout, 100, 30, 100, 40) MRComObject(xlShape) MRComObject(xlShapes) '1秒間表示しておく System.Threading.Thread.Sleep(1000)
'ブロック矢印を描画 xlShapes = xlSheet.Shapes xlShape = xlShapes.AddShape(MsoAutoShapeType.msoShapeRightArrow, 100, 100, 50, 50) '1秒間表示しておく System.Threading.Thread.Sleep(1000)
'オートシェイプ(ブロック矢印)の背景色と前景色を設定する Dim xlFillFormat As Excel.FillFormat xlFillFormat = xlShape.Fill With xlFillFormat .BackColor.RGB = RGB(255, 0, 255) .ForeColor.RGB = RGB(255, 215, 0) End With MRComObject(xlFillFormat) MRComObject(xlShape) MRComObject(xlShapes) '1秒間表示しておく System.Threading.Thread.Sleep(1000)
'終端が三角形の矢印を描画 xlShapes = xlSheet.Shapes xlShape = xlShapes.AddLine(100, 200, 250, 200) Dim xlLineFormat As Excel.LineFormat xlLineFormat = xlShape.Line 'ここまで分解して取得しないと後で、ハマる事になるので。 With xlLineFormat .EndArrowheadLength = MsoArrowheadLength.msoArrowheadLong .EndArrowheadStyle = MsoArrowheadStyle.msoArrowheadTriangle .EndArrowheadWidth = MsoArrowheadWidth.msoArrowheadWide .Weight = 5.0# End With MRComObject(xlLineFormat) MRComObject(xlShape) MRComObject(xlShapes) '1秒間表示しておく System.Threading.Thread.Sleep(1000)
'図形を個別に削除する場合 xlShapes = xlSheet.Shapes xlShape = xlShapes.Item(1) xlShape.Delete() MRComObject(xlShape) MRComObject(xlShapes) '1秒間表示しておく System.Threading.Thread.Sleep(1000)
'全てを削除する場合(Selection.Delete が使用できないので) xlShapes = xlSheet.Shapes For Each xlShape In xlShapes xlShape.Delete() MRComObject(xlShape) Next MRComObject(xlShapes)
'============================================================================= 'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行 Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了 'Excel.EXE がタスクマネージャに残っていないか調査(実使用時は必要なし) Call ProcessCheck() End Sub
|
複数のCSVファイルを1つのBook内の複数のSheet上に読込む(VB.NET) (No.12の個別表示) [スレッド一覧へ] |
- 日時: 2012/06/06 19:05
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:Excel VBA,Excel2010,CSVファイル,複数の,全ての列を文字列型に,列数 * *********************************************************************************** '=================================================================================================== '投 稿 日:2012.05.05 '投 稿 者:VBレスキュー(花ちゃん) 'タイトル:複数のCSVファイルを1つのBook内の複数のWorksheet上に読み込む '========1=========2=========3=========4=========5=========6=========7=========8=========9=========0
Private Sub Button10_Click(sender As System.Object, e As System.EventArgs) Handles Button10.Click Call ExcelOpen("", "") '新規ファイルをオープンして、Excel を起動 '================ 複数のCSVファイルを1つのBookに読み込む ====================
'-------------------- 下記のVB6.0用コードを移植 --------------------------- ' http://hanatyan.sakura.ne.jp/patio/read.cgi?mode=view2&f=128&no=12 '--------------------------------------------------------------------------
'保存するファイルは、各自ご用意下さい。 Dim CSVFile(4) As String CSVFile(0) = System.IO.Path.GetFullPath("..\..\..\data\Chart3.csv") CSVFile(1) = System.IO.Path.GetFullPath("..\..\..\data\Chart4.csv") CSVFile(2) = System.IO.Path.GetFullPath("..\..\..\data\Chart5.csv") CSVFile(3) = System.IO.Path.GetFullPath("..\..\..\data\Chart6.csv") CSVFile(4) = System.IO.Path.GetFullPath("..\..\..\data\Chart7.csv") 'Excel 2007 〜 は、列数の Max が 1,048,576 行、16,384 列 '必要な場合は、変更して下さい。 Dim AllTextFormat(255) As Integer Dim i As Integer For i = 0 To 255 AllTextFormat(i) = 2 '全ての列を文字列型にする為の配列 Next i
Dim xlQueryTables As Excel.QueryTables = Nothing Dim xlQueryTable As Excel.QueryTable = Nothing Dim xlRange As Excel.Range = Nothing Dim xlSheet1 As Excel.Worksheet = Nothing For i = 0 To CSVFile.GetUpperBound(0) 'ファイル数分シートがあるかを調査 If xlSheets.Count >= i + 1 Then xlSheet1 = DirectCast(xlSheets.Item(i + 1), Excel.Worksheet) Else '無ければシートを追加 xlSheet1 = DirectCast(xlSheets.Add, Excel.Worksheet) End If xlRange = xlSheet1.Range("A1") xlQueryTables = xlSheet1.QueryTables xlQueryTable = xlQueryTables.Add(Connection:="TEXT;" & CSVFile(i), Destination:=xlRange)
With xlQueryTable .TextFilePlatform = 932 'Excel 2000 の場合は、xlWindows で .TextFileCommaDelimiter = True '全ての列をテキスト型に設定(無難なので) .TextFileColumnDataTypes = AllTextFormat .Refresh() End With MRComObject(xlQueryTable) MRComObject(xlQueryTables) MRComObject(xlRange) MRComObject(xlSheet1)
'確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000) Next i
'ファイルを保存するようにしましたので、確認して見て下さい。
'============================================================================= 'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行 Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), True) 'False の場合保存しないで終了 'Excel.EXE がタスクマネージャに残っていないか調査(実使用時は必要なし) Call ProcessCheck() End Sub
|
VB2010からExcelのWorksheetの列幅を取得・列幅を設定(VB.NET) (No.13の個別表示) [スレッド一覧へ] |
- 日時: 2012/06/06 19:06
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:Excel VBA,Excel2010,列幅を取得,列幅を設定,文字列に合せ列幅を自動調整* *********************************************************************************** '=================================================================================================== '投 稿 日:2012.05.05 '投 稿 者:VBレスキュー(花ちゃん) 'タイトル:VB2010 から Excel の Worksheet の列幅を取得・列幅を設定 '========1=========2=========3=========4=========5=========6=========7=========8=========9=========0
Private Sub Button11_Click(sender As System.Object, e As System.EventArgs) Handles Button11.Click Call ExcelOpen("", "") '新規ファイルをオープンして、Excel を起動 '========================= 列幅を取得・列幅を設定 ============================
'-------------------- 下記のVB6.0用コードを移植 --------------------------- ' http://hanatyan.sakura.ne.jp/patio/read.cgi?mode=view2&f=128&no=6 '-------------------------------------------------------------------------- 'Excel 操作部分(列幅を取得・列幅を設定・セルの文字列長に合せて列幅を設定する) '列幅を取得(列幅の単位は、標準スタイルの 1 文字分の幅に相当します。 Dim xlRange As Excel.Range xlRange = xlSheet.Range("A:X")
'プロポーショナル フォントでは、数字の 0 の幅が列幅の単位になります) MessageBox.Show(Me, xlRange.ColumnWidth.ToString()) '8.38(72ピクセル)
'列幅を取得(ポイント単位) MessageBox.Show(Me, xlRange.Width.ToString()) '1296
'A列〜X列までの列幅を5に設定 xlRange.ColumnWidth = 5 'ここも下記行で、xlRange の参照先を変更するのでその前にデクリメントを 'しておかないと Range("A:X") の参照先がなくなり破棄できなくなる MRComObject(xlRange)
'仮データを入力 xlRange = xlSheet.Range("B1:D1") xlRange.Value = "あいうえおかきくけこ" 'データの文字列長に合せて列幅を自動調整 Dim xlColumns As Excel.Range xlColumns = xlRange.Columns 'この場合は、引数を指定しないので、これでOK xlColumns.AutoFit() MRComObject(xlColumns) MRComObject(xlRange) '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
'============================================================================= 'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行 Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了 'Excel.EXE がタスクマネージャに残っていないか調査(実使用時は必要なし) Call ProcessCheck() End Sub
|
VB2010からExcelのWorksheetの行の高さを設定(VB.NET) (No.14の個別表示) [スレッド一覧へ] |
- 日時: 2012/05/29 11:12
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:Excel VBA,Excel2010,行の高さを設定,行の高さを自動調整 * *********************************************************************************** '=================================================================================================== '投 稿 日:2012.05.06 '投 稿 者:VBレスキュー(花ちゃん) 'タイトル:VB2010 から Excel の Worksheet の行の高さを設定・行の高さを自動調整 '========1=========2=========3=========4=========5=========6=========7=========8=========9=========0
Private Sub Button12_Click(sender As System.Object, e As System.EventArgs) Handles Button12.Click 'テスト用の適当なファイルを用意しておいて下さい。 '既存のファイルをオープンして、Excel を起動 Call ExcelOpen(System.IO.Path.GetFullPath("..\..\..\data\DBTest.xls"), "Sheet1") '==================== 行の高さを設定・行の高さを自動調整 ===================== '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
Dim xlRange As Excel.Range xlRange = xlSheet.Range("3:10") '行の高さを25 ポイント(25/72 インチ)に設定 xlRange.RowHeight = 25 '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
'行の高さを文字の高さに合せて自動調整 Dim xlRows As Excel.Range xlRows = xlRange.Rows xlRows.AutoFit() MRComObject(xlRows) MRComObject(xlRange) '確認のために、2秒間表示しておく System.Threading.Thread.Sleep(2000)
'============================================================================= 'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行 Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了 'Excel.EXE がタスクマネージャに残っていないか調査(実使用時は必要なし) Call ProcessCheck() End Sub
|
VB2010からExcelのWorksheetの使用済みのセル範囲を取得(VB.NET) (No.15の個別表示) [スレッド一覧へ] |
- 日時: 2012/06/06 19:08
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:Excel VBA,Excel2010,使用済みのセル範囲,Activateセル領域,A1 形式 * *********************************************************************************** '=================================================================================================== '投 稿 日:2012.05.06 '投 稿 者:VBレスキュー(花ちゃん) 'タイトル:VB2010 から Excel の Worksheet の使用済みのセル範囲を取得 '========1=========2=========3=========4=========5=========6=========7=========8=========9=========0
Private Sub Button13_Click(sender As System.Object, e As System.EventArgs) Handles Button13.Click Call ExcelOpen("", "") '新規ファイルをオープンして、Excel を起動 '======================== 使用済みのセル範囲を取得 ===========================
'-------------------- 下記のVB6.0用コードを移植 --------------------------- ' http://hanatyan.sakura.ne.jp/patio/read.cgi?mode=view2&f=128&no=8 '-------------------------------------------------------------------------- Dim xlRange As Excel.Range Dim Dat(2, 5) As Object Dat(0, 0) = 4 : Dat(0, 1) = 4 : Dat(0, 2) = 5 : Dat(0, 3) = 8 : Dat(0, 4) = 9 : Dat(0, 5) = "" Dat(1, 0) = 3 : Dat(1, 1) = 3 : Dat(1, 2) = 5 : Dat(1, 3) = 9 : Dat(1, 4) = "" : Dat(1, 5) = "" Dat(2, 0) = 1 : Dat(2, 1) = 7 : Dat(2, 2) = 1 : Dat(2, 3) = 6 : Dat(2, 4) = 4 : Dat(2, 5) = 3 xlRange = xlSheet.Range("A1:F3") 'データの入力セル範囲 xlRange.Value = Dat 'セルへデータの入力 '1秒間表示しておく MRComObject(xlRange) System.Threading.Thread.Sleep(1000)
'データの入力範囲の取得 '指定のセル位置を含む空白行と空白列に囲まれた最小のセル範囲を取得 'Activateなセル("A1")があるActivateセル領域を選択します。 xlRange = xlSheet.Range("A1") xlRange.Activate() Dim xlCurrentRegion As Excel.Range xlCurrentRegion = xlRange.CurrentRegion xlCurrentRegion.Select() '---------------------------------------------- 'Address プロパティでその範囲を A1 形式で取得。 Dim xlRange1 As Excel.Range xlRange1 = xlSheet.Range("A5") '又は、xlRange1 = xlSheet.Range(R1ToA1(5, 1)) xlRange1.Value = "セル A1 があるActivateセル領域は " & _ xlCurrentRegion.Address(False, False, Excel.XlReferenceStyle.xlA1) & " の範囲です。" MRComObject(xlRange1) MRComObject(xlRange) MRComObject(xlCurrentRegion) '1秒間表示しておく System.Threading.Thread.Sleep(1000) '----------------------------------------------
'xlSheet 上の使用済みのセル範囲を取得 Dim xlCells As Excel.Range xlCells = xlSheet.Cells xlRange1 = DirectCast(xlCells(6, 1), Excel.Range) Dim xlUsedRange As Excel.Range xlUsedRange = xlSheet.UsedRange xlRange1.Value = "使用済みセル領域は " & _ xlUsedRange.Address(False, False, Excel.XlReferenceStyle.xlA1) & " です。" MRComObject(xlUsedRange) MRComObject(xlCells) MRComObject(xlRange1) '1秒間表示しておく System.Threading.Thread.Sleep(1000)
'============================================================================= 'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行 Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了 'Excel.EXE がタスクマネージャに残っていないか調査(実使用時は必要なし) Call ProcessCheck() End Sub
|
R1C1形式をA1形式に変換する関数及びその使用例(VB.NET) (No.16の個別表示) [スレッド一覧へ] |
- 日時: 2012/05/29 11:22
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:Excel VBA,Excel2010,R1C1形式,A1形式,セル番地,行番,列番,列数,行数 * *********************************************************************************** '=================================================================================================== '投 稿 日:2012.05.06 '投 稿 者:VBレスキュー(花ちゃん) 'タイトル:R1C1形式をA1形式に変換する関数及びその使用例 '========1=========2=========3=========4=========5=========6=========7=========8=========9=========0 同様の関数は今までも作っていたのですが、Excel 2007 以降は、列数の Max が 255 →16,384 列 に 変更されたのに伴い、今まで使っていた関数では、702 列("ZZ")までしか対応できませんので、作り 直しました。 旧の関数 http://www.hanatyan.sakura.ne.jp/dotnet/Excel07.htm#no3 但し、18,278 列 ZZZ までの対応となっております。 '-------------------------------------------------------------------------------------------------- Private Sub Button14_Click(sender As System.Object, e As System.EventArgs) Handles Button14.Click 'R1C1形式をA1形式に変換する関数の使用例 Dim R1 As Integer = 10 '行番 Dim C1 As Integer = 1378 '列番 'Excel の裏に隠れたりしますので、オーナーウィンドウ(Me)を指定下さい。 '結果 (10,1378) → ("AZZ10") MessageBox.Show(R1.ToString() & " , " & C1.ToString() & " = " & R1ToA1(R1, C1) & " です。") End Sub
Private Function R1ToA1(ByVal r1 As Integer, ByVal c1 As Integer) As String 'R1C1形式のアドレスをA1形式に変換する関数 Dim s As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" Dim A1 As String = "" If c1 < 1 Or c1 > 16384 Then MessageBox.Show("指定が間違っています。") A1 = "A1" Return A1 End If If c1 <= 26 Then A1 = s.Chars(c1 - 1) & CStr(r1) ElseIf c1 <= 702 Then A1 = s.Chars(((c1 - 1) \ 26) - 1) & s.Chars(((c1 - 1) Mod 26)) & CStr(r1) Else A1 = s.Chars(((c1 - 703) \ 676)) & s.Chars((((c1 - 703) \ 26) Mod 26)) & _ s.Chars(((c1 - 1) Mod 26)) & CStr(r1) End If Return A1 End Function
|
A1形式をR1C1形式に変換する関数及びその使用例(VB.NET) (No.17の個別表示) [スレッド一覧へ] |
- 日時: 2012/06/06 19:12
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:Excel VBA,Excel2010,R1C1形式,A1形式,セル番地,行番,列番,列数,行数 * *********************************************************************************** '=================================================================================================== '投 稿 日:2012.05.06 '投 稿 者:VBレスキュー(花ちゃん) 'タイトル:A1形式をR1C1形式に変換する関数及びその使用例 '========1=========2=========3=========4=========5=========6=========7=========8=========9=========0 >>16 R1C1形式をA1形式に変換する関数及びその使用例 の逆に変換する関数です。 仕様等は、上記同様ですので、上記関数の説明文等もご覧下さい。
初め、計算式で求める方法で作ったのですが、複雑になり、範囲指定の場合まで対応できず、Excel の Address 関数を使った方法で、"A2:AZZ200" のような指定もできるようにも作ってみました。 使用する場面に合せるなり、改造するなりして使って見て下さい。 '--------------------------------------------------------------------------------------------------
Private Sub Button15_Click(sender As System.Object, e As System.EventArgs) Handles Button15.Click
'=================== A1形式をR1C1形式に変換する関数 ========================== Dim A1 As String = "AZZ200" '行番 'Excel の裏に隠れたりしますので、オーナーウィンドウ(Me)を指定下さい。 Dim r1a1() As Integer = A1ToR1(A1) '結果 AZZ200 = 200,1378 です。 MessageBox.Show(A1 & " = " & r1a1(0).ToString() & "," & r1a1(1).ToString() & " です。")
'=============================================================================
Call ExcelOpen("", "") '新規ファイルをオープンして、Excel を起動 xlApp.Visible = False '-------------------------------------------------------------------------- 'Excel の Address 関数を使った方が簡単かも Dim xlRange As Excel.Range xlRange = xlSheet.Range("AZZ200") Dim Col() As String = xlRange.Address(True, True, _ Excel.XlReferenceStyle.xlR1C1).Replace("R", "").Split("C"c) MessageBox.Show("AZZ200 = " & Col(0) & " , " & Col(1) & " です。") MRComObject(xlRange)
Dim r1c1() As Integer = A1ToR1C1("A2:AZZ200") '結果 [A2:AZZ200] = 2,1,200,1378 です。 MessageBox.Show("[A2:AZZ200] = " & r1c1(0).ToString() & "," & r1c1(1).ToString() & _ " , " & r1c1(2).ToString() & "," & r1c1(3).ToString() & " です。")
'=============================================================================
'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行 Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了 'Excel.EXE がタスクマネージャに残っていないか調査(実使用時は必要なし) Call ProcessCheck() End Sub
Private Function A1ToR1C1(ByVal A1 As String) As Integer() 'A1形式をR1C1形式に変換する関数(Excel の Address 関数を使った方法) Dim adr1 As String = "A1" Dim adr2 As String = "A1" Dim r1c1(3) As Integer If A1.IndexOf(":") > 0 Then Dim wrk() As String = A1.Split(":"c) adr1 = wrk(0) adr2 = wrk(1) Else adr1 = A1 adr2 = "A1" End If Dim xlRange As Excel.Range xlRange = xlSheet.Range(adr1) Dim Col() As String = xlRange.Address(True, True, _ Excel.XlReferenceStyle.xlR1C1).Replace("R", "").Split("C"c) MRComObject(xlRange) 'ここも参照先が変わるので
r1c1(0) = CInt(Col(0)) r1c1(1) = CInt(Col(1)) xlRange = xlSheet.Range(adr2) Dim Col1() As String = xlRange.Address(True, True, _ Excel.XlReferenceStyle.xlR1C1).Replace("R", "").Split("C"c) r1c1(2) = CInt(Col1(0)) r1c1(3) = CInt(Col1(1)) MRComObject(xlRange) Return r1c1 End Function
Private Function A1ToR1(ByVal A1 As String) As Integer() 'A1形式をR1C1形式に変換する関数(計算式で求める方法) Dim R1A1(1) As Integer R1A1(0) = 0 R1A1(1) = 0 A1.ToUpper() Dim nLen As Integer = A1.Length Dim strColum As String = "" Dim strRow As String = ""
For i As Integer = 0 To nLen - 1 Dim wrk As String = A1.Substring(i, 1) If AscW(wrk) >= 64 And AscW(wrk) <= 90 Then strColum &= wrk ElseIf AscW(wrk) >= 48 And AscW(wrk) <= 57 Then strRow &= wrk Else MessageBox.Show("指定が間違っています。") Return R1A1 End If Next Debug.Print(strColum & " : " & strRow) A1 = strColum Dim s As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" Dim B1 As String = A1.ToUpper Dim A2 As String = "" Dim n As Integer = B1.Length If n > 3 Then n = 3 For i As Integer = 0 To n - 1 If s.IndexOf(B1.Substring(i, 1)) >= 0 Then A2 &= B1.Substring(i, 1) End If Next n = A2.Length Dim C1 As Integer = 0 If n = 1 Then C1 = s.IndexOf(A2) + 1 ElseIf n = 2 Then C1 = (s.IndexOf(A2.Substring(0, 1)) + 1) * 26 C1 += s.IndexOf(A2.Substring(1, 1)) + 1 Else C1 = ((s.IndexOf(A2.Substring(0, 1)) + 1) * 676) C1 += (s.IndexOf(A2.Substring(1, 1)) + 1) * 26 C1 += s.IndexOf(A2.Substring(2, 1)) + 1 End If R1A1(0) = CInt(strRow) R1A1(1) = C1 Return R1A1 End Function
Private Function R1ToA1(ByVal r1 As Integer, ByVal c1 As Integer) As String 'R1C1形式のアドレスをA1形式に変換する関数 Dim s As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" Dim A1 As String = "" If c1 < 1 Or c1 > 16384 Then MessageBox.Show("指定が間違っています。") A1 = "A1" Return A1 End If If c1 <= 26 Then A1 = s.Chars(c1 - 1) & CStr(r1) ElseIf c1 <= 702 Then A1 = s.Chars(((c1 - 1) \ 26) - 1) & s.Chars(((c1 - 1) Mod 26)) & CStr(r1) Else A1 = s.Chars(((c1 - 703) \ 676)) & s.Chars((((c1 - 703) \ 26) Mod 26)) & _ s.Chars(((c1 - 1) Mod 26)) & CStr(r1) End If Return A1 End Function
|
VB2010からExcelのWorksheet上で行・列・セルの挿入及び削除(VB.NET) (No.18の個別表示) [スレッド一覧へ] |
- 日時: 2012/06/06 19:14
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:Excel VBA,Excel2010,行の挿入,列の挿入,セルの挿入,行の削除,列の削除 * *********************************************************************************** '=================================================================================================== '投 稿 日:2012.05.06 '投 稿 者:VBレスキュー(花ちゃん) 'タイトル:VB2010 から Excel の Worksheet 上で行・列・セルの挿入及び削除 '========1=========2=========3=========4=========5=========6=========7=========8=========9=========0
Private Sub Button16_Click(sender As System.Object, e As System.EventArgs) Handles Button16.Click Call ExcelOpen("", "") '新規ファイルをオープンして、Excel を起動 '===================== 行・列・セルの挿入及び削除 ============================
'-------------------- 下記のVB6.0用コードを移植 --------------------------- ' http://hanatyan.sakura.ne.jp/patio/read.cgi?mode=view2&f=128&no=11 '--------------------------------------------------------------------------
'何も記入していないと解らないので仮データを記入(R1ToA1 関数の使用例もかねて) Dim xlRange As Excel.Range = Nothing For c As Integer = 1 To 10 For r As Integer = 1 To 20 xlRange = xlSheet.Range(R1ToA1(r, c), R1ToA1(r, c)) xlRange.Value = r + c MRComObject(xlRange) 'ここも直ちにデクリメントの事 Next r Next c '動作確認の為に1秒間表示しておく System.Threading.Thread.Sleep(1000)
'--------------------------------------------------------- '4行目と5行の間に1行挿入します。 Dim xlRows As Excel.Range Dim xlRow As Excel.Range xlRows = xlSheet.Rows xlRow = DirectCast(xlRows.Item(5), Excel.Range) xlRow.Insert() '動作確認の為に1秒間表示しておく System.Threading.Thread.Sleep(1000) xlRow.Insert(Shift:=Excel.XlInsertShiftDirection.xlShiftDown) '上記と同じ MRComObject(xlRow) MRComObject(xlRows) '動作確認の為に1秒間表示しておく System.Threading.Thread.Sleep(1000)
'4行目と5行の間に1行挿入します。 '下記の場合は、"A1" のように指定するとセルの挿入になる xlRange = xlSheet.Range("5:5") xlRange.Insert() MRComObject(xlRange) '動作確認の為に1秒間表示しておく System.Threading.Thread.Sleep(1000)
'下記の場合は、"B5" として行の挿入になる xlRange = xlSheet.Range("B5") Dim xlEntireRow As Excel.Range xlEntireRow = xlRange.EntireRow xlEntireRow.Insert() MRComObject(xlEntireRow) MRComObject(xlRange) '動作確認の為に1秒間表示しておく System.Threading.Thread.Sleep(1000)
'------------------ 以上 4行挿入 ---------------------
'4列目と5列の間に1列挿入します。 Dim xlColumns As Excel.Range Dim xlColumn As Excel.Range xlColumns = xlSheet.Columns xlColumn = DirectCast(xlColumns.Item(5), Excel.Range) xlColumn.Insert() MRComObject(xlColumn) MRComObject(xlColumns) '動作確認の為に1秒間表示しておく System.Threading.Thread.Sleep(1000)
xlRange = xlSheet.Range("E:E") xlRange.Insert() '動作確認の為に1秒間表示しておく System.Threading.Thread.Sleep(1000)
Dim xlEntireColumn As Excel.Range xlEntireColumn = xlRange.EntireColumn xlEntireColumn.Insert() MRComObject(xlEntireColumn) MRComObject(xlRange) '動作確認の為に1秒間表示しておく System.Threading.Thread.Sleep(1000)
'------------------ 以上 3列挿入 ---------------------
'C列の5行目にセルを挿入します。 xlRange = xlSheet.Range("C5") xlRange.Insert() MRComObject(xlRange) '動作確認の為に1秒間表示しておく System.Threading.Thread.Sleep(1000)
'C列の3行目のセルを右に挿入します。 xlRange = xlSheet.Range("C3") xlRange.Insert(Shift:=Excel.XlInsertShiftDirection.xlShiftToRight) MRComObject(xlRange) '動作確認の為に1秒間表示しておく System.Threading.Thread.Sleep(1000)
'5行目を削除します。 xlRows = xlSheet.Rows xlRow = DirectCast(xlRows.Item(5), Excel.Range) xlRow.Delete() MRComObject(xlRow) MRComObject(xlRows) '動作確認の為に1秒間表示しておく System.Threading.Thread.Sleep(1000)
xlRange = xlSheet.Range("5:5") xlRange.Delete() MRComObject(xlRange) '動作確認の為に1秒間表示しておく System.Threading.Thread.Sleep(1000)
xlRange = xlSheet.Range("A5") xlEntireRow = xlRange.EntireRow xlEntireRow.Delete() MRComObject(xlRange) MRComObject(xlEntireRow) '動作確認の為に1秒間表示しておく System.Threading.Thread.Sleep(1000)
'C列の3行目のセルを左に削除します。 xlRange = xlSheet.Range("C3") xlRange.Delete(Shift:=Excel.XlDeleteShiftDirection.xlShiftToLeft) MRComObject(xlRange) '動作確認の為に1秒間表示しておく System.Threading.Thread.Sleep(1000)
'5列目を削除します。 xlColumns = xlSheet.Columns xlColumn = DirectCast(xlColumns.Item(5), Excel.Range) xlColumn.Delete() MRComObject(xlColumn) MRComObject(xlColumns) '動作確認の為に1秒間表示しておく System.Threading.Thread.Sleep(1000)
xlRange = xlSheet.Range("A5") xlEntireRow = xlRange.EntireRow xlEntireRow.Delete() MRComObject(xlRange) MRComObject(xlEntireRow) '動作確認の為に1秒間表示しておく System.Threading.Thread.Sleep(1000)
xlRange = xlSheet.Range("E:E") xlRange.Delete() MRComObject(xlRange) '動作確認の為に1秒間表示しておく System.Threading.Thread.Sleep(1000)
xlRange = xlSheet.Range("E:E") '再度指定しないと削除済みなのでエラーとなります。 xlEntireColumn = xlRange.EntireColumn xlEntireColumn.Delete() MRComObject(xlRange) MRComObject(xlEntireColumn) '動作確認の為に1秒間表示しておく System.Threading.Thread.Sleep(1000)
'C列の5行目のセルを削除します。 xlRange = xlSheet.Range("C5") xlRange.Delete() MRComObject(xlRange) '動作確認の為に1秒間表示しておく System.Threading.Thread.Sleep(1000)
'============================================================================= 'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行 Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了 'Excel.EXE がタスクマネージャに残っていないか調査(実使用時は必要なし) Call ProcessCheck() End Sub
|
指定のセルが指定の範囲内にあるか、どうかを調査(VB.NET) (No.19の個別表示) [スレッド一覧へ] |
- 日時: 2012/05/29 11:31
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:Excel VBA,Excel2010,指定の範囲内にあるか,共有セル範囲,指定のセル * *********************************************************************************** '=================================================================================================== '投 稿 日:2012.05.06 '投 稿 者:VBレスキュー(花ちゃん) 'タイトル:指定のセルが指定の範囲内にあるか、どうかを調査 '========1=========2=========3=========4=========5=========6=========7=========8=========9=========0
Private Sub Button17_Click(sender As System.Object, e As System.EventArgs) Handles Button17.Click Call ExcelOpen("", "") '新規ファイルをオープンして、Excel を起動 '==================== 指定のセルが指定の範囲内にあるか =======================
'---------------- MS サポート技術情報(文書番号: 259137) ------------------- 'Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) ' If Not Intersect(Target, Range("MyDefinedRange")) Is Nothing Then ' MsgBox(Target.Address & " is in MyDefinedRange.") ' Else ' MsgBox(Target.Address & " is NOT in MyDefinedRange.") ' End If 'End Sub '--------------------------------------------------------------------------
'指定のセルが、指定のセル範囲内にあるか、どうかを調べる Dim xlRange As Excel.Range Dim xlTargetRange As Excel.Range xlRange = xlSheet.Range("A1:H20") '指定のセル範囲内 xlTargetRange = xlSheet.Range("G15") '指定のセル位置
'Application.Intersect メソッド : 複数のセル範囲の共有セル範囲を '表す Range オブジェクトを返します。 '共有セル範囲を調べているので、xlTRange と xlRange は入れ替えても同じです。 Dim xlIntersect As Excel.Range xlIntersect = xlApp.Intersect(xlTargetRange, xlRange) If Not xlIntersect Is Nothing Then 'Range.Address プロパティを使って、A1 形式のアドレスを取得 MessageBox.Show(Me, " セル[" & xlTargetRange.Address(False, False) & "]は、セル[" & _ xlRange.Address(False, False) & "]の範囲内にあります。") Else MessageBox.Show(Me, " セル[" & xlTargetRange.Address(False, False) & "]は、セル[" & _ xlRange.Address(False, False) & "]の範囲内には、ありません。") End If MRComObject(xlTargetRange) MRComObject(xlIntersect) MRComObject(xlRange)
xlTargetRange = xlSheet.Range("A1:G21") xlRange = xlSheet.Range("A1:H20") xlIntersect = xlApp.Intersect(xlTargetRange, xlRange) If Not xlIntersect Is Nothing Then 'Excel の裏に隠れたりしますので、オーナーウィンドウ(Me)を指定下さい。 MessageBox.Show(Me, " セル[" & xlTargetRange.Address(False, False) & "]は、セル[" & _ xlRange.Address(False, False) & "]の範囲内にあります。") Else MessageBox.Show(Me, " セル[" & xlTargetRange.Address(False, False) & "]は、セル[" & _ xlRange.Address(False, False) & "]の範囲内には、ありません。") End If MRComObject(xlTargetRange) MRComObject(xlIntersect) MRComObject(xlRange)
'============================================================================= 'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行 Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了 'Excel.EXE がタスクマネージャに残っていないか調査(実使用時は必要なし) Call ProcessCheck() End Sub
|
Excel のシート数・シート名の取得及びシートの追加・削除(VB.NET) (No.20の個別表示) [スレッド一覧へ] |
- 日時: 2012/06/06 19:16
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:Excel VBA,Excel2010,シート数,シート名,シートの追加,シートの削除 * *********************************************************************************** '=================================================================================================== '投 稿 日:2012.05.06 '投 稿 者:VBレスキュー(花ちゃん) 'タイトル:Excel のシート数・シート名の取得及びシートの追加・削除 '========1=========2=========3=========4=========5=========6=========7=========8=========9=========0
Private Sub Button18_Click(sender As System.Object, e As System.EventArgs) Handles Button18.Click Call ExcelOpen("", "") '新規ファイルをオープンして、Excel を起動 '============== シート数・シート名の取得及びシートの追加・削除 ===============
'-------------------- 下記のVB6.0用コードを移植 --------------------------- ' http://hanatyan.sakura.ne.jp/patio/read.cgi?mode=view2&f=128&no=7 '--------------------------------------------------------------------------
'シート(Worksheet)数の取得 Dim sheetCount As Integer sheetCount = xlSheets.Count 'Excel の裏に隠れたりしますので、オーナーウィンドウ(Me)を指定下さい。 MessageBox.Show(Me, "現在のシート(Worksheet)数 = " & sheetCount & " です。")
'新規にシートを追加 Dim xlSheet2 As Excel.Worksheet xlSheet2 = DirectCast(xlSheets.Add, Excel.Worksheet) MRComObject(xlSheet2)
sheetCount = xlSheets.Count MessageBox.Show(Me, "シートを1個追加したので、Worksheet 数 = " & sheetCount & " です。")
'追加したシートの名前を取得 Dim xlSheet1 As Excel.Worksheet xlSheet1 = DirectCast(xlSheets.Item(sheetCount), Excel.Worksheet) MessageBox.Show(Me, "追加したシート名 = " & xlSheet1.Name & " です。")
'追加したシートの名前を変更 xlSheet1.Name = "Test1"
'変更したシート名を取得(確認) MessageBox.Show(Me, "シート名を " & xlSheet1.Name & " に変更しました。")
'追加したシートを削除 xlSheet1.Delete() sheetCount = xlSheets.Count MRComObject(xlSheet1) MessageBox.Show(Me, "追加したシートを削除したので、Worksheet 数 = " & sheetCount & " です。")
'シート名の取得 Dim xlElement As Excel.Worksheet = Nothing For Each xlElement In xlSheets Debug.Print(xlElement.Name) MRComObject(xlElement) Next
'----------------------------------------------------------------------- '新規にBook を開いた時に表示したいシート数を設定する場合 'Excelのツール→オプション→全般→新しいブックのシート数 の設定と同じ
'xlApp.SheetsInNewWorkbook = 1
'Book をオープンする前に書いて下さい。 '-----------------------------------------------------------------------
'============================================================================= 'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行 Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了 'Excel.EXE がタスクマネージャに残っていないか調査(実使用時は必要なし) Call ProcessCheck() End Sub
|
VB2010 から Excel のワークシート関数を使用する(VB.NET) (No.21の個別表示) [スレッド一覧へ] |
- 日時: 2012/06/06 19:17
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:Excel VBA,Excel2010,ワークシート関数,Excel の関数,エクセルの関数 * *********************************************************************************** '=================================================================================================== '投 稿 日:2012.05.06 '投 稿 者:VBレスキュー(花ちゃん) 'タイトル:VB2010 から Excel のワークシート関数を使用する '========1=========2=========3=========4=========5=========6=========7=========8=========9=========0 下記では、代表的な関数について試していますが、その他の関数についても同様操作で実行 できるはずですので、試して見て下さい。 '--------------------------------------------------------------------------------------------------
Private Sub Button19_Click(sender As System.Object, e As System.EventArgs) Handles Button19.Click Call ExcelOpen("", "") '新規ファイルをオープンして、Excel を起動
'===================== VB2010 からExcel の関数を使用する =====================
'-------------------- 下記のVB6.0用コードを移植 --------------------------- ' http://hanatyan.sakura.ne.jp/patio/read.cgi?mode=view2&f=128&no=8 '--------------------------------------------------------------------------
'仮データの入力 Dim xlRange As Excel.Range = Nothing Dim retValue As Double = 0 For c As Integer = 1 To 10 For r As Integer = 1 To 10 xlRange = xlSheet.Range(R1ToA1(r, c), R1ToA1(r, c)) retValue += 1 xlRange.Value = retValue MRComObject(xlRange) 'ここも直ちにデクリメントして下さい。 Next r Next c
xlRange = xlSheet.Range("B3:D10") 'Visual Basic から Excel のワークシート関数を使用する Dim xlFunction As Excel.WorksheetFunction = xlApp.WorksheetFunction
'指定セル範囲内のデータの個数を取得 retValue = xlFunction.Count(xlRange) 'Excel の裏に隠れたりしますので、オーナーウィンドウ(Me)を指定下さい。 MessageBox.Show(Me, "[A1:j10]の範囲内のデータの個数 = " & retValue & " です。")
'指定セル範囲内のデータの最小値を取得 retValue = xlFunction.Min(xlRange) MessageBox.Show(Me, "[A1:j10]の範囲内のデータの最小値 = " & retValue & " です。")
'指定セル範囲内のデータの最大値を取得 retValue = xlFunction.Max(xlRange) MessageBox.Show(Me, "[A1:j10]の範囲内のデータの最大値 = " & retValue & " です。")
'指定セル範囲内のデータの合計を取得 retValue = xlFunction.Sum(xlRange) MessageBox.Show(Me, "[A1:j10]の範囲内のデータの合計 = " & retValue & " です。")
'指定セル範囲内のデータの平均値を取得 retValue = xlFunction.Average(xlRange) MessageBox.Show(Me, "[A1:j10]の範囲内のデータの平均値 = " & retValue & " です。")
MRComObject(xlRange) MRComObject(xlFunction)
'============================================================================= 'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行 Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了 'Excel.EXE がタスクマネージャに残っていないか調査(実使用時は必要なし) Call ProcessCheck() End Sub
|
VB2010 から Excel の表の縦横の合計を求める(VB.NET) (No.22の個別表示) [スレッド一覧へ] |
- 日時: 2012/06/06 19:19
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:Excel VBA,Excel2010,合計を求める,SUM 関数,計算式をコピー * *********************************************************************************** '=================================================================================================== '投 稿 日:2012.05.06 '投 稿 者:VBレスキュー(花ちゃん) 'タイトル:VB2010 から Excel の表の縦横の合計を求める '========1=========2=========3=========4=========5=========6=========7=========8=========9=========0
Private Sub Button20_Click(sender As System.Object, e As System.EventArgs) Handles Button20.Click Call ExcelOpen("", "") '新規ファイルをオープンして、Excel を起動
'========================== 表の縦横の合計を求める ===========================
'-------------------- 下記のVB6.0用コードを移植 --------------------------- ' http://hanatyan.sakura.ne.jp/patio/read.cgi?mode=view2&f=128&no=10 '--------------------------------------------------------------------------
'仮データの入力 Dim xlRange As Excel.Range = Nothing Dim retValue As Double = 0 '範囲を変えて試して見て下さい。(セル C3 を含む範囲内で) For c As Integer = 1 To 5 For r As Integer = 1 To 6 xlRange = xlSheet.Range(R1ToA1(r, c), R1ToA1(r, c)) retValue += 1 xlRange.Value = retValue MRComObject(xlRange) Next r Next c '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
'Activateなセル("C1")があるActivateセル領域を選択します。 '必ず、表内のセルを指定して下さい。 xlRange = xlSheet.Range("C3") xlRange.Activate() Dim xlCurrentRegion As Excel.Range xlCurrentRegion = xlRange.CurrentRegion xlCurrentRegion.Select() 'セル領域のアドレス(A1:E6)を取得しR1C1 形式のアドレス(1,1,6,5)に変換 'A1ToR1C1 関数の実使用例 Dim r1c1() As Integer = A1ToR1C1(xlCurrentRegion.Address( _ False, False, Excel.XlReferenceStyle.xlA1)) MRComObject(xlCurrentRegion) '直ちに解放しておく事 MRComObject(xlRange)
'範囲の開始位置を整数で求める A1 → 1,1 Dim r1 As Integer = r1c1(0) '1 行 Dim C1 As Integer = r1c1(1) '1 列 '範囲の終了位置を整数で求める E6 → 6,5 Dim r2 As Integer = r1c1(2) '6 行 Dim C2 As Integer = r1c1(3) '5 列
'行の合計を求めるセル位置を設定 1,5+1 → F1 xlRange = xlSheet.Range(R1ToA1(r1, C2 + 1)) '行の合計を求める xlRange.FormulaR1C1 = "=SUM(RC[-" & CInt(C2 - C1 + 1) & "]:RC[-1])"
Dim xlRange1 As Excel.Range '計算式をコピーする範囲を求める(必ず、別の Range で受けて下さい。) xlRange1 = xlSheet.Range(R1ToA1(r1, C2 + 1) & ":" & R1ToA1(r2, C2 + 1)) '計算式を下方向にコピー(xlRange と xlRange1 の使い分けに注目) xlRange.AutoFill(Destination:=xlRange1, Type:=Excel.XlAutoFillType.xlFillDefault) MRComObject(xlRange1) MRComObject(xlRange)
'列の合計を求めるセル位置を設定 xlRange = xlSheet.Range(R1ToA1(r2 + 1, C1)) '列の合計を求める xlRange.Formula = "=SUM(R[-" & CInt(r2 - r1 + 1) & "]C:R[-1]C)" '計算式をコピーする範囲を求める(必ず、別の Range で受けて下さい。) xlRange1 = xlSheet.Range(R1ToA1(r2 + 1, C1) & ":" & R1ToA1(r2 + 1, C2 + 1)) '計算式を下方向にコピー(xlRange と xlRange1 の使い分けに注目) xlRange.AutoFill(Destination:=xlRange1, Type:=Excel.XlAutoFillType.xlFillDefault) MRComObject(xlRange) MRComObject(xlRange1) '確認のために、2秒間表示しておく System.Threading.Thread.Sleep(2000)
'============================================================================= 'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行 Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了 'Excel.EXE がタスクマネージャに残っていないか調査(実使用時は必要なし) Call ProcessCheck() End Sub
|
Excel の指定列のデータから重複しないデータを抽出(VB.NET) (No.23の個別表示) [スレッド一覧へ] |
- 日時: 2012/06/06 19:20
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:Excel VBA,Excel2010,オートフィルター,データリスト,重複しないデータ * *********************************************************************************** '=================================================================================================== '投 稿 日:2012.05.06 '投 稿 者:VBレスキュー(花ちゃん) 'タイトル:Excel の指定列のデータから重複しないデータを抽出 '========1=========2=========3=========4=========5=========6=========7=========8=========9=========0
Private Sub Button21_Click(sender As System.Object, e As System.EventArgs) Handles Button21.Click Call ExcelOpen("", "") '新規ファイルをオープンして、Excel を起動 '================ 指定列のデータから重複しないデータを抽出 ===================
'-------------------- 下記のVB6.0用コードを移植 --------------------------- ' http://hanatyan.sakura.ne.jp/patio/read.cgi?mode=view2&f=128&no=13 '--------------------------------------------------------------------------
'仮データの書込み Dim Dat(9, 0) As Object Dat(0, 0) = "品 名" : Dat(1, 0) = "みかん" : Dat(2, 0) = "トマト" Dat(3, 0) = "いちご" : Dat(4, 0) = "みかん" : Dat(5, 0) = "トマト" Dat(6, 0) = "いちご" : Dat(7, 0) = "みかん" : Dat(8, 0) = "トマト" Dat(9, 0) = "いちご" Dim xlRange As Excel.Range xlRange = xlSheet.Range("B2:B11") xlRange.Value = Dat MRComObject(xlRange) '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000) '--------------------------------------------------------------------------
'B列のデータリストからオートフィルターを使って重複したものを除いたリストだけを抽出 xlRange = xlSheet.Range("B2:B11") Dim xlRange1 As Excel.Range xlRange1 = xlSheet.Range("B2") xlRange.AdvancedFilter(Excel.XlFilterAction.xlFilterInPlace, xlRange1, , True) MRComObject(xlRange)
'抽出したデータ件数を取得 xlRange = xlSheet.Range("B2") Dim xlEndRange As Excel.Range xlEndRange = xlRange1.End(Excel.XlDirection.xlDown) Dim Count, i As Integer Count = xlEndRange.Row MRComObject(xlEndRange) MRComObject(xlRange1) MRComObject(xlRange)
ListBox1.Items.Clear() For i = 3 To Count xlRange = xlSheet.Range(R1ToA1(i, 2)) If CInt(xlRange.RowHeight) > 0 Then '抽出したデータを取得 ListBox1.Items.Add(xlRange.Value.ToString) End If MRComObject(xlRange) Next i '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
'============================================================================= 'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行 Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了 'Excel.EXE がタスクマネージャに残っていないか調査(実使用時は必要なし) Call ProcessCheck() End Sub
|
VB2010 から Excel の選択範囲内で指定文字を連続検索(VB.NET) (No.24の個別表示) [スレッド一覧へ] |
- 日時: 2012/06/06 19:21
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:Excel VBA,Excel2010,連続検索,置き換え,文字色,見つかった位置,再検索 * *********************************************************************************** '=================================================================================================== '投 稿 日:2012.05.06 '投 稿 者:VBレスキュー(花ちゃん) 'タイトル:VB2010 から Excel の選択範囲内で指定文字を連続検索 '========1=========2=========3=========4=========5=========6=========7=========8=========9=========0
Private Sub Button22_Click(sender As System.Object, e As System.EventArgs) Handles Button22.Click Call ExcelOpen("", "") '新規ファイルをオープンして、Excel を起動 '====================== 選択範囲内で指定文字を連続検索 =======================
'-------------------- 下記のVB6.0用コードを移植 --------------------------- ' http://hanatyan.sakura.ne.jp/patio/read.cgi?mode=view2&f=128&no=24 '-------------------------------------------------------------------------- '仮データの入力 Dim xlRange As Excel.Range = Nothing Dim retValue As Double = 0 '範囲を変えて試して見て下さい。(セル C3 を含む範囲内で) For c As Integer = 1 To 5 For r As Integer = 1 To 6 xlRange = xlSheet.Range(R1ToA1(r, c), R1ToA1(r, c)) retValue += 1 Dim s1 As String = CStr(ChrW(65 + r + c)) & CStr(ChrW(70 + r + c)) xlRange.Value = s1 & " " & Str(retValue) & " " & s1 MRComObject(xlRange) Next r Next c
xlRange = xlSheet.Range("C3") xlRange.Activate() '指定のセル位置を含む空白行と空白列に囲まれた最小のセル範囲を取得 Dim xlCurrentRegion As Excel.Range xlCurrentRegion = xlRange.CurrentRegion xlCurrentRegion.Select() 'セル領域のアドレス(A1:E6)を取得しR1C1 形式のアドレス(1,1,6,5)に変換 'A1ToR1C1 関数の実使用例 Dim r1c1() As Integer = A1ToR1C1(xlCurrentRegion.Address( _ False, False, Excel.XlReferenceStyle.xlA1)) MRComObject(xlCurrentRegion) MRComObject(xlRange)
'範囲の開始位置を整数で求める A1 → 1,1 Dim r1 As Integer = r1c1(0) '1 行 Dim C1 As Integer = r1c1(1) '1 列 '範囲の終了位置を整数で求める E6 → 6,5 Dim r2 As Integer = r1c1(2) '6 行 Dim C2 As Integer = r1c1(3) '5 列 Dim nCount As Integer = 0 Dim N As Integer = 0 Dim target As String = "GL" Dim xlCharacters As Excel.Characters = Nothing For c As Integer = C1 To C2 'C1 列 〜 C2 列までを調べる For r As Integer = r1 To r2 'R1 行 〜 R2 行までを調べる xlRange = xlSheet.Range(R1ToA1(r, c), R1ToA1(r, c)) Dim myText As String = xlRange.Value.ToString() '該当セル内で見つかったら、セル内に複数存在するか調べる N = InStr(1, myText, target) While N <> 0 '見つかった文字列の位置 xlCharacters = xlRange.Characters(Start:=N, Length:=target.Length) '見つかった文字列を赤色で太字で表示 Dim xlFont As Excel.Font xlFont = xlCharacters.Font With xlFont .Color = Color.Red .Bold = True End With MRComObject(xlFont) MRComObject(xlCharacters) nCount += 1 '見つかった文字列の個数をカウント '見つかった位置から再度検索を繰り返す。 N = InStr(N + 1, myText, target) End While MRComObject(xlRange) Next r Next c MessageBox.Show(Me, "[" & target & "]は、" & nCount.ToString() & " 回見つかりました。")
'============================================================================= 'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行 Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了 'Excel.EXE がタスクマネージャに残っていないか調査(実使用時は必要なし) Call ProcessCheck() End Sub
|
VB2010 から Excel の並べ替えを実行する(VB.NET) (No.25の個別表示) [スレッド一覧へ] |
- 日時: 2012/06/06 19:22
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:Excel VBA,Excel2010,並べ替え,ソート,Sort, * *********************************************************************************** '=================================================================================================== '投 稿 日:2012.05.06 '投 稿 者:VBレスキュー(花ちゃん) 'タイトル:VB2010 から Excel の並べ替え(ソート)を実行する '========1=========2=========3=========4=========5=========6=========7=========8=========9=========0
Private Sub Button23_Click(sender As System.Object, e As System.EventArgs) Handles Button23.Click Call ExcelOpen("", "") '新規ファイルをオープンして、Excel を起動 '============================= 並べ替え(ソート) ==============================
'-------------------------------------------------------------------------- '何も記入していないと解らないので仮データを記入(R1ToA1 関数の使用例もかねて) Dim xlRange As Excel.Range = Nothing Dim nRnd As New System.Random() For c As Integer = 1 To 10 For r As Integer = 1 To 20 xlRange = xlSheet.Range(R1ToA1(r, c), R1ToA1(r, c)) '1 〜 100 までのランダムなデータを作成 xlRange.Value = nRnd.Next(1, 100) ' CInt(100 * Rnd()) MRComObject(xlRange) Next r Next c '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000) '---------------------------------------------------------
'Range オブジェクトの Sort メソッド を使っての並べ替え '-------------------- 下記のVB6.0用コードを移植 --------------------------- ' http://www.hanatyan.sakura.ne.jp/vbhlp/excel09.htm#xl_1 '-------------------------------------------------------------------------- Dim xlRange1 As Excel.Range xlRange1 = xlSheet.Range("B1") xlRange = xlSheet.Range("A1:J20") 'セル範囲 "A1:J20" を B 列をキー(列単位)に降順の並べ替え xlRange.Sort(Key1:=xlRange1, Order1:=Excel.XlSortOrder.xlDescending, _ Orientation:=Excel.XlSortOrientation.xlSortColumns) MRComObject(xlRange1) MRComObject(xlRange) '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000) '--------------------------------------------------------------------------
' Excel 2007 〜 の Sort オブジェクト を使っての並べ替え ' --------------------- マクロの記録を取った場合 --------------------------- ' ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear ' ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("B1:B20") _ ' , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal ' With ActiveWorkbook.Worksheets("Sheet1").Sort ' .SetRange Range("A1:J20") ' .Header = xlGuess ' .MatchCase = False ' .Orientation = xlTopToBottom ' .SortMethod = xlPinYin ' .Apply ' End With '-------------------------------------------------------------------------- xlRange1 = xlSheet.Range("B1") xlRange = xlSheet.Range("A1:J20") Dim xlSort As Excel.Sort Dim xlSortFields As Excel.SortFields xlSort = xlSheet.Sort
xlSortFields = xlSort.SortFields Dim xlSortFields1 As Excel.SortField = Nothing With xlSortFields .Clear() 'SortFields オブジェクトをすべてクリアします '新しい並べ替えの条件を作成 'Key:並べ替える基準のセル SortOn:並べ替えの基準(値・セルの色等) 'Order: 並べ替えの順序(昇順・降順) CustomOrder:ユーザー定義の並べ替えの順序 'DataOption:数値とテキストの並べ替えの選択
'B 列を基準に、値 を基準に、昇順で、テキストを数値データとして並べ替えます。 'SortFields.Add メソッド は、新しい並べ替えフィールドを作成し、SortFields オブジェクトを返すので '変数に受けて解放してやらないとプロセスが終了しません。(ただ、このような使い方が正しいのかは、疑問) xlSortFields1 = .Add(Key:=xlRange1, SortOn:=Excel.XlSortOn.xlSortOnValues, _ Order:=Excel.XlSortOrder.xlAscending, _ DataOption:=Excel.XlSortDataOption.xlSortTextAsNumbers) 'Sort オブジェクトの開始位置と終了位置を設定します xlSort.SetRange(xlRange) '最初の行にヘッダー情報が含まれるかどうかを指定します xlSort.Header = Excel.XlYesNoGuess.xlNo '範囲全体が並べ替えの対象になります。 '大文字と小文字を区別して検索するには、True に設定します xlSort.MatchCase = False '並べ替え方向を指定します xlSort.Orientation = Excel.XlSortOrientation.xlSortColumns '列単位で並べ替え '中国語の並べ替え方法を指定します xlSort.SortMethod = Excel.XlSortMethod.xlPinYin '中国語の発音表記の順で並べ替え 'コピーした並べ替え書式を適用します。 xlSort.Apply() End With MRComObject(xlRange) MRComObject(xlSortFields1) MRComObject(xlSortFields) MRComObject(xlSort) MRComObject(xlRange1) '確認のために、3秒間表示しておく System.Threading.Thread.Sleep(3000)
'============================================================================= 'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行 Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了 'Excel.EXE がタスクマネージャに残っていないか調査(実使用時は必要なし) Call ProcessCheck() End Sub
|
VB2010 から Excel のシートの指定の範囲のデータを取得(VB.NET) (No.26の個別表示) [スレッド一覧へ] |
- 日時: 2012/06/06 19:24
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:Excel VBA,Excel2010,クリップボード,セルの個数を取得,1次元配列に確保* *********************************************************************************** '=================================================================================================== '投 稿 日:2012.05.06 '投 稿 者:VBレスキュー(花ちゃん) 'タイトル:VB2010 から Excel のシートの指定の範囲のデータを取得 '========1=========2=========3=========4=========5=========6=========7=========8=========9=========0
Private Sub Button24_Click(sender As System.Object, e As System.EventArgs) Handles Button24.Click Call ExcelOpen("", "") '新規ファイルをオープンして、Excel を起動 '===================== シートの指定の範囲のデータを取得 ====================== '-------------------------------------------------------------------------- '仮データの入力 Dim xlRange As Excel.Range = Nothing For r As Integer = 1 To 20 For c As Integer = 1 To 10 xlRange = xlSheet.Range(R1ToA1(r, c), R1ToA1(r, c)) xlRange.Value = Str(r) & "," & Str(c) MRComObject(xlRange) Next Next
'データを取得したい範囲を設定 xlRange = xlSheet.Range("B3:D10") 'クリップボードにコピーする場合 xlRange.Copy() 'Count プロパティでセルの個数を取得 Dim xlCells As Excel.Range xlCells = xlRange.Cells Dim n As Integer = xlCells.Count MRComObject(xlCells)
Dim dat(n - 1) As String Dim no As Integer = -1 Dim xlElement As Excel.Range = Nothing For Each xlElement In xlRange no += 1 '指定範囲内のセルの値を1次元配列に確保 dat(no) = xlElement.Value.ToString() MRComObject(xlElement) Next MRComObject(xlRange)
'取得したデータを表示 'VB のリストボックスに表示する場合 ListBox1.Items.AddRange(dat)
'Debug.Print で表示 For i As Integer = 0 To n - 1 Debug.Print(dat(i)) Next
'VB のテキストボックスに表示 Dim iData As IDataObject = Clipboard.GetDataObject() 'クリップボードにテキストデータがあれば If iData.GetDataPresent(DataFormats.Text) Then TextBox1.Text = DirectCast(iData.GetData(DataFormats.UnicodeText), String) End If '確認のために、2秒間表示しておく System.Threading.Thread.Sleep(2000)
'============================================================================= 'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行 Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了 'Excel.EXE がタスクマネージャに残っていないか調査(実使用時は必要なし) Call ProcessCheck() End Sub
|
VB2010 から Excel の既存のファイルを印刷(VB.NET) (No.27の個別表示) [スレッド一覧へ] |
- 日時: 2012/05/29 13:58
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:Excel VBA,Excel2010,印刷,用紙サイズ,印刷の向き,余白を設定,部数 * *********************************************************************************** '=================================================================================================== '投 稿 日:2012.05.06 '投 稿 者:VBレスキュー(花ちゃん) 'タイトル:VB2010 から Excel の既存のファイルを印刷 '========1=========2=========3=========4=========5=========6=========7=========8=========9=========0
Private Sub Button25_Click(sender As System.Object, e As System.EventArgs) Handles Button25.Click 'テスト用の適当なファイルを用意しておいて下さい。 '既存のファイルをオープンして、Excel を起動 Call ExcelOpen(System.IO.Path.GetFullPath("..\..\..\data\DBTest.xls"), "Sheet1") '========================== 既存のファイルを印刷 =============================
'[ページ設定]ダイアログボックスを表示(参考) 'xlApp.Dialogs(Excel.XlBuiltInDialog.xlDialogPageSetup).Show()
'印刷プレビューを表示(参考までに) 'System.Threading.Thread.Sleep(3000)
'シートの印刷設定 Dim xlPageSetup As Excel.PageSetup xlPageSetup = xlSheet.PageSetup With xlPageSetup .PaperSize = Excel.XlPaperSize.xlPaperA4 '用紙サイズをA4 '印刷の向き 横=xlLandscape 縦 = xlPortrait .Orientation = Excel.XlPageOrientation.xlPortrait '各余白をセンチ(Cm)単位で設 ' ↓Application でも参照できるが解放されない .LeftMargin = xlApp.CentimetersToPoints(2) '左余白を 20 mm に設定 .RightMargin = xlApp.CentimetersToPoints(2) '右余白を 20 mm に設定 .TopMargin = xlApp.CentimetersToPoints(2.5) '上余白を 25 mm に設定 .BottomMargin = xlApp.CentimetersToPoints(2.5) '上余白を 25 mm に設定 .HeaderMargin = xlApp.CentimetersToPoints(1) 'ヘッダーの余白を 10 mm に設定 .FooterMargin = xlApp.CentimetersToPoints(1) 'フッターの余白を 10 mm に設定 End With
'シートを印刷 2部印刷 'PrintOut(From, To, Copies, Preview, ActivePrinter, PrintToFile, _ ' Collate, PrToFileName, IgnorePrintAreas) 'PrintOut と同様 Excel 2007 の VBA のヘルプでは見当たらないので、MSDN で調べて下さい。 xlSheet.PrintOutEx(, , 2) MRComObject(xlPageSetup)
'============================================================================= 'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行 Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了 'Excel.EXE がタスクマネージャに残っていないか調査(実使用時は必要なし) Call ProcessCheck() End Sub
|
VB2010 から Excel のシートの指定範囲を印刷する(VB.NET) (No.28の個別表示) [スレッド一覧へ] |
- 日時: 2012/06/06 19:25
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:Excel VBA,Excel2010,印刷,印刷する範囲を指定 * *********************************************************************************** '=================================================================================================== '投 稿 日:2012.05.06 '投 稿 者:VBレスキュー(花ちゃん) 'タイトル:VB2010 から Excel のシートの指定範囲を印刷する '========1=========2=========3=========4=========5=========6=========7=========8=========9=========0
Private Sub Button26_Click(sender As System.Object, e As System.EventArgs) Handles Button26.Click Call ExcelOpen("", "") '新規ファイルをオープンして、Excel を起動 '=========================== 指定範囲を印刷する ============================== '-------------------------------------------------------------------------- '仮データの入力 Dim xlRange As Excel.Range = Nothing For r As Integer = 1 To 80 For c As Integer = 1 To 15 xlRange = xlSheet.Range(R1ToA1(r, c), R1ToA1(r, c)) xlRange.Value = Str(r) & "," & Str(c) MRComObject(xlRange) Next Next
'指定範囲を格子で罫線を引く(指定範囲を印刷する事とは関係ありません) ' 罫線を引く場合は、下記を参照して下さい。 ' http://www.hanatyan.sakura.ne.jp/dotnet/Excel06.htm#no3 Call SetLine(1, 1, 40, 8, Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlThin, 0) '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
Dim xlPageSetup As Excel.PageSetup xlPageSetup = xlSheet.PageSetup xlPageSetup.PrintArea = "A1:H40" xlSheet.PrintOutEx() '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000) MRComObject(xlPageSetup)
'============================================================================= 'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行 Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了 'Excel.EXE がタスクマネージャに残っていないか調査(実使用時は必要なし) Call ProcessCheck() End Sub
|
VB2010 から Excel の印刷プレビューの画面を閉じる(VB.NET) (No.29の個別表示) [スレッド一覧へ] |
- 日時: 2012/06/06 19:27
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:Excel VBA,Excel2010,印刷,印刷する範囲を指定 * *********************************************************************************** '=================================================================================================== '投 稿 日:2012.05.06 '投 稿 者:VBレスキュー(花ちゃん) 'タイトル:VB2010 から Excel の印刷プレビューの画面を閉じる '========1=========2=========3=========4=========5=========6=========7=========8=========9=========0
Private Sub Button27_Click(sender As System.Object, e As System.EventArgs) Handles Button27.Click Call ExcelOpen("", "") '新規ファイルをオープンして、Excel を起動 '======================= 印刷プレビューの画面を閉じる ======================== '仮データの入力 Dim xlRange As Excel.Range = Nothing For r As Integer = 1 To 80 For c As Integer = 1 To 15 xlRange = xlSheet.Range(R1ToA1(r, c), R1ToA1(r, c)) xlRange.Value = Str(r) & "," & Str(c) MRComObject(xlRange) Next Next '-------------------------------------------------------------------------- '現在表示している Excel のタイトルを取得する title = xlApp.Caption sleepTime = 3000 '指定ミリ秒後に BackgroundWorker を実行する 'バックグラウンド操作の実行を開始 '指定時間後に別スレッドから印刷プレビューの画面を閉じる Me.BackgroundWorker1.RunWorkerAsync() '印刷プレビューを表示する xlSheet.PrintPreview()
'============================================================================= 'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行 Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了 'Excel.EXE がタスクマネージャに残っていないか調査(実使用時は必要なし) Call ProcessCheck() End Sub
'別途、ツールボックスから BackgroundWorker1 を貼り付けておいて下さい。 Private Sub BackgroundWorker1_DoWork(ByVal sender As Object, ByVal e As _ System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork '指定時間操作の開始を待つ(別スレッド内なので問題ないかと) System.Threading.Thread.Sleep(sleepTime)
Dim hwnd As IntPtr 'タイトル名を指定して Excel のウィンドウハンドルを取得 hwnd = FindWindowEx(IntPtr.Zero, IntPtr.Zero, vbNullString, title) 'AppActivate(title) '前面に表示するでもいいが、後の事も考えて '現在使用している Excel をアクティブにする SetForegroundWindow(hwnd)
'Excel に Excel のショートカットキーを送る '簡便的に SendKeys を使って SendKeys.SendWait("{ESC}")
'できれば、下記の SendInput 関数を使った方法でキーを送信して下さい。 ' http://hanatyan.sakura.ne.jp/patio/read.cgi?no=245
'Dim ki As New SendInput.Helper() 'ki.KyeReSet() 'キー操作の初期化 ''閉じる場合(ESC キーを押す 又は、Ctr + C でも同じ) 'ki.KeyDown(Keys.Escape) 'ESC キーを押す 'ki.KeyUP(Keys.Escape) 'ESC キーを放す 'ki.KeyStroke() '上記一連のキー操作を実行 End Sub
#Region "Win32 API 関数の宣言及び変数の宣言"
''' <summary> ''' 指定のウィンドウをZオーダーのトップ位置に移動しアクティブにする(P99) ''' </summary> ''' <param name="hWnd">フォアグラウンドにするウィンドウのハンドルを指定</param> ''' <returns>正常終了の場合=0 以外 エラーの時= 0</returns> <DllImport("USER32.DLL", CharSet:=CharSet.Auto)> _ Private Shared Function SetForegroundWindow( _ ByVal hWnd As IntPtr) As IntPtr End Function
''' <summary> ''' クラス名又はキャプションタイトルを与えてウインドウのハンドルを取得 ''' </summary> ''' <param name="hWnd1"> ''' 検索する子ウィンドウの親ウィンドウのハンドルを指定、 ''' NULLを指定すると、デスクトップウィンドウが親ウインドウとして使われ ''' デスクトップの子ウィンドウが探されます ''' </param> ''' <param name="hWnd2">子ウィンドウのハンドルを指定</param> ''' <param name="lpsz1">クラス名又は、クラス名を指定するグローバルアトム</param> ''' <param name="lpsz2">ウィンドウのタイトルでNULLを指定するとクラス名のみで検索する</param> ''' <returns>関数が成功すると、指定したクラスとウィンドウ名を持つウィンドウのハンドルが返り ''' 関数が失敗すると、NULL が返ります</returns> <DllImport("user32.dll", CharSet:=CharSet.Auto)> _ Private Shared Function FindWindowEx( _ ByVal hWnd1 As IntPtr, _ ByVal hWnd2 As IntPtr, _ ByVal lpsz1 As String, _ ByVal lpsz2 As String) As IntPtr End Function
Private title As String 'Excel のタイトル名 Private sleepTime As Integer '待ち時間を指定するための変数
#End Region
|
Excel 2010 で印刷中のダイアログを非表示にして印刷(VB.NET) (No.30の個別表示) [スレッド一覧へ] |
- 日時: 2012/05/29 14:06
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:Excel VBA,Excel2010,印刷中のダイアログ,非表示,表示しない * *********************************************************************************** '=================================================================================================== '投 稿 日:2012.05.06 '投 稿 者:VBレスキュー(花ちゃん) 'タイトル:Excel 2010 で印刷中のダイアログを非表示にして印刷 '========1=========2=========3=========4=========5=========6=========7=========8=========9=========0
以前のバージョン等では、下記の方法で印刷中のダイアログを非表示にして印刷できたのですが ForegroundWindow の仕様が変更されてから(未確認)か、ダイアログの枠等が表示されたままに なってしまい、ダイアログを閉じてみたり、色々試したが良い方法が見つかりません。 http://hanatyan.sakura.ne.jp/patio/read.cgi?no=220 色々、思考錯誤した結果下記の方法しか見つかりませんでした。 色んな環境で試したものでもないので場合によっては、非表示ならない等の問題が発生するかも知れません。
テストされましたら、結果等を[雑談用掲示板]の方にでも書いて頂けると幸いかと。
'-------------------------------------------------------------------------------------------------- Private Sub Button28_Click(sender As System.Object, e As System.EventArgs) Handles Button28.Click 'テスト用の適当なファイル(印刷に時間がかかるような)を用意しておいて下さい。 '既存のファイルをオープンして、Excel を起動 Call ExcelOpen(System.IO.Path.GetFullPath("..\..\..\data\DBTest.xls"), "Sheet1") '===================== 印刷中のダイアログを非表示に設定 ====================== '表示状態でも、非表示でも同じです。 xlApp.Visible = False '確認のために、2秒間表示しておく System.Threading.Thread.Sleep(2000)
'バックグラウンドで、印刷中のダイアログが表示されたら閉じる Me.BackgroundWorker2.RunWorkerAsync() '印刷開始 100 部(プリンターの電源を切ってから試すと用紙が無駄になりません。) xlSheet.PrintOutEx(, , 20)
'============================================================================= 'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行 Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了 'Excel.EXE がタスクマネージャに残っていないか調査(実使用時は必要なし) Call ProcessCheck() End Sub
'別途、ツールボックスから BackgroundWorker2 を貼り付けておいて下さい。 Private Sub BackgroundWorker2_DoWork(ByVal sender As Object, ByVal e As _ System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker2.DoWork Dim counter As Integer = 0 Dim wid As Integer = Screen.PrimaryScreen.Bounds.Width \ 2 Dim hei As Integer = Screen.PrimaryScreen.Bounds.Height \ 2 Do While counter < 50 '指定の回数繰り返したら終了 '画面の中心(ダイアログが表示される位置)にカーソルを移動する。 '(ダイアログがカーソルの裏になって再描画されなくなる) Cursor.Position = New Point(wid, hei)
'印刷中のダイアログのハンドルを取得 Dim hwnd As IntPtr = FindWindowEx(IntPtr.Zero, IntPtr.Zero, vbNullString, "印刷中") If hwnd <> IntPtr.Zero Then MoveWindow(hwnd, 0, 0, 0, 0, False) Exit Do End If System.Threading.Thread.Sleep(1) counter += 1 Loop End Sub
'#Region "Win32 API 関数の宣言及び変数の宣言" のところへ下記 API を追加願います。
<DllImport("user32.dll", CharSet:=CharSet.Auto)> _ Private Shared Function MoveWindow( _ ByVal hwnd As IntPtr, _ ByVal x As Integer, _ ByVal y As Integer, _ ByVal nWidth As Integer, _ ByVal nHeight As Integer, _ ByVal bRepaint As Boolean) As Integer End Function
|
Excel 2010 で行列を入れ替え及び型式を指定して保存(VB.NET) (No.31の個別表示) [スレッド一覧へ] |
- 日時: 2012/06/01 22:06
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:Excel VBA,Excel2010,行列入替,行と列,入れ替え,保存形式,CSV形式で保存 * *********************************************************************************** '=================================================================================================== '投 稿 日:2012.05.07 '投 稿 者:VBレスキュー(花ちゃん) 'タイトル:Excel 2010 で行列を入れ替え及び型式を指定して保存 '========1=========2=========3=========4=========5=========6=========7=========8=========9=========0
Private Sub Button29_Click(sender As System.Object, e As System.EventArgs) Handles Button29.Click '既存のファイルをオープンして、Excel を起動 Call ExcelOpen(System.IO.Path.GetFullPath("..\..\..\data\dbtest.xls"), "Sheet1") '================== 行列を入れ替え及び型式を指定して保存 =====================
Dim xlRange As Excel.Range Dim xlSheet2 As Excel.Worksheet = DirectCast(xlSheets.Item(2), Excel.Worksheet) xlRange = xlSheet.Range("A1") xlRange.Activate() Dim xlCurrentRegion As Excel.Range xlCurrentRegion = xlRange.CurrentRegion 'セル A1 を含むデータ入力範囲をコピー xlCurrentRegion.Copy() MRComObject(xlCurrentRegion) '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
'コピーしたデータを Sheet2 のセル A1 に行列を入れ替えて貼り付け xlSheet2.Select() Dim xlRange2 As Excel.Range xlRange2 = xlSheet2.Range("A1") xlRange2.Select() 'Range(データ) をクリップボードから指定範囲に貼り付けます。 xlRange2.PasteSpecial(Paste:=Excel.XlPasteType.xlPasteAll, _ Operation:=Excel.XlPasteSpecialOperation.xlPasteSpecialOperationNone, _ SkipBlanks:=False, Transpose:=True)
xlApp.DisplayAlerts = False '保存時の問合せのダイアログを非表示に設定
' xls 形式で名前をつけて保存(Excel 97〜2003 ブック形式) xlBook.SaveAs(Filename:=IO.Path.GetFullPath(".\Test.xls"), _ FileFormat:=Excel.XlFileFormat.xlExcel8) ' xlsx 形式で名前をつけて保存(Excel 2007〜ブック形式) xlBook.SaveAs(Filename:=IO.Path.GetFullPath(".\Test.xlsx"), _ FileFormat:=Excel.XlFileFormat.xlOpenXMLWorkbook) ' xlsm 形式で名前をつけて保存(Excel 2007〜マクロ有効ブック形式) xlBook.SaveAs(Filename:=IO.Path.GetFullPath(".\Test.xlsm"), _ FileFormat:=Excel.XlFileFormat.xlOpenXMLWorkbookMacroEnabled) ' csv 形式で名前をつけて保存(CSV (カンマ区切り) 形式) xlBook.SaveAs(Filename:=IO.Path.GetFullPath(".\Test.csv"), _ FileFormat:=Excel.XlFileFormat.xlCSV) MRComObject(xlRange) MRComObject(xlRange2) MRComObject(xlSheet2) '確認のために、2秒間表示しておく System.Threading.Thread.Sleep(2000)
'============================================================================= 'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行 Call ExcelClose(IO.Path.GetFullPath(".\Test.xls"), False) 'False の場合保存しないで終了 'Excel.EXE がタスクマネージャに残っていないか調査(実使用時は必要なし) Call ProcessCheck() End Sub
|
VB2010 から Excel のセルに関する操作、1行 Tips 集その1(VB.NET) (No.32の個別表示) [スレッド一覧へ] |
- 日時: 2012/06/06 19:29
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:Excel VBA,Excel2010,セルに関する操作,行と列,セル参照,セル操作,範囲 * *********************************************************************************** '=================================================================================================== '投 稿 日:2012.05.11 '投 稿 者:VBレスキュー(花ちゃん) 'タイトル:VB2010 から Excel のセルに関する操作、1行 Tips 集その1(VB.NET) '========1=========2=========3=========4=========5=========6=========7=========8=========9=========0 本来なら最初の方に書くべき事ですが、前後の処理を省略して書くと、誤解されプロセスが 解放されない等のトラブルが発生し兼ねないので、ここに書く事にしました。 ここでは、単純な使用方法で紹介しておりますので、詳しい(目的に合った)使い方等は ご自分で調べるなり、試すなりして下さい。 尚、この Tips を使用される場合は、Excel の Com オブジェクトの解放に関する処理を理解 されてから使用するようにして下さい。
Private Sub Button30_Click(sender As System.Object, e As System.EventArgs) Handles Button30.Click Call ExcelOpen("", "") '新規ファイルをオープンして、Excel を起動 '====================== セルに関する操作1行Tips集その1 =====================
'1.単一セルを参照する場合 'Worksheets("Sheet1").Range("A1").Value = 3.14159 'VBA の表記 'xlSheet.Range("A1").Value = 3.14159 'VB6.0 用の表記(.NET 系では、使用しない事)
'上記のコードだけなら.NET系でも解放はされますが、色々参照している内に '解放されない等トラブルを防ぐ意味でも下記のように一度、変数に受けて下さい。
Dim xlRange As Excel.Range = xlSheet.Range("A1") '.NET 系の表記 xlRange.Value2 = 3.14159 MRComObject(xlRange) '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
'2.離れた単一セルを参照する場合 xlRange = xlSheet.Range("A3,D1,C2") xlRange.Value = 12345 MRComObject(xlRange) '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
'3.セル範囲を参照する場合その1 xlRange = xlSheet.Range("A1:C3") xlRange.Select() MRComObject(xlRange) '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
'下記でも同じ事です。 xlRange = xlSheet.Range("A1", "D4") xlRange.Select() MRComObject(xlRange) '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
'4.離れたセル範囲を参照する場合その2 xlRange = xlSheet.Range("A1:C3,A6:C9,E1:H4") xlRange.Select() MRComObject(xlRange) '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
'5.1列全体を参照する場合 xlRange = xlSheet.Range("C:C") xlRange.Select() MRComObject(xlRange) '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
'6.複数列全体を参照する場合 xlRange = xlSheet.Range("C:D, F:F, H:H") xlRange.Select() MRComObject(xlRange) '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
'7.1行全体を参照する場合 xlRange = xlSheet.Range("2:2") xlRange.Select() MRComObject(xlRange) '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
'8.複数行全体を参照する場合 xlRange = xlSheet.Range("4:6, 9:10, 12:12") xlRange.Select() MRComObject(xlRange) '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
'9.Worksheet.Cells プロパティを使って全セルを参照する Dim xlCells As Excel.Range = xlSheet.Cells() xlCells.Select() MRComObject(xlCells)
'10.Range.Cells プロパティを使ってセルを参照する 'Cells プロパティは、セルの指定方法が、Cells(行番号,列番号)のようになり、C5 等の通常の '指定方法と行と列の順序が逆になりますので注意して下さい。
'シート 1 のセル範囲 A1:C5 のフォント スタイルを斜体に設定する VBA の使用例 'Worksheets("Sheet1").Activate() 'Range(Cells(1, 1), Cells(5, 3)).Font.Italic = True '------------------------------------------------------------------------------- '上記操作をVB2010用に書き換えると '上記は、下記のようにした方が無難です。 Dim xlRange1 As Excel.Range = xlSheet.Range(R1ToA1(1, 1) & ":" & R1ToA1(5, 3)) 'のようにして、Cellsプロパティを使わないようにして見て下さい。 'xlRange1.Font.Italic = True のような使い方は、しない事 Dim xlFont As Excel.Font = xlRange1.Font xlFont.Italic = True MRComObject(xlFont) MRComObject(xlRange1) '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
'11.セルに値を設定する 'Value プロパティとValue2 プロパティの違いは、通貨型及び日付型のデータを使用しない事です xlRange = xlSheet.Range("A1") xlRange.Value = System.DateTime.Now Dim xlOffsetRange As Excel.Range xlOffsetRange = xlRange.Offset(1) xlOffsetRange.Value2 = System.DateTime.Now MRComObject(xlOffsetRange) MRComObject(xlRange) '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
'12.セルの値を取得する xlRange = xlSheet.Range("A1") Debug.Print(xlRange.Value.ToString) '2012/05/11 11:50:07 xlOffsetRange = xlRange.Offset(1) xlOffsetRange.NumberFormatLocal = "yyyy/mm/dd hh:MM:ss" Debug.Print(xlOffsetRange.Value2.ToString) '41040.4931328588 Debug.Print(xlOffsetRange.Value.ToString) '2012/05/11 11:50:06 '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000) MRComObject(xlOffsetRange) MRComObject(xlRange)
'13.セルに数式を設定する 'Range.Formula プロパティは、数式を、A1 参照形式で、取得、又は設定します。 xlRange = xlSheet.Range("C1") xlRange.Value = 123 xlOffsetRange = xlRange.Offset(ColumnOffset:=1) xlOffsetRange.Value = 321 MRComObject(xlRange) 'ここも一旦デクリメントしておく事 xlRange = xlSheet.Range("E1") xlRange.Formula = "=C1+D1" MRComObject(xlOffsetRange) MRComObject(xlRange) '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
'14.セルの数式を取得する xlRange = xlSheet.Range("E1") Debug.Print(xlRange.Value.ToString) '444 Debug.Print(xlRange.Formula.ToString) '=C1+D1 MRComObject(xlRange) '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
'15.AutoFill メソッドを使ってセルに連続してデータを入力する 'AutoFill メソッド : 指定された対象セル範囲内のセルに対してオートフィルを実行します。 xlRange = xlSheet.Range("A1") xlRange.Value = "1月" xlRange1 = xlSheet.Range("A1:L1") 'セル A1 〜 L1 まで、1月 〜 12月 と入力します。 '下記のように直接範囲(xlSheet.Range("A1:L1"))を指定しない事 'xlRange.AutoFill(Destination:=xlSheet.Range("A1:L1"), Type:=Excel.XlAutoFill ...) xlRange.AutoFill(Destination:=xlRange1, Type:=Excel.XlAutoFillType.xlFillMonths) MRComObject(xlRange1) MRComObject(xlRange) '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
'============================================================================= 'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行 Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了 'Excel.EXE がタスクマネージャに残っていないか調査(実使用時は必要なし) Call ProcessCheck() End Sub
|
Excelのセルに関する操作(Addressプロパティの使用例)(VB.NET) (No.33の個別表示) [スレッド一覧へ] |
- 日時: 2012/06/10 10:14
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:Excel VBA,Excel2010,セルに関する操作,行と列,セル参照,セル操作,範囲 * *********************************************************************************** '=================================================================================================== '投 稿 日:2012.05.11 '投 稿 者:VBレスキュー(花ちゃん) 'タイトル:VB2010 から Excel のセルに関する操作(Address プロパティの使用例)(VB.NET) '========1=========2=========3=========4=========5=========6=========7=========8=========9=========0 まずは、>>32 VB2010 から Excel のセルに関する操作、1行 Tips 集その1 をご覧になってから こちらをご覧下さい。 尚、この Tips を使用される場合は、Excel の Com オブジェクトの解放に関する処理を理解 されてから使用するようにして下さい。 '-------------------------------------------------------------------------------
Private Sub Button35_Click(sender As System.Object, e As System.EventArgs) Handles Button35.Click Call ExcelOpen("", "") '新規ファイルをオープンして、Excel を起動 '========================= Address プロパティの使用例 ======================== '------------------------------------------------------------------------------- '1.セル(範囲)のアドレスを取得する ' ここにきて、Address プロパティ を多用していて、Excel.exe が解放されなくなったので ' Tips 集を見直すにあたり、調べて解った事を書いておきます。 ' Range.Address(プロパティ) をVBA のヘルプで見ると以下のようになっております。 ' コード記述時の言語で参照範囲を表す文字列型 (String) の値を返します。 ' 式.Address(RowAbsolute, ColumnAbsolute, ReferenceStyle, External, RelativeTo) ' 式 Range オブジェクトを表す変数です。
' 使用例() 'mc = Worksheets("Sheet1").Cells(1, 1) 'MsgBox(mc.Address()) ' $A$1 'MsgBox(mc.Address(RowAbsolute:=False)) ' $A1 'MsgBox(mc.Address(ReferenceStyle:=xlR1C1)) ' R1C1 'MsgBox(mc.Address(ReferenceStyle:=xlR1C1, RowAbsolute:=False, _ ' ColumnAbsolute:=False, RelativeTo:=Worksheets(1).Cells(3, 3))) ' R[-2]C[-2]
'となっており、VB2010 用に書きかえるのもそう難しいことでもないかと思います。
'通常は、下記のように書きかえて使用すれば問題はないのですが...。 Dim xlRange As Excel.Range = Nothing xlRange = xlSheet.Range("A1:D5") Dim adrs1, adrs2, adrs3, adrs4 As String adrs1 = xlRange.Address ' $A$1:$D$5 adrs2 = xlRange.Address(RowAbsolute:=False, ColumnAbsolute:=False) ' A1:D5 adrs3 = xlRange.Address(RowAbsolute:=False, ColumnAbsolute:=False, _ ReferenceStyle:=Excel.XlReferenceStyle.xlA1) ' A1:D5
adrs4 = xlRange.Address(RowAbsolute:=False, ColumnAbsolute:=False, _ ReferenceStyle:=Excel.XlReferenceStyle.xlR1C1) ' RC:R[4]C[3] MRComObject(xlRange) MessageBox.Show(Me, String.Format( _ "adrs1={0:} adrs2={1:} adrs3={2:} adrs4={3:}", adrs1, adrs2, adrs3, adrs4))
'個々で使用する場合は、問題無いのですが、以下で紹介するコードと同じプロシージャ内で使用すると 'Excel.exe が解放されず、プログラムを終了するまで、タスクマネージャに残ったままになったり 'する場合があります。 '-------------------------------------------------------------------------------
'プロセスが解放され易くしたコード(逐次デクリメントを実施) xlRange = xlSheet.Range("B3:F7") adrs1 = xlRange.Address ' $B$3:$F$7 MRComObject(xlRange)
xlRange = xlSheet.Range("B3:F7") adrs2 = xlRange.Address(RowAbsolute:=False, ColumnAbsolute:=False) ' B3:F7 MRComObject(xlRange)
xlRange = xlSheet.Range("B3:F7") adrs3 = xlRange.Address(RowAbsolute:=False, ColumnAbsolute:=False, _ ReferenceStyle:=Excel.XlReferenceStyle.xlA1) ' B3*F7 MRComObject(xlRange)
xlRange = xlSheet.Range("B3:F7") adrs4 = xlRange.Address(RowAbsolute:=False, ColumnAbsolute:=False, _ ReferenceStyle:=Excel.XlReferenceStyle.xlR1C1) ' R[2]C[1]:R[6]C[5] MRComObject(xlRange)
MessageBox.Show(Me, String.Format( _ "adrs1={0:} adrs2={1:} adrs3={2:} adrs4={3:}", adrs1, adrs2, adrs3, adrs4))
'============================================================================= 'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行 Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了 'Excel.EXE がタスクマネージャに残っていないか調査(実使用時は必要なし) Call ProcessCheck() End Sub
|
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
|
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
|
VB2010 から Excel のセルにコメントを挿入及びコメント操作色々(VB.NET) (No.36の個別表示) [スレッド一覧へ] |
- 日時: 2012/06/10 14:16
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:Excel VBA,Excel2010,コメント操作,挿入,削除,変更,コメントを表示 * *********************************************************************************** '=================================================================================================== '投 稿 日:2012.06.10 '投 稿 者: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 オブジェクトの解放に関する処理を理解 されてから使用するようにして下さい。 '-------------------------------------------------------------------------------
'Button32 が重複しておりますので、Sub とか適当な場所に記入して下さい。
Private Sub Button32_Click(sender As System.Object, e As System.EventArgs) Handles Button32.Click Call ExcelOpen("", "") '新規ファイルをオープンして、Excel を起動 '============================================================================= '------------------------------------------------------------------------------- 下記のVB6.0用のコードを移植したものです。
コメント表示・変更・削除方法色々 http://www.hanatyan.sakura.ne.jp/vbhlp/excel09.htm#xl_2 '-------------------------------------------------------------------------------
'セル A3 にコメントを新規作成(追加)します。 Dim xlRange As Excel.Range = Nothing Dim xlComment As Excel.Comment xlRange = xlSheet.Range("A3") xlComment = xlRange.AddComment("セル A1 と A2 の合計です") MRComObject(xlComment) MRComObject(xlRange)
xlRange = xlSheet.Range("C8") xlComment = xlRange.AddComment("ついでにもう1個作成しました。") MRComObject(xlComment) MRComObject(xlRange) '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
'---------------------------------------------- 'セル E3 にコメントを記入又は変更します。 xlRange = xlSheet.Range("E3") xlRange.NoteText("変更予定") MRComObject(xlRange) '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
'---------------------------------------------- '最初のコメントを表示します。 Dim xlComments As Excel.Comments xlComments = xlSheet.Comments xlComment = xlComments.Item(1) xlComment.Visible = True MRComObject(xlComment) MRComObject(xlComments) '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
'---------------------------------------------- 'すべてのコメントを表示します。 xlComments = xlSheet.Comments For Each xlComment In xlComments xlComment.Visible = True MRComObject(xlComment) Next MRComObject(xlComments) '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
'---------------------------------------------- 'セル範囲を指定してコメントを削除 xlRange = xlSheet.Range("A1:A7") xlRange.ClearComments() MRComObject(xlRange) '確認のために、1秒間表示しておく System.Threading.Thread.Sleep(1000)
'---------------------------------------------- '記入しているコメントを全て削除 xlComments = xlSheet.Comments For Each xlComment In xlComments xlComment.Delete() MRComObject(xlComment) Next MRComObject(xlComments)
'============================================================================= System.Threading.Thread.Sleep(1000) Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) Call ProcessCheck() End Sub
|
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
|
VB2010から Excel のマクロを作成し実行する(VB.NET) (No.38の個別表示) [スレッド一覧へ] |
- 日時: 2012/07/13 16:07
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[エクセル][][] * * キーワード:Excel VBA,Excel2010,マクロ,マクロの記入,マクロの削除,マクロの実行 * *********************************************************************************** '=================================================================================================== '投 稿 日:2012.07.13 '投 稿 者: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 Button34_Click(sender As System.Object, e As System.EventArgs) Handles Button34.Click Call ExcelOpen("", "") '新規ファイルをオープンして、Excel を起動 '==================== VB2010からマクロを作成し実行する ======================= 'Imports Microsoft.Vbe.Interop 'を記入の事
'ファイル→オプション→セキュリティセンター→セキュリティセンターの設定→マクロの設定→ 'VBA プロジェクト オブジェクト モデルへのアクセスを信頼する にチェックを入れておく事。
Dim xlVBE As Microsoft.Vbe.Interop.VBE Dim xlProject As Microsoft.Vbe.Interop.VBProject Dim xlComponents As Microsoft.Vbe.Interop.VBComponents = Nothing Dim xlComponent As Microsoft.Vbe.Interop.VBComponent = Nothing Dim xlCodeModule As Microsoft.Vbe.Interop.CodeModule
xlVBE = xlApp.VBE xlProject = CType(xlBook.VBProject, Microsoft.Vbe.Interop.VBProject) xlComponents = xlProject.VBComponents xlComponent = xlComponents.Add(Microsoft.Vbe.Interop.vbext_ComponentType.vbext_ct_StdModule) xlCodeModule = xlComponent.CodeModule
'標準モジュールに記入するマクロのコード Dim MacroCord As String = "" 'CVErr 関数は、VB2010 には無く、VB2010 からは、使用できないようなので、マクロで実行 MacroCord = _ "Public Sub MacroTest()" & vbCrLf & _ " Dim myArray As Variant, i As Long" & vbCrLf & _ " myArray = Array(xlErrDiv0, xlErrNA, xlErrName, xlErrNull, xlErrNum, _" & vbCrLf & _ " xlErrRef, xlErrValue)" & vbCrLf & _ " For i = 1 To 7" & vbCrLf & _ " Worksheets(""Sheet1"").Cells(i, 1).Value = CVErr(myArray(i - 1))" & vbCrLf & _ " Next i" & vbCrLf & _ "End Sub" 'マクロのコードを標準モジュールに書き込み '変数の宣言を強制するにチェックが入っているとエラーとなるのでコメントに 'oCode.InsertLines(1, "Option Explicit") xlCodeModule.InsertLines(2, MacroCord)
'作成したマクロを実行する xlApp.Run("MacroTest") MessageBox.Show(Me, "VB2010 から MacroTest マクロを作成し、実行しました。")
'記入したマクロを削除する xlComponents.Remove(xlComponent) MessageBox.Show(Me, "VB2010 から作成した MacroTest マクロを削除しました。")
MRComObject(xlCodeModule) MRComObject(xlComponent) MRComObject(xlComponents) MRComObject(xlProject) MRComObject(xlVBE)
'============================================================================= 'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行 Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了 'Excel.EXE がタスクマネージャに残っていないか調査(実使用時は必要なし) Call ProcessCheck() End Sub
|
|