[[20170626134752]] 『自動で複数セル(一覧)の内容を作成したシートを』(oh10) ページの最後に飛ぶ

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

 

『自動で複数セル(一覧)の内容を作成したシートをコピーしシート名にする方法』(oh10)

自動で複数セル(一覧)の内容を作成したシートをコピーしシート名にする方法

助けてください。

例えば

一覧のシート内

   A列
   氏名
5  田中
6  佐藤
7  高橋
   ・
   ・
   ・
最後まで入力し

別の作成したシートをコピーし、上の入力したセルをシート名にする。

このA列の氏名を使ったシート(一覧)を複数一気に作りたいです。

超初心者で良く分からず困ってます泣

どなたか教えていただけませんでしょうか。

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

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


 >別の作成したシートをコピーし、上の入力したセルをシート名にする。 
 ここがわかりません。

 1)「氏名が入力されたシート」 とは別に「コピーさせたいシート」がある (同一ブックにシートは2枚)という認識でよろしいですか?
 2)「氏名が入力されたシート」と「コピーさせたいシート」の関係
   (例えば何かのフォーマットで、指名欄だけ、シート名と一致するようにしたい等)はどうなっていますか?
(稲葉) 2017/06/26(月) 14:45

稲葉さんへ

日本語不足で申し訳がありません。

1)「氏名が入力されたシート」 とは別に「コピーさせたいシート」がある (同一ブックにシートは2枚)という認識でよろしいですか?
 →そうです。

2)「氏名が入力されたシート」と「コピーさせたいシート」の関係
 →Excel作成しましたので確認すれば分かると思います。
    http://d.kuku.lu/a549ef63b4

ブック内一覧のA列が氏名、原紙はコピーしA列の氏名をシート名に複数一気に作りたい。

気付いて投稿するの忘れました。
1)もし、同じ苗字あったら、苗字の隣の名前を追加したい。
2)新しい氏名入力したら自動的に、シート追加できるんでしょうか、、(無理なら大丈夫です。)
3)氏名を削除したら自動的に、シート削除出来るんでしょうか、、(無理なら大丈夫です。)

急に追加してしまい申し訳がありません。
誠意がまったく感じられませんのは承知しており、本当に迷惑をかけて申し訳がありません。

宜しくお願い致します。

(oh10) 2017/06/26(月) 16:43


 アップロードされたファイルは抵抗があるので見ません。
 長くなっても構いませんので、エクセルのコピーをそのままコメントに張り付け、
 「ここがこうなってほしい」を説明願います。

 追加事項についてです。
 >1)もし、同じ苗字あったら、苗字の隣の名前を追加したい。 
 1ー1)同一セルに入力されている場合、苗字と名前はどのように区別しますか?スペース?(半角全角問わず)
 1−2)後から追加した方が、既存の方と同一であれば、両方に名前を追加でよろしいですか?
 1−3)↑の2点を考慮すると、最初からセルに入力された「氏 名」のほうが簡単です。
 1−4)同性同名の場合はどうしますか?
 1−5)1−4)が同性同名である場合、後から追加された人が別人だと、どのように判断しますか?

 >2)新しい氏名入力したら自動的に、シート追加できるんでしょうか
 >3)氏名を削除したら自動的に、シート削除出来るんでしょうか
 可能ですが、お勧めはしません。
 理由は、
 ・誤りなく入力することが人間にはできない
 ・入力頻度が高い場合、逐次実行は作業性を悪くする
 ・入力頻度が低い場合、逐次実行は不要
 少なく見積もっても3点あります。

 ですので、氏名入力後、実行ボタンを押す形が望ましいと考えます。
(稲葉) 2017/06/26(月) 17:19

返信ありがとうございます。

1)ブック内容について

1、シート名『一覧』

     A     B     C
1   会社名
2   住所
3   電話
4   氏名    名前
5   田中    太郎
6   佐藤    太郎
7   高橋    太郎




最後まで入力

2、シート名『原紙』(コピーさせたいシート)

Sub Macro1()
'
' Macro1 Macro
'

