• ベストアンサー

セルの項目をシート名にしたい

はじめまして、vba初心者の者です。 セルB3から始まるB列にある、 項目を各シートの名前にしたいです。 セルB列のセルの中身がnullになれば終了という動作。 例えば。 セルB3に「山田」という文字列があれば、Sheet1は山田にする。 セルB4に「佐藤」という文字列があれば、Sheet2は佐藤にする。 よろしくお願い申し上げます。

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

>Sheet1は山田にする。 どのシートを山田にしたらいいのか、どのシートは次の佐藤にしたいのか、どういう対応とか関係とか目印とかあるんでしょうか。 それとも「(あるものを)山田にしたい」が間違いで、山田シートやニューブックをただ新しく作ればよかっただけですか。 sub macro1()  dim h as range  dim s as long, i as long  s = worksheets.count + 1 ’シートを作る  for each h in range("B3:B" & range("B65536").end(xlup).row)  worksheets.add after:=worksheets(worksheets.count)  activesheet.name = h.value  next ’別のブックにする  for i = worksheets.count to s step -1  worksheets(i).select false  next i  activewindow.selectedsheets.move end sub

kalafina2
質問者

補足

ご回答ありがとうございました。 訂正があります。 B3と記載しましたがC3でした。 例、 1、ブック1のSheet1に文字列の「山田」や「佐藤」のセルがあります。 2、ブック2は新規ブックです。 3、ブック1の最初のセルC3の文字列「山田」を、ブック2のSheet1を「山田」という名前のシート名にします。 4、ブック1の次のセルC4の文字列「佐藤」を、ブック2のSheet2を「佐藤」という名前のシート名にします。 5、ブック1の次のセルC5、C6、C7と繰り返していき文字列がなくなるまで続けます。 あとご教授頂いたソースを実行したところオブジェクトエラーになりました。 >'シートを作る > For Each h In Range("C3:C" & Range("B65536").End(xlUp).Row) > Worksheets.Add after:=Worksheets(Worksheets.Count) ここがエラーになりました。>> ActiveSheet.Name = h.Value > Next よろしくお願い申し上げます。

その他の回答 (2)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.3

>あとご教授頂いたソースを実行したところオブジェクトエラーになりました。 ご自分の直し間違いです。 間違い: > For Each h In Range("C3:C" & Range("B65536").End(xlUp).Row) 正解:   For Each h In Range("C3:C" & Range("C65536").End(xlUp).Row) 他は回答のままで、アナタのヤリタイ通りになっています。

kalafina2
質問者

お礼

ご指摘ありがとうございます。 無事動作しました。 丁寧に教えて頂きありがとうございました。

  • mar00
  • ベストアンサー率36% (158/430)
回答No.1

新しいシートを追加して名前を変更するVBAです。 Sub Macro1() Dim WS As Worksheet Set WS = Worksheets("Sheet1") ★ For i = 3 To Cells(Rows.Count, "B").End(xlUp).Row Sheets.Add After:=Worksheets(Worksheets.Count) Worksheets(Worksheets.Count).Name = WS.Range("B" & i) Next End Sub ★の部分はデータを入力しているシート名に変更して下さい。

kalafina2
質問者

補足

早速のご回答ありがとうございます。 補足忘れてしまいましたが、 B3から始まる文字列のあるブックと、 文字列をシート名にするブックは、 別ブック(ブックがデータ参照元と貼り付け元の2つ存在してます。)になります。 vbaで作成可能でしょうか? 何卒よろしくお願い申し上げます。

