[[20141205230844]] 『同一ブックに名簿を作成し、そのブックのシート見』(よしひろ) ページの最後に飛ぶ

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

 

『同一ブックに名簿を作成し、そのブックのシート見出しに名前を反映させるにはどうすればいいですか。』(よしひろ)

同一ブックにまず名簿を作成します。そのブックのシート見出しに名簿の名前をすべて反映させるにはどうすればいいのですか。まったくの初心者です。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 とりあえずのサンプルです。
 選択したセル範囲で、シートを追加します。

 Sub Sample()
    Dim r As Range
    Dim ws As Worksheet

    For Each r In Selection
        If r.Value <> "" Then
            On Error Resume Next
                Set ws = Worksheets(r.Value)
            On Error GoTo 0
            If ws Is Nothing Then
                Worksheets.Add after:=Worksheets(Worksheets.Count)
                Worksheets(Worksheets.Count).Name = r.Value
            End If
        End If
    Next
 End Sub

(Mook) 2014/12/06(土) 11:38


MOOKさん ありがとうございます。ですが、初心者のため、どういう手順で作業を進めるのかまったくわかりません。細かく教えてくれないでしょうか。
(よしひろ) 2014/12/06(土) 11:58

 まずはこのあたりを参考に。
http://officetanaka.net/excel/vba/beginner/10.htm
(Mook) 2014/12/06(土) 12:08

MOOKさんありがとうございます。「変数の宣言を強制する」をオンにして、標準モジュールにマクロを貼り付けたのですが、次はどうすればいいのですか。
(よしひろ) 2014/12/06(土) 13:57

sheet1に名簿を作りました。シート見出しは1/1(1)/1(2)・・・・・となっています。マクロを実行したら、名簿の名前が入りましたが、1/1(1)/1(2)・・に入らないでそのあとに新しいsheetがつくられ、そこに名簿の名前が入ってしまいました。どうすれば、1/1(1)/1(2)・・・のとひろに名前が入りますか。教えて下さい。
(よしひろ) 2014/12/06(土) 14:33

 マクロを動かすところまでは出来たようですね。

 やりたい内容がよくわからないので、
  ・Sheet1 のレイアウト
  ・シートの状態(マクロ実行前)
  ・シートの状態(マクロ実行後)
 を具体的なサンプルで説明してもらえますか。
(Mook) 2014/12/06(土) 15:06

 sheet1はA列に順に「木村佳弘」「木村栄子」「木村晴香」・・・という名簿を仮に作りました。
 マクロ前のシートの状態は、シート見出しが1/1(1)/1(2)・・・1(23)となっていて、中身は成績の評価表がすべてにはいっています。
 マクロを実行したら1/1(1)/1(2)・・・1(23)/木村佳弘/木村栄子/木村晴香となってしまいました。

 やりたいことは、SHEET1に作成した名簿の順に、シート見出しの「1」に「木村佳弘」と、「1(1)」に「木村栄子」と反映されるようにしたいのですが・・・・。

(よしひろ) 2014/12/06(土) 15:21


 名前とシートの個数が一致していないときにはどうするのでしょうか。
 データシートが同じ形式であれば、2番目のシートを「書式」などとして、これを
 コピーしてシート作成するほうが良い気がします。

 上記でよければ、先頭2シートを残してすべて削除し、2番目のシートを「書式」として

        Worksheets.Add after:=Worksheets(Worksheets.Count)
 を
        Worksheets("書式").Copy after:=Worksheets(Worksheets.Count)
 に変更すれば出来るかと思います。
(Mook) 2014/12/06(土) 15:49

とりあえずsheet1のA列に5名分の名簿を作りました。このシートと成績の評価表が入っているシート「1」だけ残し、残りを削除しました。それから、新しいマクロに書き換えて実行したところ、エラー表示か゜でました。表示内容は「インデックスが有効範囲にありません。」で、デバッグを押したところ、新しく書き換えた
マクロに黄色いマーカーがひかれて表示されました。どうしたのでしょうか。
(よしひろ) 2014/12/06(土) 17:02

 「書式」シートがないのではないですか。