'

    Sheets("Sheet1").Select
    Sheets("Sheet1").Name = "原紙"
    Range("B1:F1").Select
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Selection.Merge
    ActiveCell.FormulaR1C1 = _
        "=RIGHT(CELL(""filename"",RC[-1]),LEN(CELL(""filename"",RC[-1]))-FIND(""]"",CELL(""filename"",RC[-1])))"
    Range("B2").Select
    Windows("Book1").Activate
    Range("B1:F1").Select
    ActiveCell.FormulaR1C1 = _
        "=RIGHT(CELL(""filename"",RC[-1]),LEN(CELL(""filename"",RC[-1]))-FIND(""]"",CELL(""filename"",RC[-1])))"
    Range("B2").Select
    ActiveCell.FormulaR1C1 = "2017"
    Range("E2").Select
    ActiveCell.FormulaR1C1 = "6"
    Range("A3").Select
    ActiveCell.FormulaR1C1 = "=DATE(R2C2,R2C5,1)"
    Range("B3").Select
    ActiveCell.FormulaR1C1 = "=RC[-1]+1"
    Range("B3").Select
    Selection.AutoFill Destination:=Range("B3:G3"), Type:=xlFillDefault
    Range("B3:G3").Select
    Range("A4:A6").Select
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Selection.Merge
    Selection.AutoFill Destination:=Range("A4:G6"), Type:=xlFillDefault
    Range("A4:G6").Select
    Range("A7").Select
    ActiveCell.FormulaR1C1 = "=R[-4]C+7"
    Range("A7").Select
    Selection.AutoFill Destination:=Range("A7:G7"), Type:=xlFillDefault
    Range("A7:G7").Select
    Range("A4:G6").Select
    Selection.Copy
    Range("A8").Select
    ActiveSheet.Paste
    Range("A11").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "=R[-4]C+7"
    Range("A11").Select
    Selection.AutoFill Destination:=Range("A11:G11"), Type:=xlFillDefault
    Range("A11:G11").Select
    ActiveWindow.SmallScroll Down:=3
    Range("A8:G10").Select
    Selection.Copy
    Range("A12").Select
    ActiveSheet.Paste
    Range("A15").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "=R[-4]C+7"
    Range("A15").Select
    Selection.AutoFill Destination:=Range("A15:G15"), Type:=xlFillDefault
    Range("A15:G15").Select
    ActiveWindow.SmallScroll Down:=6
    Range("A12:G14").Select
    Selection.Copy
    Range("A16").Select
    ActiveSheet.Paste
    Range("A19").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "=R[-4]C+7"
    Range("A19").Select
    Selection.AutoFill Destination:=Range("A19:G19"), Type:=xlFillDefault
    Range("A19:G19").Select
    Range("A16:G18").Select
    Selection.Copy
    Range("A20").Select
    ActiveSheet.Paste
    Range("B23").Select
    ActiveWindow.SmallScroll Down:=-21
    Columns("A:G").Select
    Selection.ColumnWidth = 8.38
    Application.CutCopyMode = False
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
    End With
    ActiveWindow.SmallScroll Down:=3
    Range("D12:D14").Select
    ActiveWindow.SmallScroll Down:=-6
    Range("A3:F7").Select
    ActiveWindow.SmallScroll Down:=-15
    Range("A3:G3,A7:G7,A11:G11,A15:G15,A19:G19").Select
    Range("A19").Activate
    ActiveWindow.SmallScroll Down:=6
    Selection.NumberFormatLocal = "d"
    ActiveWindow.SmallScroll Down:=-24
    Range("J15").Select
End Sub

1ー1)同一セルに入力されている場合、苗字と名前はどのように区別しますか?スペース?(半角全角問わず)
    →スペースでお願いします。

1−2)後から追加した方が、既存の方と同一であれば、両方に名前を追加でよろしいですか?
    →はい、大丈夫です。

1−3)↑の2点を考慮すると、最初からセルに入力された「氏 名」のほうが簡単です。
    →問題ありません。お願いします。

1−4)同性同名の場合はどうしますか?
    →最後の方に(A)(B)と順番する。

1−5)1−4)が同性同名である場合、後から追加された人が別人だと、どのように判断しますか?
    →1−4)と同じように判断します。

よろしくお願い致します。

(oh10) 2017/06/26(月) 22:33


 明日時間があるときに確認しますが
 ざっと見て私が聞きたいことが解決されてないような、、、
 コピーされたいシートがどんな形かはどうでもいいです
 単純にシートをコピーして、シート名だけ変わればいいのか、
 コピー後にセルの値を書き換える等するのか確認したかったのです

 また同姓同名の場合、最後の方ということは、氏名の並びが変わらないということですか?
 であれば、氏名だけでなく一意のナンバリングを振れば被りませんので、
 シート名は「01田中太郎」「02佐藤太郎」「03高橋太郎」と全員にナンバリングしたほうが
 コーディングがしやすく、例外(同姓同名処理)もないのでよいと思いますがいかがでしょう?

 並び替え、行の挿入がないことが条件です。
 あるのであれば、再度同姓同名の方がいた場合の判断基準を教えてください。

