忍者ブログ
  • 2025.05《
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 》 2025.07
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

2025/06/20 02:11 |
Sheet
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
2015/04/14 21:36 | Excelマクロ(VBA) | コメント(0)
<<Shapes | ホーム | Timer>>
コメント
コメントの投稿















前ページ | ホーム | 次ページ