× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 |
![]() |
Excelマクロのモジュールをそのまま貼り付け。
(会社とか家とか出先とかで見るため) 「Option Compare Binary」以下を標準モジュールに貼り付ければ、Myマクロ辞典に! 貼り付け後、「■Sub 」を「Sub 」に置き換えよう! ※公開している以上、利用は自由ですが、自己責任で。 Option Compare Binary Option Explicit 'シート関連マクロ ■Sub シートの作成() 'ワークシートSheet2の後ろにシートを作成 ActiveWorkbook.Worksheets.Add After:=Worksheets("Sheet2") '一番前に作成 Worksheets.Add Before:=Worksheets(1) '一番後ろに作成 Worksheets.Add After:=Worksheets(Worksheets.Count) 'ブック名を指定してシートを作成する Workbooks("Book1.xls").Worksheets.Add 'シートを挿入し、名前を変更する With Worksheets.Add() .Name = "合計" End With End Sub ■Sub シート名を取得() Dim d As String d = ActiveSheet.Name Debug.Print d End Sub ■Sub シート名の変更() '現在アクティブなシートのシート名変更 ActiveSheet.Name = "チェック用" 'シート名を指定して変更 Worksheets("form_sheet").Name = Format(d, "YYYYMMDD") End Sub ■Sub シートを選択() 'シート名を指定 Worksheets("Sheet1").Activate 'インデックス番号(シート番号)を指定 Worksheets(1).Activate 'アクティブシートの1つ左のシートを選択 ActiveSheet.Previous.Select 'アクティブシートの1つ右のシートを選択 ActiveSheet.Next.Select '最後のシートを選択 Worksheets(Worksheets.Count).Activate End Sub ■Sub かんたんなシート選択() '■「シート選択」の考え方 '「シート選択ダイアログ」は、戻り値(選択したシート、キャンセルなど)がない。 'シートが選択された場合はよいが、「キャンセル」押下は判断できない。 'ので、「キャンセル」押下時は、現在のシートがアクティブになることと、 'そもそも現在のシートが表示したいなら選択ダイアログは不要だろうという前提で、 'ダイアログが閉じたときに現在のシートがアクティブなら「キャンセル」が押下られたと判断するというもの。 Dim mySH As Worksheet '現在アクティブなシート Dim slSH As Worksheet 'シート選択ダイアログで選択したシート Application.ScreenUpdating = False '画面リフレッシュOFF Set mySH = ActiveSheet 'アクティブシートを取得 'シート選択ダイアログを表示(画面は動かないけど、選択したシートが ActiveSheet になる) With CommandBars.Add(Temporary:=True) .Controls.Add(ID:=957).Execute .Delete End With Application.ScreenUpdating = True '画面リフレッシュON 'ActiveSheet(選択したシート)が元のシートと異なる:slSH に ActiveSheet をセット 'ActiveSheet(選択したシート)が元のシートと同じ Or キャンセル押下:「キャンセルされました」 '(キャンセル押下時は、ActiveSheet = mySH なので、slSH はセットされない=Nothing) '(シートの切換前提なので、元のシートを選択することはないという判断) If Not ActiveSheet Is mySH Then 'If ActiveSheet <> mySH ~ だと× Set slSH = ActiveSheet slSH.Select MsgBox "完了(・∀・) ", vbInformation Else mySH.Select MsgBox "キャンセルされました(・ε・) ", vbExclamation End If Set mySH = Nothing Set slSH = Nothing End Sub ■Sub かんたんじゃないシート選択() '「Public Function ShowSelectSheetDialog() As Worksheet」とセットです。 Dim Sh As Worksheet Set Sh = ShowSelectSheetDialog() 'Public Function ShowSelectSheetDialog() As Worksheet を実行 If Not Sh Is Nothing Then MsgBox Sh.Name & "が選択されました。 " & vbNewLine & "アクティブにします(・∀・) ", _ vbInformation Sh.Activate Else MsgBox "キャンセルされましたよ(・ε・) ", vbExclamation End If Set Sh = Nothing End Sub Public Function ShowSelectSheetDialog() As Worksheet '↑「かんたんじゃないシート選択」とセットです。 ' // シート選択ダイアログを表示 ' // 戻り値: 選択されたシート。元のシートと同じ、またはキャンセル時:Nothing Dim ShBackup As Worksheet Application.ScreenUpdating = False Set ShBackup = ActiveSheet 'アクティブシートを取得 With CommandBars.Add(Temporary:=True) 'シート選択ダイアログ .Controls.Add(ID:=957).Execute .Delete End With ' Return If Not ActiveSheet Is ShBackup Then Set ShowSelectSheetDialog = ActiveSheet '選択したシートが元のシートと異なる場合はセット※ End If ShBackup.Select Application.ScreenUpdating = True '※キャンセルが押下された場合は、アクティブシート '「かんたんなシート選択」参照 End Function ■Sub シートのコピー() '現在アクティブなシートを"Sheet2"の前にコピーする ActiveSheet.Copy Before:=Worksheets("Sheet2") 'ワークシートSheet1をコピーしSheet3の後ろに挿入する Worksheets("Sheet1").Copy After:=Worksheets("Sheet3") 'ブック間のワークシートコピー Workbooks("99.xls").Worksheets("Sheet1").Copy After:=Workbooks("Book4.xls").Worksheets("Sheet2") 'CSVシートをBook1.xlsxのいちばん後ろにコピーする Sheets("CSV").Copy After:=Workbooks("Book1.xlsx").Sheets(Workbooks("Book3.xlsx").Sheets.Count) 'ワークシートを新しいブックにコピーする(Copyメソッドの引数を省略した場合は新規ブックが自動的に開いてシートがコピーされる) Worksheets("Sheet1").Copy 'ワークシートの最後尾に新しいワークシートを挿入する Worksheets.Add After:=Worksheets(Worksheets.Count) Sheets.Add After:=Sheets(Sheets.Count) '複数のシートコピーする Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select '? Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Copy End Sub ■Sub シートの移動() '現在アクティブなシートを"Sheet2"の前に移動する ActiveSheet.Move Before:=Worksheets("Sheet2") 'ワークシートSheet1をいちばん後ろ(右)に移動する Sheets("Sheet1").Move After:=Worksheets(Worksheets.Count) 'ブック間移動:Sheet1をBook3というワークブック内のSheet2の左側(前)へ移動 Sheets("Sheet1").Move Before:=Workbooks("Book3.xls").Sheets("Sheet2") Workbooks("Book1.xls").Sheets("Sheet1").Move Before:=Workbooks("Book3.xls").Sheets("Sheet2") '※移動元または移動先のブックを保存していない場合は、ブック名に".xls"がついていないので注意 '新規ブックに移動(Moveメソッドの引数"Before:~"を省略した場合は新規ブックが自動的に開いてシートが移動される) Worksheets("Sheet1").Move End Sub ■Sub シートの削除() '確認のダイアログが表示されるのを制御する。 Application.DisplayAlerts = False '非表示 ActiveSheet.Delete Application.DisplayAlerts = True '表示 End Sub ■Sub シートの保護() Worksheets(1).Protect Password:="pass" Worksheets(1).Unprotect Password:="pass" '保護解除 End Sub ■Sub シート数を数える() MsgBox "ワークシート数:" & Worksheets.Count MsgBox "グラフシート数:" & Charts.Count MsgBox "シート数:" & Sheets.Count 'Sheetsだと、グラフシートも含まれます。 a = Worksheets.Count End Sub ■Sub シートを探す() 'すべてのワークシートを表す Worksheets コレクションからひとつずつ Worksheet を取り出して名前を調べる Dim ws As Worksheet, flag As Boolean 'Boolean=TrueかFalse For Each ws In Worksheets If ws.Name = "探したシート名" Then flag = True Next ws If flag = True Then MsgBox "[探したシート名]シートがあります", vbInformation Else MsgBox "[探したシート名]シートはありません", vbInformation End If '※ブックの場合は、Worksheet→Workbook、Worksheets→Workbooks If ActiveSheet.Next Is Nothing Then MsgBox "右端です。" Else MsgBox "右端ではありません。" End If End Sub ■Sub シートをアクティブにする() Worksheets("貼り付けシート").Activate If Worksheets("日付エラー").Range("A1") <> "" Then MsgBox "日付エラーがあります。 ", vbExclamation Worksheets("日付エラー").Activate Else MsgBox " ", vbExclamation End If End Sub ■Sub 隣りのシートを指定() ActiveSheet.Previous.Activate '左隣のシート ActiveSheet.Next.Activate '右隣のシート '※アクティブシートが一番右端のシートだったとき、ActiveSheet.NextはNothingを返す。 If ActiveSheet.Next Is Nothing Then MsgBox "右端で。" Else MsgBox "右端ではありません。" End If End Sub ■Sub 遠くのシートを指定() Worksheets(ActiveSheet.Index + 2).Activate '※アクティブシートが一番右端のシートだったとき If ActiveSheet.Index = Worksheets.Count Then MsgBox "右端です。" Else MsgBox "右端ではありません。" End If End Sub ■Sub シート名を変数に格納() 'シート名やセル番地などを変数に格納する方法(Set xx As [Application,Workbook,Worksheet,Range,Shape(画像),Window・・・]) Dim buf As Object 'オブジェクト型変数を宣言する "~As Worksheet"でもよい Set buf = Worksheets("Sheet1") '変数「buf」にSheet1(Worksheetオブジェクト)を入れる MsgBox buf.Name buf.Tab.ColorIndex = 3 'Sheet1のシート見出し色を赤にする Set buf = Nothing '※オブジェクト変数-応用 Dim buf As Object 'オブジェクト型変数を宣言する "~As Range"でもよい Set buf = Range("A1") '変数「buf」にセルA1(Rangeオブジェクト)を入れる MsgBox buf.Width 'セルA1の横幅(Widthプロパティ)を調べる Set buf = Nothing 'Nothingを代入することで、変数と特定のオブジェクトとの関係を無効にして、使われていたシステムリソースおよびメモリリソースを解放する。 End Sub ■Sub シート名とブック名を変数に格納() Dim bk As Workbook Dim Sh As Worksheet Set bk = Workbooks("連絡書サンプル130607.xls") bk.Activate Set Sh = Worksheets("マスタ") Sh.Activate Range("C5").Activate Set Sh = Nothing Set bk = Nothing End Sub ■Sub シートの見出しの色を変更() Worksheets("Sheet1").Tab.ColorIndex = 3 '赤にする Worksheets("Sheet1").Tab.ColorIndex = xlNone '色を消す End Sub ■Sub シートの下端と右端、最下行を調べて範囲選択する() 'Cell の 最終行と最終列を検出 を参照 End Sub PR |
![]() |
![]() |
|
![]() |