関連するQ&A

  • excelVBA 項目ごとに連番をふりたい

    よろしくお願いします。 excelで連番を振りたいのですが、隣のセルに並んでいる 項目ごとに振りたいのです。VBAでできるでしょうか? 番号を振りたいのはB列で、名前ごとに1から順番に番号を 振りたいです。名前が変わるとまた1に戻って、振っていき、 A列がなくなると終了です。 A列の名前の数や、それぞれのデータ数、 全体のデータ数などは、ばらばらです。 もしかしたら列数はかわるかも知れませんが、 隣の列の項目ごとに番号を1から振る、ということは 変わりません。 (A列) (B列)  山田    1  山田    2  山田    3  田中    1  田中    2  田中    3  田中    4  佐藤    1  佐藤    2  加藤    1  斎藤    1  斎藤    2  斎藤    3  斎藤    4  斎藤    5   ・    ・   ・    ・   ・    ・ 今は目で見ながら毎日、オートフィルタでがんばっています。 これができるとすごくうれしいです。 よろしくお願いいたします。

  • セルと同じシート名のシートを探す

    vb初心者です。 よろしくお願いします。 シート名AのセルB3に入った文字と同じシート名を探させたいと思います。 例えば シートAのB3に"万円"と入力された場合、 "万円"シートをアクティブにするという感じです。 よろしくお願いします。

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

    下のような「得点」という名前のシートがあります。 (「田中」のセルがA1です。)  [ 田中 ][ 10 ][ 200 ]  [ 山田 ][ 21 ][ 150 ]  [ 佐藤 ][ 76 ][ 250 ]  [ 鈴木 ][ 53 ][ 350 ] 別のシートのA1セルに、「佐藤」と入力すると、  [ 佐藤 ] 「得点」シートから「佐藤」の列を見つけて、B1、C1に  [ 佐藤 ][ 76 ][ 250 ] のように表示させたいのですが、B1、C1にはどのような式を書けば良いのでしょうか。 「得点」シートでは氏名が重複する事はありません。 IF文を使うと思うのですが、いまいち良く分かりませんでした。 よろしくおねがい致します。

  • 複数のシートのセル内容をひとつにまとめたい

    複数のシートのセル内容をひとつにまとめたいと思っています。 Sheet1        Sheet2      Sheet3 1 山田 ¥100  1 山田 ¥80  3 鈴木 ¥80 2 佐藤 ¥130  2 佐藤 ¥55  4 田中 ¥150 3 鈴木 ¥110  4 田中 ¥60 こんなデータを Sheet4 1 山田 2 佐藤 3 鈴木 4 田中 とまとめたいんです。 金額は必要ないので、番号と名前だけをまとめたいんです。 どうすれば良いか、教えてください。 よろしくお願いします。

  • エクセル 並び替えた上位3位のセルに色をつけたい

    こんにちは! A列  B列 山田  10 佐藤  3 鈴木  8 市川  5 栗田  11 ↑このような表があるとして、B列を降順にならびかえ上位3人のセル(B列)に色をつけることは出来ますか? VBAは、わからないのでそれ以外でお願いします。 おわかりの方教えてくださーい!

  • シート名をセルから取得したい

    作業用シートのA列に Sheet1 Sheet2 Sheet3 と、入れ B列は、そのシートのA列の個数を 作業用シートに入力していきたいのですが、 作業用シートのb1に =COUNTA(Sheet1!A:A) と入力した場合、正しい個数が返りますが シート名をA列の文字列にしたくて、 ="COUNTA("&A1&"!A:A)" こんな感じにしたいのですが、 こうすると、これが文字列になってしまいます。 =COUNTA("&A1&"!A:A) これだと、数式が間違ってますというエラーになります。 数式内でセルを参照してシート名を指定する方法を教えてください。

  • VBA 条件の一致する行の特定のセルの削除について

    VBA初心者です。よろしくお願いします。 <sheet1>     A  B   C  D  E 1   1 1211 佐藤 10 100 2   2 1344  山田 25 150 3   3 1522 田中  5 80 4   4 1655  高橋 35 200 ・ ・ 100 100 3682 小林 40 300 <sheet2>    A   B 1 1344 2 この様な表があったとします。(見辛くてすみません) "sheet2"A1セルに入力した内容と同じ内容を"sheet1"のB列から検索し、その行のB~Eのセルを削除するにはどのようにしたら良いでしょうか? 例えば"sheet2で"「1344」と入力した場合、"sheet1"の「1344」のある2行目のB~Eのセルを削除するといった感じです。 削除後の空白は詰める必要はなく、マクロを記録させるボタンは"sheet2"に貼り付けます。 色々調べましたがどうにも分からない為質問させていただきます。 よろしくお願い致します。

  • 同じ文字列を抽出して新規シート作成

    A列~E列までデータが入力されています。 E列は所々、空白セルがあります。 1行目は見出しです。 元データのA列の中で同じ文字列を探して 見出しと該当するA~E列の行を新規シートとして作成。 その際、シート名はA列の文字列。 A列の文字列が2つ以上見つからなくても A列の文字列を新規シートにする。 最終行は常に変動します。 元データ (B列~E列は割愛) A-1 名前 A-2 鈴木 A-3 佐藤 A-4 鈴木 A-5 山田 A-6 佐藤 新規シート名 「鈴木」 A-1 名前 A-2 鈴木 A-3鈴木 新規シート名 「佐藤」 A-1 名前 A-2 佐藤 A-3 佐藤 新規シート名 「山田」 A-1 名前 A-2 山田 上記の事をマクロで実行させたいです。 ご指南の程、宜しくお願い致します。 エクセル2013

  • セルからシート名を得る

    シート「メイン」のA列に、 1 2 3 4 とあって、シート「1」~「4」のA1セルに入力されているデータを、シート「メイン」の数字の横(B列)に表示させたいです。 B1に='1'!A1 B2に='2'!A1 ・・・などとやっていけばできますが、「メイン」のA列の数字をシート名に変換して式を書くことはできませんか? よろしくお願いいたします。

  • EXCEL VBA 別シートの文字をシート内で検索

    excel2003 VBAで SHEET2に格納されているセルの文字をSHEET1のB列1~9000程度までの文字列の中で一致または部分一致するものがあればそのセル(B列のセル)をSHEET3に順次A列に出力したいのですが、うまくできません。SHEET2に格納されている場所はA列で(SHEET1、SHEET2の文字とも増える可能性あり) 宜しくお願いします。

専門家に質問してみよう