(稲葉) 2017/06/26(月) 23:09


稲葉さんへ

解決しなくてすみません。私が間違えました。

作成したシートをコピーして、シート名だけです。

「コピー後にセルの値を書き換える等するのか」
  →有りません。作成したシートコピしてシート名だけ書き換えたいです。

申し訳がありません。
違います。説明不足ですみません。

できれば
条件
並び替えはなし
行の挿入はあり

でしたいです。

ナンバリングについて
出来れば、同性同名の場合、氏名の最後に、「−1」「−2」「−3」・・・・・

例)「佐藤太郎−1」「佐藤太郎−2」「佐藤太郎−3」って感じです。

判断基準は、社会番号あります。合ってますか?

宜しくお願い致します。
(oh10) 2017/06/27(火) 10:36


 >判断基準は、社会番号あります。合ってますか? 
 わかりました。
 しかし、シート名に社員番号はありませんので
 各シートの目立たないところに社員番号を入れさせていただければ(例A)
 それが判断基準になると思いますが、いかがでしょうか?
 また一覧シートの社員番号の位置を教えてください。(仮にC列とします)

 完成イメージは以下の通りです。
 仕様通りかご確認ください。
 一覧シート

 E列はマクロ実行時に生成
    |[A] |[B] |[C]     |[D]     |[E]       
 [4]|姓  |名  |社員番号|姓名    |シート名  
 [5]|田中|太郎|     001|田中太郎|田中太郎  
 [6]|佐藤|太郎|     002|佐藤太郎|佐藤太郎-1
 [7]|高橋|太郎|     003|高橋太郎|高橋太郎  
 [8]|佐藤|太郎|     004|佐藤太郎|佐藤太郎-2

 7行目に佐藤太郎が挿入された場合、ナンバリングが逆転
    |[A] |[B] |[C]     |[D]     |[E]       
 [4]|姓  |名  |社員番号|姓名    |シート名  
 [5]|田中|太郎|     001|田中太郎|田中太郎  
 [6]|佐藤|太郎|     002|佐藤太郎|佐藤太郎-1
 [7]|高橋|太郎|     003|高橋太郎|高橋太郎  
 [8]|佐藤|太郎|     005|佐藤太郎|佐藤太郎-3
 [9]|佐藤|太郎|     004|佐藤太郎|佐藤太郎-2

 田中太郎が追加された場合は、
 A案)田中太郎-1は欠番となり、田中太郎-2となる
 B案)または田中太郎のシート名を書き換える
     |[A] |[B] |[C]     |[D]     |[E]       
 [4] |姓  |名  |社員番号|姓名    |シート名  
 [5] |田中|太郎|     001|田中太郎|田中太郎  
 [6] |佐藤|太郎|     002|佐藤太郎|佐藤太郎-1
 [7] |高橋|太郎|     003|高橋太郎|高橋太郎  
 [8] |佐藤|太郎|     005|佐藤太郎|佐藤太郎-3
 [9] |佐藤|太郎|     004|佐藤太郎|佐藤太郎-2
 [10]|田中|太郎|     006|田中太郎|田中太郎-2

 私ならシート名を社員番号にして、シート生成時に氏名をセルに入力(計算式で氏名を出さない)
 一覧シートの社員番号を使ってHYPERLINK関数でシートへのリンクをつけますね。
