[[20120214113725]] 『ワークシート名の一部をセルに表示するマクロ』(ぬこぬこ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ワークシート名の一部をセルに表示するマクロ』(ぬこぬこ)

 連日お世話になります。

 あるブックで、「日計AA」「日計BBBB」のように、「日計」が頭についてその後の文字列は2文字〜4文字のシートがあります。

 その「日計」がついたシートで、「日計」を省いた部分をそのシートのB2より下に表示したいと思い、

[[20030616083249]] 

 の質問を参考に下記のマクロを作成しました

  Sub シート名取得()
 Dim shn As String, sn As String, pos1 As Integer
 Dim z As Long
 Dim i As Long

 For i = 3 To Worksheets.Count - 5  '左から3番目のシートから始まって最後5つのシートを除く
    With Worksheets(i)
        shn = sh.Name
        pos1 = InStr(shn, "日計")
        If pos1 > 0 Then
            sn = Mid(shn, 3)
            z = .Cells(Rows.Count, 5).End(xlUp).Row 'E列の最後の行取得
            .Range("A2:A" & z).Value = "=ROW()-1"  'A列に最終行まで関数を入れる
            .Range("B2:B" & z).Value = sn    'B列にシート名を「日計」を除いて入れる
        End If
    End With
 Next i
 End Sub

 しかし shn = sh.Name の部分で「このメソッドをサポートしていません」のメッセージが出ます。
 Withブロックが関係あるのかと思い、sh の前に . をつけてみたりしましたがダメでした。

 ちなみに元の質問文の回答にある「For Each〜」を使うと、最後のシートの名前しか取得できませんでした。

 宣言の間違いかと思って Dim sh As Worksheet を入れてみましたがやはりエラーです。

 最初はB列に
 =MID(CELL("filename",$A$1),FIND("]",CELL("filename",$A$1))+3,31
 の関数を入れていましたが、これを各シートのデータの最終行までコピーするのが大変で、
 なんとかマクロでできないかと思っています。

 よろしくお願いいたします。

 えっと。。。
 shn = sh.Name
       ~~shって何?
 って事だと思います。

 過去ログでは
 >For Each sh In Worksheets
 ここで、順番に shに設定されていくのですが、今回は無いので。

 Worksheets(i).Name の事ですよね?
 すると、Wiht Worksheets(i) 〜 End With の間なので
 shn = .Name
 でいけるんじゃないでしょうか。

 (HANA)


 HANA様

 いつもありがとうございます。
 できました。
 なかなか仕組みが理解できないです…

 (ぬこぬこ)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.