[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ワークシート名の一部をセルに表示するマクロ』(ぬこぬこ)
連日お世話になります。
あるブックで、「日計AA」「日計BBBB」のように、「日計」が頭についてその後の文字列は2文字〜4文字のシートがあります。
その「日計」がついたシートで、「日計」を省いた部分をそのシートのB2より下に表示したいと思い、
の質問を参考に下記のマクロを作成しました
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.