(稲葉) 2017/06/27(火) 11:00

 とりあえずたたき台

 一覧シートが以下の構成とします。
 D列はあらかじめ、姓名を入れてください。
 E列は空白にしてください。
    |[A] |[B] |[C]     |[D]     |[E]     
 [4]|姓  |名  |社員番号|氏名    |シート名
 [5]|田中|太郎|     001|田中太郎|        
 [6]|佐藤|太郎|     002|佐藤太郎|        
 [7]|高橋|太郎|     003|高橋太郎|        
 [8]|佐藤|太郎|     004|佐藤太郎|        

     Sub ohten()
        Dim chkWS As Worksheet
        Dim nTBL As Variant
        Dim myName As String
        Dim NameOKNG As String
        Dim Idx   As Long
        Dim cnt   As Long
        Dim IsOverlap As Boolean
        Dim ErrMsg As String
        With Sheets("一覧")
            nTBL = .Range("E5", .Range("A" & Rows.Count).End(xlUp)).Value
            For Idx = 1 To UBound(nTBL, 1)
                myName = nTBL(Idx, 1) & nTBL(Idx, 2)
                If nTBL(Idx, 5) = "" Then
                    IsOverlap = Application.WorksheetFunction.CountIf(.Range("D4:D" & .Range("A" & Rows.Count).End(xlUp).Row), nTBL(Idx, 4)) > 1
                    For cnt = 1 To 10
                        NameOKNG = myName & IIf(cnt = 1 And Not IsOverlap, "", "-" & cnt)
                        On Error Resume Next
                            Set chkWS = Nothing
                            Set chkWS = Sheets(NameOKNG)
                        On Error GoTo 0
                        If chkWS Is Nothing Then
                            Sheets("原紙").Copy after:=Sheets(Sheets.Count)
                            With Sheets(Sheets.Count)
                                .Name = NameOKNG
                                .Range("A1").Value = nTBL(Idx, 3)
                            End With
                            nTBL(Idx, 5) = NameOKNG
                            Exit For
                        ElseIf chkWS.Range("A1").Value = nTBL(Idx, 3) Then
                            ErrMsg = ErrMsg & NameOKNG & ":" & "登録済の社員番号です" & vbNewLine
                            nTBL(Idx, 5) = NameOKNG
                            Exit For
                        Else
                            '何もしない
                        End If
                    Next cnt
                Else
                    On Error Resume Next
                        Set chkWS = Nothing
                        Set chkWS = Sheets(myName)
                    On Error GoTo 0
                    If chkWS Is Nothing Then
                        ErrMsg = ErrMsg & myName & ":" & "シート名が記載されていますが、シートが存在しません。" & vbNewLine
                    ElseIf Sheets(nTBL(Idx, 5)).Range("A1").Value <> nTBL(Idx, 3) Then
                        ErrMsg = ErrMsg & myName & ":" & "シート名と社員番号が一致しません" & vbNewLine
                    End If
                End If
            Next Idx
            .Range("E5", .Range("A" & Rows.Count).End(xlUp)).Value = nTBL
        End With
        If ErrMsg <> "" Then
            MsgBox ErrMsg
        End If
    End Sub
(稲葉) 2017/06/27(火) 14:09


稲葉さんへ

コード表ありがとうございます!確認出来ました!
稲葉さんの企画、素晴らしいです。これで大丈夫です。お願いします。
社員番号は、C列で大丈夫です。
出来れば、二つブック別々したい。
・シート名を社員番号専用
・シート名を氏名専用
面倒くさいのは、分かってます。

すみませんが、追加があります。別のブックでお願いします。
この企画を同じで部屋番号をシート名にする。

    |[A]    |[B]      
 [4]|部屋  |シート名  
 [5]|101号室 |  
 [6]|102号室 |102号室-1
 [7]|102号室 |102号室-2
 [8]|103号室 |

作成したシートコピしてシート名だけ書き換えたいです。セルとは無しです。
方法は同じです。

説明不足ですみません。
急に追加してしまい申し訳がありません。
誠意がまったく感じられませんのは承知しており、本当に迷惑をかけて申し訳がありません。
宜しくお願い致します。
(oh10) 2017/06/27(火) 15:02


 >稲葉さんの企画、素晴らしいです。これで大丈夫です。お願いします。 
 「これ」とはなんですか?
 プログラムコードのことで、不具合がなければそのまま使用してください。

 >出来れば、二つブック別々したい。 
 意味わかりません。
 てにをはをしっかり記載してください。

 私は、追加に応じられません。
 同じ構成であれば、掲載したコードを流用・書き換えし、わからないところだけ質問してください。

 後から仕様の変更・追加オーダーはプログラムを組む人にとって、とても嫌われる行為です。
 今後質問することがあれば、注意してください。
