あなたの映画力を試せる!POPLETA映画検定(無料) >>

いつもお世話になります。
エクセルのシート名についての質問です。
いつもはシート名を変えるとき、シートタブの上を右クリックして「変更」しています。

◆そこで、
(1) セル「A1」に入力されてある文字を自動で出す
(2) もしくはマクロボタンを押すと「A1」に入力されてあるものが「シート名」として変わる

というようにしたいのですが、その方法について教えてください。よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

こんにちは。




(1)の場合は、下記のコードを ThisWorkbook に記述してください。
どのワークシートでも機能します。

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Address = "$A$1" Then Sh.Name = Target.Range("A1").Value
End Sub


(2)場合は、下記のコードを標準モジュールに記述しボタンにマクロ登録してください。
(すべてのシートにボタンを貼り付けるのは面倒でしょうから、ツールバーにボタンとして追加すると良いと思います。)

Public Sub SheetName()
ActiveSheet.Name = Range("A1").Value
End Sub
    • good
    • 53
この回答へのお礼

GreatDragonさん、ありがとうございました。
最高のお答えをいただきました。

(1)は、すべてのワークシートに機能する点で、そこまでできるとは思ってなかったので驚きとともにうれしく使わせていただきます。

(2)についても感謝です。

本当にありがとうございました。

お礼日時:2006/03/13 14:31

イベントを使うと、自動的にマクロが実行されます。


以下のマクロをSheet1に書いておけば、A1に値を書き込むだけでシート名が設定されます。
Private Sub Worksheet_Change(ByVal target As Range)
  ActiveSheet.Name = ActiveSheet.Range("A1")
End Sub
    • good
    • 17
この回答へのお礼

zuntacさん、ありがとうございました。
各シートのコードに書き込めば、シート名が変わりました。感謝申し上げます。

お礼日時:2006/03/13 14:34

こんな感じでしょうか?


Sub test()
On Error GoTo MB
ActiveSheet.Name = ActiveSheet.Range("A1").Value
MB: MsgBox "セルが空白かシート名に使用できない文字があります"
End Sub
    • good
    • 5
この回答へのお礼

SuperMildさん、ご回答ありがとうございました。
せっかくのご回答に、ポイントを発行できなくてごめんなさい。後続の方のご回答の内容が私の質問により、的確でしたのでお許しください。
シート名はマクロ実行で確かに変わりました。ありがとうございました。
ただ、毎回メッセージボックスが出てきてしまいます。この点私の理解(勉強)不足ならお許しください。理解に達しませんでした。
それにしても早速のご回答を心より感謝申し上げます。^^

お礼日時:2006/03/13 14:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセルでシート名を自動入力したい。

いつもお世話になります。

エクセルのシート名の入力について質問です。
「A1」に「あああ」と入力したらシート1の
名前が「あああ」となるようにしたい。
さらに「B1」に「いいい」と入力したらシート2の
名前が「いいい」となるようにしたい。
この質問が↓近いのですが、A1のみ?
http://oshiete1.goo.ne.jp/qa2025849.html

A1、B1、C1・・・・もしくは、A1、A2、A3・・・と
行で続いても列で続いてもいいのですが・・・

更にもう一つ質問がございます。
別のシートに連番を割り振ることは、可能でしょうか?
例えばシート1~シート20まで有るとします。
シート1のセルA5に「101」と数字を入力し
シート2のセルA5には「102」、シート3のセルA5には「103」と
連番を一挙にコピーできますでしょうか?

どうぞ宜しくお願い致します。

Aベストアンサー

A1、B1、C1…に入力された値をシート名にするマクロです。
シート名を入力するシートの「シート名タブ右クリック」→「コードの表示」で開く画面に貼り付けてください。シートに戻り値を入力するとシート名が変わります。
入力した列に対応するシートがないときや、シート名に使用できない値を入力したときはエラー表示しています

Private Sub Worksheet_Change(ByVal Target As Range)
 On Error GoTo err0
 If Target.Row = 1 Then
  If Target.Column > Worksheets.Count Then
   MsgBox ("対応するシートがありません")
  Else
   Worksheets(Target.Column).Name = Target.Text
  End If
 End If
 Exit Sub
err0:
 MsgBox ("入力したシート名が不適切です")
End Sub

以下は後半部分のマクロです。こちらのマクロはALT+F11でVBE画面を開き、「VBAProjectエクスプローラのシート名右クリック」→「挿入」→「標準モジュール」で表示される画面にペーストして下さい。実行はシート画面に戻って、ALT+F8を押してマクロ一覧からマクロ名(Macro2)を選択して実行します。(実行は手動です。値を入れても自動では動きません)