(Mook) 2014/12/06(土) 19:21

「書式」シートとは何ですか。成績の評価表が入っているシートとは違うのですか。教えて下さい。
(よしひろ) 2014/12/06(土) 20:34

 シートの名前です。
 2番目のシートの名前を「書式」に変えてください。
(Mook) 2014/12/06(土) 20:58

MOOKさん、長い間教えて下さりありがとうございます。やっとできました。感動です。本当にありがとうございました。
(よしひろ) 2014/12/06(土) 21:09

sheet1のA列には連番を新たに入れました。B列には名前5人分入っています。5人分のシート見出しと「書式」がコピーされました。それぞれのシートのAH2セルに連番が入るようにしたいのですがどうすればいいですか。
(よしひろ) 2014/12/07(日) 16:27

 Worksheets(Worksheets.Count).Name = r.Value
 の後ろに
 Worksheets(Worksheets.Count).Range("AH2").Value = r.Offset(0,-1).Value
 を追加で。
(Mook) 2014/12/07(日) 18:12

「書式」にマクロを追加しましたが、すべてのシートに連番ではなく、「1」が記入されてしまいました。どうしたものでしょうか。
(よしひろ) 2014/12/07(日) 19:11

 もし今後もマクロで EXCEL を使っていくつもりがあるなら、ぜひコードのトレースと
 デバッグの仕方を習得してください。

 ステップ実行しながら、
   変数に今、何が入っているか、
   期待通りにならない場合、処理のどこでおかしなことが起きているか、
 このあたりをある程度、調べることができないと、なかなか伸展しないように思います。

『マクロを「書いてみた」「動かした」「ダメでした」。』
http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_200.html
『デバッグトレースの開始方法』
http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_030.html

 それからA、B列の数行のサンプルのような、シートの構成の具体例を出して、説明
 した方が良いと思います。
 A列に 数値、隣のB列に名前があり、B列を選択して実行の想定ですが、あっているでしょうか。

 あと、マクロは標準モジュールにある想定です。
(Mook) 2014/12/07(日) 20:42

1 木村佳弘 A列に番号、B列に名前があります。マクロは標準モジュールです。B列を選択してマクロ
2 木村栄子 の実行をしました。
3 木村晴香
4 木村康人
5 木村健人

先頭2シートを残してすべて削除し、2番目のシートを「書式」として

        Worksheets.Add after:=Worksheets(Worksheets.Count)
 を
        Worksheets("書式").Copy after:=Worksheets(Worksheets.Count)

としてマクロを実行したらシート見出しは、名簿通りになりました。昨日はそこで成功して終わったのですが、今日、番号をAH2セルに連番で入れなくてはいけないことに気づき質問しました。そこで

 Worksheets(Worksheets.Count).Range("AH2").Value = r.Offset(0,-1).Valueを追加して、B列を選択して実行したら全てのシートに「1」と記入されて困っている所です。デバックでステップインもしましたが、変化がわかりません。

(よしひろ) 2014/12/07(日) 22:26


 わからないですね。
 こちらでは、名前の左横の番号が AH2 に転記されます。

 A列は数字が直接記入されているでしょうか。
 数式の計算方法の設定は自動になっているでしょうか。

 >デバックでステップインもしましたが、変化がわかりません。

 r.Offset(0, -1).Value と r.Value をそれぞれ選択して「ウォッチ」ウィンドウに
 ドロップしておいてからステップ実行してください。

 ループの各回の値が確認できます。

(Mook) 2014/12/07(日) 23:50


MOOKさんへ。sheet1のA列に半角英数で数字を入れました。B列には名簿を作りました。そして
Worksheets(Worksheets.Count).Name = r.Value
 の後ろに
 Worksheets(Worksheets.Count).Range("AH2").Value = r.Offset(0,-1).Value
 を追加で。をして、B列を選択して、マクロを実行したら、連番ができました。何が原因だったのでしょうか。数字をオートフィルで入れていたのが悪かったのでしょうか。とにかく、ありがとうございました。
(よしひろ) 2014/12/08(月) 20:23

コメント返信:

[ 一覧(最新更新順) ]


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