[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『シート名を自動的につけることは可能でしょうか』(Ami)
すみません、初心者なもので、できるのかどうかもわからないのですが、
セルに入力した文字を、ワークシート名に反映させることは可能でしょうか。
例えば、最初のシートのあるセルに、「需用費」と入力して、オブジェクト
ボタンを押すと、あらかじめ用意してあったシートのシート名が「需用費」と
変わるような・・・。
いろいろなところで調べて、その逆のパターン(ワークシート名をセルに
取得する)はあり、応用できないものかと悩んだのですが、うまくいきません。
よろしくお願いいたします。
自動で反映させるには、VBAによるプログラミングが必要です。 一般機能でセルの値をシート名に反映させる機能はなかったと思います。 (いったん掲載したサンプルは見当違いだったために削除) 仕切りなおします。 例えばSheet1の、A1、B1、C1の各セルに 「車両費」「事務費」「光熱費」などの項目があった場合、 その後に続くSheet2、Sheet3、Sheet4のシート名を 「車両費」「事務費」「光熱費」に変更するということなのでしょうか。
(KAMIYA)
ちょっと勉強の為、一緒に考えさせて頂きました。最善の方法とも思えないのですが、一応動きました。
Private Sub CommandButton1_Click()
Dim i As Integer
For i = 1 To Sheets.Count - 1
Sheets(i + 1).Name = Cells(1, i).Value
Next i
End Sub
(ケン)
こんばんは ケンさんのもので大丈夫だと思います。 シート数が基準ですね。
私のは方向性が違って、シートに設定された項目数を拾うものです。
Sub SheetNameChange()
Dim MYCOUNT As Long
Dim MYSHEET As Worksheet
Dim C As Range
Dim i As Integer
Set MYSHEET = Worksheets(1)
MYSHEET.Activate
'シート数が少ないときは追加します。
MYCOUNT = Application.WorksheetFunction.CountA(MYSHEET.Rows(1))
If Sheets.Count - 1 < MYCOUNT Then
Do
Worksheets.Add.Move after:=Worksheets(Worksheets.Count)
Loop Until Sheets.Count - 1 = MYCOUNT
End If
'名前の同じシートができるとエラーになるので、暫定の名前に変更します。
For i = 2 To Worksheets.Count
Worksheets(i).Name = "TEMP" & i
Next i
'1行目の列方向へ順番にセルの値をシート名に当てはめます。
MYSHEET.Activate
For Each C In Range(Cells(1, 1), Cells(1, MYCOUNT))
Sheets(C.Column + 1).Name = C.Text
Next C
End Sub
一応、A1、B1、C1、と一行目に項目名が入っていると仮定しました。 A1、A2という風にA列に項目が入っている場合は、 CountAの引数を(MYSHEET.Columns(1)) また、最後のFor Eachの部分で、 Range(Cells(1, 1), Cells(MYCOUNT, 1)) と行列番号をぎゃくにすればOK。 (KAMIYA)
>と行列番号をぎゃくにすればOK。 などと大口をたたいておきながら、他にも手直しするところが いっぱいあったみたいです。すみません。
セル範囲固定であれば、設計は楽になります。
Sub SheetNameChange()
Dim MYCOUNT As Long
Dim MYSHEET As Worksheet
Dim C As Range
Dim i As Integer
Set MYSHEET = Worksheets(1)
MYSHEET.Activate
'シート数が少ないときは追加します。
MYCOUNT = Application.WorksheetFunction.CountA(MYSHEET.Range("B12:B46"))
If Sheets.Count - 3 < MYCOUNT Then
Worksheets.Add after:=Worksheets(Sheets.Count), _
Count:=MYCOUNT - (Sheets.Count - 3)
End If
'名前の同じシートができるとエラーになるので、暫定の名前に変更します。
For i = 4 To Sheets.Count
Worksheets(i).Name = "TEMP" & i
Next i
'B12から順番にセルの値をシート名に当てはめます。
MYSHEET.Activate
i = 4
For Each C In Range("B12:B46")
If C.Text <> "" Then
Sheets(i).Name = C.Text
i = i + 1
End If
Next C
End Sub
多少削ったり増えたりした部分がありますが、
セル範囲はRange("B12:B46")のような書き方のほうがわかりやすいと思い
変更しています。
(シートの追加と暫定シート名は蛇足かも?)
(KAMIYA)
この件についてはずっと以前に議論しました。 (kazu) [[20020519104759]] 『セルの内容によってシート名を変更できる?』(なお)
kazuさま、こんばんは おっしゃるとおりです。 確かに後の管理は大変ですから。 とくにブックの内容に変更があったときなど。 それを踏まえたうえでお使いになられるのがよろしい、と言うことでしょうか。 今回の件もあらかじめ一連のシート名を設定したブックから必要なシートを コピーしてくることでもよいかもしれませんね。
「それが可能かどうか」にこだわりすぎたかもしれません。 (KAMIYA)
[KAMIYA]さん、いつもありがとうございます。 今回の件は私がもっと早く以前の書き込みのことを思い出すべきでした、 ごめんなさい。 基本的に危険を踏まえた上で使うということでよいと思います。 (kazu)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.