連番の開始値を入力するシート名、セルアドレスは実際のものに変更してください。なお連番は整数値を想定しています。

Sub Macro2()
Dim idx, cnt As Integer
Const sh As String = "aa" '連番のスタートを入力するシート
Const adr As String = "A5" '連番を入力するセル
 If IsNumeric(Sheets(sh).Range(adr).Value) Then
  cnt = Sheets(sh).Range(adr).Value
  For idx = 1 To Worksheets.Count
   If Sheets(idx).Name <> sh Then
    cnt = cnt + 1
    Sheets(idx).Range(adr).Value = cnt
   End If
  Next idx
 Else
  MsgBox ("開始値が数値ではありません")
 End If
End Sub

でも質問の内容は「例えばこのセルに値を入力したら」という書き方ですから、たぶんこのままでは使えないかもしれませんね。その場合はご自身で修正をお願いします。

A1、B1、C1…に入力された値をシート名にするマクロです。
シート名を入力するシートの「シート名タブ右クリック」→「コードの表示」で開く画面に貼り付けてください。シートに戻り値を入力するとシート名が変わります。
入力した列に対応するシートがないときや、シート名に使用できない値を入力したときはエラー表示しています

Private Sub Worksheet_Change(ByVal Target As Range)
 On Error GoTo err0
 If Target.Row = 1 Then
  If Target.Column > Worksheets.Count Then
   MsgBox ("対応...続きを読む

QExcelの各シートに自動的に名前をつけられませんか?

Excelの各シートのタグというんでしょうか(最初にsheet1とかになっている部分です)、ここにそのシート内にある所定のセルの内容をそのまま表示する方法ってありますか?

具体的にいうと、人事の個人別異動履歴等を個人ごとのシートで管理したいんです。
例えば、各シートのA1のセルに社員コードを入れるようにするとして、シート名を自動的にその番号にできないかと思っているんです。
可能でしょうか?
よろしくお願いします。

Aベストアンサー

#4です。お礼の中に記された
>各シートの同じセルにあるデータをそのシートの名前にしたいんです。
この方が簡単です。
Sub test01()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
' MsgBox ws.Name
' MsgBox ws.Range("a1")
ws.Name = ws.Range("a1")
Next
End Sub
で出来ました。

QVBAでシート名をセルから取得したいのですが

データシートが数枚あり、そこから、シートごとに必要なデータのみ抽出して、印刷用シート(1枚)にまとめて書きこみたいと思っています。
書きこみは以下のような感じにしています。

Sheets("印刷用シート").Activate
Range("A1").Value = Sheets("データ1").Range("A1").Value

ここで、データ1というシート名を、色々に変えたいのです。
印刷用シートのセルに「データ1」なり「データ2」なり入力したら、その部分が変わるように変数にしたいのですが、どのようにすればいいでしょうか?
VBAを勉強中(初心者)です。よろしくお願いします。

Aベストアンサー

変数宣言して行えばできますよ。
例えば
Dim ファイル保存名
ファイル保存名 = "C:\Documents and Settings\Administrator\シート名.xls"

こんな感じですかね。

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?

QエクセルのIF関数で、文字が入力されていたならば~

エクセルのIF関数で文字が入力されていたならば~、という論理式を組み立てたいと思っています。

=IF(A1="『どんな文字でも』","",+B1-C1)

A1セルに『どんな文字でも』入っていたならば、空白に。
文字が入っていなければB1セルからC1セルを引く、という状態です。

この『どんな文字でも』の部分に何を入れればいいのか教えてください。

またIF関数以外でも同様のことができれば構いません。

宜しくお願いします。

Aベストアンサー

=IF(ISTEXT(A1),"",B1-C1)

でどうでしょうか?

Q自動で複数セルの内容をシート名にする

今エクセル2013で、B5セルに「8」を入力して、C5セルには「月実績」と入力してあります。
B5セルはシートをコピーして月ごとに変更していきます。C5セルのほうも例えば「月生産数」等に変更して使用します。(つまり、B5もC5も両方内容を変更していきます。)

このB5とC5のセルの内容をシート名に自動で変更したいのですが、どうすればよいでしょうか?
たとえば上記の例だと、シート名が「8月生産数」になってくれればよい。

今とりあえずWorksheetに下記コードを記述していますが、これだとシート名が「8$C$5」となってしまい、C5を文字で認識してしまい、セルの内容がシート名になりませんでした。
どうすればよいでしょうか?
また、記述場所は使っているシートのWorksheetにかきこめばよいでしょうか?(シート名を右クリックしてコードの表示ででてくる所に記述しています)
VBAの事、あまり分からないままやっていますが、お願いいたします。

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
On Error GoTo ERR:
If Target.Cells(1, 1).Address = "$B$5" Then
Me.Name = Target.Cells(1, 1) & "$C$5"
End If
Target.Cells(1, 1).Select
Exit Sub
ERR:
MsgBox "その名前には変更出来ません。", vbCritical + vbOKOnly, "ERROR"
Resume Next
End Sub

今エクセル2013で、B5セルに「8」を入力して、C5セルには「月実績」と入力してあります。
B5セルはシートをコピーして月ごとに変更していきます。C5セルのほうも例えば「月生産数」等に変更して使用します。(つまり、B5もC5も両方内容を変更していきます。)

このB5とC5のセルの内容をシート名に自動で変更したいのですが、どうすればよいでしょうか?
たとえば上記の例だと、シート名が「8月生産数」になってくれればよい。

今とりあえずWorksheetに下記コードを記述していますが、これだとシート名が「8$...続きを読む

Aベストアンサー

間違えないよう行います:
ALT+F11でVBE画面を開く
プロジェクトエクスプローラで当該ブックのVBAProjectの中に含まれているThisWorkbookをWクリックする
現れたシートに下記をコピー貼り付ける

private sub Workbook_SheetChange(byval Sh as object, byval Target as excel.range)
’if application.intersect(taget, sh.range("B5:C5")) is nothing then exit sub
 on error goto errhandle
 sh.name = sh.range("B5") & sh.range("C5")
 exit sub

errhandle:
 MsgBox "その名前には変更出来ません。", vbCritical + vbOKOnly, "ERROR"
end sub


これまでに試した「シート名タブを右クリックしてコードの表示」のマクロは綺麗に全部消去する。

Qエクセルで、ワークシート名をセルから参照する

エクセルで、ワークシート名をセルに表示する方法は書いてありますが、セルの値をワークシート名とするにはどうしたらいいでしょうか。

つまり、
「ワークシート名 → セル」 ではなく、

「セルの値 → ワークシート名」 ということです。


現状、会社が変わると決算期が変わるため、決算期を変更する度にワークシート名を変えていますが、変わった都度ワークシート名を手で変更するのは手間が掛っています。

具体的には、例えば、
3月決算の会社のファイルは、4月シート、5月シート・・・
12月決算の会社は、1月シート、2月シート・・・
のようにシート名を変えています。


そのため、セルに決算期を入力すると、自動で各ワークシート名も変更するようにしたいのですが、どうしたらいいでしょうか。

そういう関数はないようですし、マクロ・VBAの本等を見ても、よくわかりません。


宜しくお願い致します。

Aベストアンサー

こんにちは!

Sheetは12Sheet存在しているとします。

>セルに決算期を入力すると・・・
具体的なセル番地が判らないので、Sheet1のA1セルに
決算月の数値のみを入力した場合のコードです。

Sheet1のSheet見出し上で右クリック → コードの表示 → VBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペースト → Sheet1に戻りA1セルに月の数値を入力してみてください。

Private Sub Worksheet_Change(ByVal Target As Range) 'この行から
Dim k As Long, myCnt As Long
With Target
If .Address = "$A$1" Then
If .Value <> "" And IsNumeric(.Value) And .Value <= 12 Then
'一旦シート名を適当なシート名に変更しておく(エラー回避のため)
For k = 1 To 12
Worksheets(k).Name = "Sheet" & k
Next k
For k = 1 To 12
myCnt = (.Value + k) Mod 12
If myCnt = 0 Then
myCnt = 12
End If
Worksheets(k).Name = myCnt & "月シート"
Next k
End If
End If
End With
End Sub 'この行まで

こんな感じではどうでしょうか?m(_ _)m

こんにちは!

Sheetは12Sheet存在しているとします。

>セルに決算期を入力すると・・・
具体的なセル番地が判らないので、Sheet1のA1セルに
決算月の数値のみを入力した場合のコードです。

Sheet1のSheet見出し上で右クリック → コードの表示 → VBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペースト → Sheet1に戻りA1セルに月の数値を入力してみてください。

Private Sub Worksheet_Change(ByVal Target As Range) 'この行から
Dim k As Long, myCnt As Long
With Target
...続きを読む

Qエクセルで条件に一致したセルの隣のセルを取得したい

下のような「得点」という名前のシートがあります。
(「田中」のセルがA1です。)

 [ 田中 ][ 10 ][ 200 ]
 [ 山田 ][ 21 ][ 150 ]
 [ 佐藤 ][ 76 ][ 250 ]
 [ 鈴木 ][ 53 ][ 350 ]

別のシートのA1セルに、「佐藤」と入力すると、

 [ 佐藤 ]

「得点」シートから「佐藤」の列を見つけて、B1、C1に

 [ 佐藤 ][ 76 ][ 250 ]

のように表示させたいのですが、B1、C1にはどのような式を書けば良いのでしょうか。
「得点」シートでは氏名が重複する事はありません。
IF文を使うと思うのですが、いまいち良く分かりませんでした。

よろしくおねがい致します。

Aベストアンサー

こんにちは!
VLOOKUP関数で対応できます。
IF関数と併用すればエラー処理が可能です。

Excel2007以降のバージョンであれば
B1セルに
=IFERROR(VLOOKUP($A1,得点!$A:$C,COLUMN(B1),0),"")
としてC1セルまでオートフィルでコピー!
そのまま下へコピーすると行が2行目以降でも対応できます。

Excel2003までの場合は
=IF($A1="","",VLOOKUP($A1,得点!$A:$C,COLUMN(B1),0))

としてみてください、m(_ _)m

QEXCEL シート名を自動変更するマクロ

いつも御世話になっています。

質問内容ですが、特定セルに入力した値を特定のシート名に反映させるマクロについてです。

例えば、
Sheet1のセルA1に「会議室」と入力した場合、Sheet5のシート名が「会議室」となり、
Sheet1のセルA2に「休養室」と入力した場合、Sheet7のシート名が「休養室」となる。
というようなものです。
(※Sheet番号は連番になっていません)

なお、シート名変更用の入力シートはSheet1のみです。

できれば、各シート名を変更する際、以下のようにしたいと考えています。

Sheet5 元シート名:負荷計算(1)
           ↓
Sheet5 変更後シート名:"Sheet1のA1で入力した名前" 負荷計算
  



教えて頂けると助かります。
宜しくお願いします。

Aベストアンサー

こんにちは!
一例です。

>(※Sheet番号は連番になっていません)
とありますが、Sheet見出し上で左からSheet1・Sheet2・・・の順とします。
すなわちSheet5はSheet見出しで左から5番目のSheet
Sheet7は左から7番目のSheetという前提です。

画面左下のSheet1のSheet見出し上で右クリック → コードの表示 → VBE画面に
↓のコードをコピー&ペーストしてSheet1のA1・A2セルにデータを入力してみてください。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim k As Long, myFlg As Boolean
If Application.Intersect(Target, Range("A1:A2")) Is Nothing Or Target.Count <> 1 Then Exit Sub
On Error Resume Next
With Target
For k = 1 To Worksheets.Count
If Worksheets(k).Name = .Value Then
myFlg = True
Exit For
End If
Next k
If myFlg = True Then
MsgBox "シート名が重複します。" & vbCrLf & "別のシート名を入力してください。"
.Value = ""
.Select
Exit Sub
Else
If .Address = "$A$1" Then
Worksheets(5).Name = .Value
Else
Worksheets(7).Name = .Value
End If
End If
End With
End Sub

こんな感じではどうでしょうか?m(_ _)m

こんにちは!
一例です。

>(※Sheet番号は連番になっていません)
とありますが、Sheet見出し上で左からSheet1・Sheet2・・・の順とします。
すなわちSheet5はSheet見出しで左から5番目のSheet
Sheet7は左から7番目のSheetという前提です。

画面左下のSheet1のSheet見出し上で右クリック → コードの表示 → VBE画面に
↓のコードをコピー&ペーストしてSheet1のA1・A2セルにデータを入力してみてください。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim k As Long, myFlg As Boolean
I...続きを読む

Q他のワークシート名の取得方法 (VBAを使用せずに)

VBAを用いずに、ワークシート関数のみでワークシート名を取得できないか探しています。

自分のシート名は、以下の出力結果の一部より取得することができました。
=CELL("filename")

しかし、他のシート名を取得する方法が思いもつきません。

VBAを用いずにシート名を取得することはできないのでしょうか?

Aベストアンサー

Excel2000でしたら、
1.[挿入]-[名前]-[定義] から、名前を2つ定義します。
  ・名前:PPP  参照範囲:=GET.WORKBOOK(1)
  ・名前:QQQ  参照範囲:=GET.DOCUMENT(88)
2.A1 に =SUBSTITUTE(INDEX(PPP,ROW()),"["&QQQ&"]","") と入力します。
3.A1 を下方にドラッグコピーすると、シート名が一覧で表示されます。

例えば3枚目のシート名のみを取得する場合は、任意のセルに
=SUBSTITUTE(INDEX(PPP,3),"["&QQQ&"]","") と入力します。

※マクロ関数というものですが、最近のバージョンにこれが付帯されているのかどうか
  わかりませんが。   ^_^;


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング