Sub Macro1()
Sheets.Add
Sheets("Sheet4").Select
Sheets("Sheet4").Name = "名前の変更"
End Sub
でした。
.Nameプロパティを使用すれば出来そうですね。
Sub test1()
MsgBox ActiveSheet.Name
End Sub
なんてやると、現在選択されているシートの名前を表示可能です。
Sub test2()
MsgBox ThisWorkbook.Sheets(2).Name
End Sub
だと、左から2番目のシート名が表示されたと思います。
さらにバカっぽくヤルと、
Sub test3()
MsgBox ThisWorkbook.Sheets(2).Name
MsgBox ThisWorkbook.Sheets(3).Name
MsgBox ThisWorkbook.Sheets(4).Name
MsgBox ThisWorkbook.Sheets(5).Name
End Sub
Sub test4()
MsgBox "現在のシート数は、" & ThisWorkbook.Sheets.Count & "です"
End Sub
とやると、シートの個数が表示されると思います。
ループでまわして、
Sub test5()
Dim n As Integer 'カウンター変数
Dim strMSG As String 'メッセージ作成用のワーク
'一番目のシートから個数分処理を行う
For n = 1 To ThisWorkbook.Sheets.Count
strMSG = n & "番目のシート名は" & ThisWorkbook.Sheets(n).Name
MsgBox strMSG
Next n
End Sub
Sub test35()
Dim MyObject As Object 'オブジェクト型にしたけどシート型でも
Dim strMSG As String 'メッセージ作成用のワーク
'一番目のシートから個数分処理を行う
For Each MyObject In ThisWorkbook.Sheets 'ブックからシートを取り出す
strMSG = "今見ているシート名は" & MyObject.Name
MsgBox strMSG
Next
End Sub
となります。
こんな感じで処理すると、カウンターで回しているより、スマートです。
*まぁ、好みもありますが。。。
For Each MyObject In ThisWorkbook.Sheets
など、書式は、書いていくうちになれるので、
複数のオブジェクトをまわす時は、
ぜひ使ってみてください。
少しふっくらがイイのになぁ、、
(まだ言ってるよ、だれかコイツを黙らせて、、、)
オブジェクトのループはFor Each In でループさせる
http://www.ken3.org/backno/backno_vba15.html#73
も、ヒマな時、のぞきに来てね。
Function chkSHEET(strSNAME As String) As Boolean
・
・
End Function
>Function chkSHEET(strSNAME As String) As Boolean
^^^^^^^^^^^^^^^↑関数名です、重複しないわかりやすい名前にしましょう。
>Function chkSHEET(strSNAME As String) As Boolean
^^^^^^^^^^^^^^^^^^
ここでは、変数名strSNAME、変数の型は文字列で受け取ることにします。
最後の、
>Function chkSHEET(strSNAME As String) As Boolean
^^^^^^^^^^^^
As Booleanですが、聞きなれない、見なれない人も居るかもしれませんが、
ブール型 (Boolean)
真 (True) または偽 (False)を格納可能な変数の型です。
なんだか、堅苦しい話だなぁ、もっとサクッといかないかなぁ?
まぁまぁ、数作っているうちにわかるから。
*値の受け取り方や、型、関数の書式などは、
いろいろなプログラムを見てるうちにわかると思います。
シート名を表示するテストはできたから、
今度は、シート名の表示じゃなくって、
受け取ったシート名が存在するかのチェックをif文を使用して行います。
Function chkSHEET(strSNAME As String) As Boolean
Dim MyObject As Object
'ブック内のシート名の比較を行う
For Each MyObject In ThisWorkbook.Sheets
'.Nameプロパティのシート名と受け取ったstrSNAMEを比べる
If MyObject.Name = strSNAME Then
chkSHEET = True '名前が一致したのでTrueをセット
Exit Function 'もうすること無いので関数を抜ける
End If
Next
'一つも一致しなかったので、Falseをセット
chkSHEET = False
End Function
Sub testmain()
Dim strNAME As String 'INPUT BOX 値受け取り用
'InputBoxでシート名を入力する
strNAME = InputBox("シート名を入力してください")
'作ったユーザ関数をテストしよう
If chkSHEET(strNAME) = True Then
MsgBox strNAME & "シートはブック内に存在します"
Else
MsgBox strNAME & "シートはブック内に存在しません"
End If
End Sub
とやってみました。
三流君さぁ、なんか、しっくりこないんだよねぇ
えっ、どこが?テストで動いてるジャン、
'----
01: 'ブック内のシート名の比較を行う
02: For Each MyObject In ThisWorkbook.Sheets
03: '.Nameプロパティのシート名と受け取ったstrSNAMEを比べる
04: If MyObject.Name = strSNAME Then
05: chkSHEET = True '名前が一致したのでTrueをセット
06: Exit Function 'もうすること無いので関数を抜ける
07: End If
08: Next
09:
10: '一つも一致しなかったので、Falseをセット
11: chkSHEET = False
'----
では、言うけど、ここの処理なんだげとさぁ、
05: chkSHEET = True '名前が一致したのでTrueをセット
06: Exit Function 'もうすること無いので関数を抜ける
と
10: '一つも一致しなかったので、Falseをセット
11: chkSHEET = False
で、結果をセットして関数抜けてるんだけど、
もうすること無いのでいきなりExit Functionでその下実行しないで抜けてるけど、
流れがなんかなぁ、、、
流れを少しスッキリさせる
~~~~~~~~~~~~~~~~~~~~~~~~
では、少し頭を使って、、、
Function chkSHEET(strSNAME As String) As Boolean
Dim MyObject As Object
Dim MyRET As Boolean 'リターン値を保存
'ブック内のシート名の比較を行う
For Each MyObject In ThisWorkbook.Sheets
'.Nameプロパティのシート名と受け取ったstrSNAMEを比べる
If MyObject.Name = strSNAME Then
MyRET = True '名前が一致したのでTrueをセット
Exit For 'もう探す必要無いのでループを抜ける
Else
MyRET = False '見つからないのFalseをセット
End If
Next
'リターン値をセットして、関数を抜ける
chkSHEET = MyRET
End Function
これは、どうでしょうか?
Dim MyRET As Boolean
を定義して、下記の判断で戻り値をセット、
If MyObject.Name = strSNAME Then
MyRET = True '名前が一致したのでTrueをセット
Exit For 'もう探す必要無いのでループを抜ける
Else
MyRET = False '見つからないのFalseをセット
End If
見つかった時はExit For でループを抜けます。
三流君、なんかなぁ、、サクッといかないみたいね。
まぁ、書き方はいろいろ、女性の好みと一緒とかいつもいってるけど、
少しでもキレイでわかりやすいのにしたほうがいいよねぇ。
ギク、、パターンを読者に読まれているかも。。。
先にFalseで初期化しておくのも一つの手かなぁ?
~~~~~~~~~~~~~~~~~~~~~~
Function chkSHEET(strSNAME As String) As Boolean
Dim MyObject As Object
Dim MyRET As Boolean 'リターン値を保存
MyRET = False '先に見つからないFalseを初期化代入
'ブック内のシート名の比較を行う
For Each MyObject In ThisWorkbook.Sheets
'.Nameプロパティのシート名と受け取ったstrSNAMEを比べる
If MyObject.Name = strSNAME Then
MyRET = True '名前が一致したのでTrueをセット
Exit For 'もう探す必要無いのでループを抜ける
End If
Next
'リターン値をセットして、関数を抜ける
chkSHEET = MyRET
End Function
Function chkSHEET(strSNAME As String) As Boolean
Dim work As Variant
'エラーが発生したら、ラベルERR_NOSheetsへ飛ぶ
On Error GoTo ERR_NOSheets
'シートの値を取り出す。ここでエラーならシート無しと判断するため
work = Sheets(strSNAME).Cells(1, 1) 'ダミーで左上を参照
'エラーが発生しなかったら、リターン値をセットして、関数を抜ける
chkSHEET = True
Exit Function
'エラーの時、ここに飛んでくる
ERR_NOSheets:
chkSHEET = False 'シートの値が取れない=シートが無い
End Function