(稲葉) 2017/06/27(火) 17:25

 oh10さんは、外国の人ですか?

 日本人は、こう云う表現はしないですし、何度も使うと尚更、変(奇異)です。
       ↓
 >誠意がまったく感じられませんのは承知しており

 ※使用されている漢字には、ほとんどミスが無いので、日本人の可能性も少しありですが・・

 >    |[A]    |[B]      
 > [4]|部屋  |シート名  
 > [5]|101号室 |  
 > [6]|102号室 |102号室-1
 > [7]|102号室 |102号室-2
 > [8]|103号室 |

 人間の場合は、同姓同名でも実際に二人なのですが、
 部屋は「同じ号室」なら一部屋ですよね?

 なので、当初の例と同じ展開になるとも思えないのですが、
 これも
 (1)原紙があるんですか?
 (2)行削除があるんですか? それとも一回作ったら終わりですか?

(半平太) 2017/06/30(金) 23:03


稲葉様へ

返信遅れて申し訳がありません。今の所は不具合がありません。そのまま使用します。

以後、気を付けます。

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

半平太様へ
返信遅れて申し訳がありません。
ハーフで日本語勉強中です。説明不足ですみません。

「誠意がまったく感じられませんのは承知しており」は、先生から教えてくれました。いいなと思って覚えました。

上と同じく

 >    |[A]    |[B]       |[C]    
 > [4]|部屋  |シート名  |番号  
 > [5]|101号室 |          |1  
 > [6]|102号室 |102号室-1 |2 
 > [7]|102号室 |102号室-2 |3 
 > [8]|103号室 |          |4  

部屋は「同じ号室」なら一部屋ですよね?
 → そうですが、部屋の中に分けてますので、「102号室‐1」、「102号室‐2」となります。

(1)原紙があるんですか?
 → すみません。どういう意味ですか? 部屋を調べてまとめてメモに記録してます。これですか?

(2)行削除があるんですか? それとも一回作ったら終わりですか?
 → あります。部屋の中に分けるの無くなる事もあります。

日本語をおかしい所あると思いますが、宜しくお願いします。
(oh10) 2017/07/03(月) 14:42


 >ハーフで日本語勉強中です。説明不足ですみません。 
 そうでしたか。
 配慮が足りず申し訳ありません。
 あまりにも日本語が自然でしたので、疑いもしませんでした。

(稲葉) 2017/07/03(月) 16:49


 >「誠意がまったく感じられませんのは承知しており」は、
 >先生から教えてくれました。いいなと思って覚えました。 

 ここは日本語教室じゃないですが、oh10さんがいくら良いなと思っても、
 そんなヘンテコリンな日本語表現はありません。
 そんな表現を教える日本語教師も居ません。

 「誠意のない人」なんてのは、嘘を平気でつく様な最低の人間であり
 「俺はそれだ」なんて面と向かって言ったら、張っ倒されますよ。

 「誠意が無いと思われても仕方がないですが」と言う表現はあり得ますが、
 本当はそうじゃないと言うニュアンスが込められています。

 似たような表現で「図々しい」と言うのがありますが、
 その方が、誠意がないよりは、まだ少しマシで、ギリギリあり得る表現です。

 いずれにしても、それらは一回言ったら、もう十分です。
 何回も気軽に使えるような文言じゃないです。

 >>(1)原紙があるんですか? 
 > → すみません。どういう意味ですか? 
 >部屋を調べてまとめてメモに記録してます。これですか? 

 いや、そんなメモの事じゃないです。(私が分かるハズもないですけど)

 >すみませんが、追加があります。別のブックでお願いします。 
 >この企画を同じで部屋番号をシート名にする。 

 そこは、「この企画と同じで」と解釈しました。

 すると、「最初と同じやり方で」を意味すると思ったので
 当然「原紙」が絡むものと解釈しました。

 「原紙」が無いなら単なる新規シートでいいんですか? 
  どうも確信が持てないなぁ。

(半平太) 2017/07/03(月) 19:35


稲葉様へ
いえ、こちらこそ本当にすみませんでした。

半平太様へ
なるほど、1回言ったら十分ですか。
いい勉強になりました。すみません。

シートの事ですね!
原紙あります。原紙をコピーし部屋番号をシート名にしたいです。

よろしくお願い致します。
(oh10) 2017/07/03(月) 20:39


 あれ? 
 番号(C列)が増えていますね?

 それは何に使うんですか?

 ※単に、レイアウトを説明しただけで、
  今回作るマクロには関係が無いのですか?

(半平太) 2017/07/04(火) 08:29


半平太様へ

すみません。
同じ企画だと思い、コピーしました。

無くても大丈夫です。何に使うかって何もないです。

よろしくお願い致します。
(oh10) 2017/07/04(火) 11:25


 >無くても大丈夫です。何に使うかって何もないです。

 1.C列は、何も考慮しません。

 2.部屋を追加するときは、A列だけに「〇×号室」と入れてください。
   つまり、その右のB列は空白としてください。(下図参照)

 <一覧> 初期状態(4室新規追加)  → <一覧> 実行結果図
  行  ___A___  ____B____  __C__         行  ___A___  ____B____  __C__
   4  部屋     シート名   番号           4  部屋     シート名   番号 
   5  101号室                1           5  101号室  101号室       1 
   6  102号室                1           6  102号室  102号室       1 
   7  103号室                1           7  103号室  103号室       1 
   8  104号室                1           8  104号室  104号室       1 

 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 
 <一覧>103号室を追加。マクロ実行前 → <一覧> 実行結果図
  行  ___A___  ____B____  __C__         行  ___A___  ____B____  __C__
   4  部屋     シート名   番号           4  部屋     シート名   番号 
   5  101号室  101号室       1           5  101号室  101号室       1 
   6  102号室  102号室       1           6  102号室  102号室       1 
   7  103号室  103号室       1           7  103号室  103号室-1     1 
   8  103号室                            8  103号室  103号室-2       
   9  104号室  104号室       1           9  104号室  104号室       1 

  ※B8は空白だが、B7は前のままにしておく。

  ※一般論:B列(シート名)は自動的に入るので、手で何かを入力しないでください。

 Sub ohtenRoomNo()
     Dim RmTBL As Range
     Dim ShNo As Long
     Dim Cel As Range
     Dim NewShName As String
     Dim RoomNo

     Application.ScreenUpdating = False
     'B列に無いシートを削除する
     With Sheets("一覧")
         Set RmTBL = .Range("B5", .Range("A" & Rows.Count).End(xlUp))

         For ShNo = Sheets.Count To 1 Step -1
             If Sheets(ShNo).Name <> "一覧" And Sheets(ShNo).Name <> "原紙" Then

                 If Application.CountIf(RmTBL.Columns(2), Sheets(ShNo).Name) = 0 Then  '削除
                     Application.DisplayAlerts = False
                     Sheets(ShNo).Delete
                     Application.DisplayAlerts = True
                 End If
             End If
         Next ShNo
     End With

     '念のために状況確認
     If Application.CountA(RmTBL.Columns(2)) + 2 <> Sheets.Count Then
         MsgBox "存在しないシート名がB列にあり。処理中止"
         Exit Sub
     End If

     For Each Cel In RmTBL.Columns(2).Cells
         NewShName = "Dummy" & Cel.Row

         If Cel.Value = "" Then '空白は原紙挿入
             Sheets("原紙").Copy before:=Sheets("原紙")

             ActiveSheet.Name = NewShName
             Cel.Value = NewShName
         Else
             Sheets(Cel.Value).Move before:=Sheets("原紙")
             Sheets(Cel.Value).Name = NewShName 
         End If
     Next

     '再度、シート名を振りなおす
     With Application
         For Each Cel In RmTBL.Columns(2).Cells
             RoomNo = Cel.Offset(, -1).Value 'A列の号室
             NewShName = "Dummy" & Cel.Row

             If .CountIf(RmTBL.Columns(1), RoomNo) > 1 Then
                 RoomNo = RoomNo & "-" & .CountIf(RmTBL.Columns(1).Resize(Cel.Row - 4), RoomNo)
             End If

             Sheets(NewShName).Name = RoomNo
             Cel.Value = RoomNo
         Next
     End With

     Sheets("一覧").Select
     Application.ScreenUpdating = True
 End Sub

(半平太) 2017/07/04(火) 16:52


半平太様

ありがとうございます。今の所、問題なく確認出来ました。
いい勉強になります。

行と行の間、空白あるとエラーをなりますね。これは、空白無いか確認した方がいいですよね?
(oh10) 2017/07/05(水) 14:43


 >行と行の間、空白あるとエラーをなりますね。これは、空白無いか確認した方がいいですよね?

 行と行の間に空白なんてものがあるんですか。

 それは想定外です。
 行削除するなら、空白にはならないですからねぇ。

 運用で逃げるか、マクロを修正するかですが、
 勉強の為なら、そちらで修正してみてください。

 私のお手伝いはここまでです。

(半平太) 2017/07/05(水) 15:26


コメント返信:

[ 一覧(最新更新順) ]


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