- ベストアンサー
エクセルで別のシートに連番を入力したい
同一ファイルに30~50ほどシートを作っています。 ひとつのシートの中にG7とF32にそれぞれ管理番号を付けているのですが、 (例えばシート1のG7がY0001としたら、F32はY0002、シート2のG7はY0003になります) シート1のG7に値を入力した時点で、用意された他のシートのセルに自動的に 連番を振ることは可能でしょうか? よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
No.1です。 >シートは、原本、1~30、コード一覧、とならんでまして >数字のついたシートにだけ適応されるのがベストなのですが、 >そのようなことは可能でしょうか? Sheet見出し上の配置は一番左側から 原本 1 2 3 ・・・30 と続いて最終Sheetが コード一覧 となっているわけですかね? そしてSheet名 「1」のG7セルに入力すると前回のようなコトを「30」Sheetまでやりたい! と解釈しました。 ただ、質問に >同一ファイルに30~50ほどシートを作っています。 とありますので、 1~30 Sheetと決まっている訳ではないのでしょうか? とりあえずそういうコトを考慮して、Sheet名が数字のみの場合で考えてみました。 今回はSheet見出しの2番目(Sheet名=1)から最終Sheetまでループさせています。 前回のコードは全て削除して、 Sheet名が 1 のSheet見出し上で右クリック → コードの表示 → ・・・中略(前回同様です)・・・として「1」SheetのG7セルにデータを入力してみてください。 (「原本」Sheetは手を加えない判断です) Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Long, k As Long, cnt As Long, str As String, buf As String If Target.Address = "$G$7" And Target <> "" Then For i = 1 To Len(Target) str = Mid(Target, i, 1) If str Like "[0-9]" Then Exit For buf = buf & str Next i cnt = Replace(Target, buf, "") + 1 Range("F32") = buf & Format(cnt, "0000") For k = 3 To Worksheets.Count '★Sheet見出しの3番目のSheet~最終Sheetまで If IsNumeric(Worksheets(k).Name) Then cnt = cnt + 1 With Worksheets(k) .Range("G7") = buf & Format(cnt, "0000") cnt = cnt + 1 .Range("F32") = buf & Format(cnt, "0000") End With End If Next k End If End Sub ※ 今回はSheet見出しの2番目(「1」Sheet)のG7セルデータ変更時にマクロが走るようにしてみました。 今度はどうでしょうか?m(_ _)m
その他の回答 (1)
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! VBAでの一例です。 Sheet1のG7セルは頭の文字は何文字でも対応できるようにしてみました。 尚数字部分は4桁としています。 (YKK0001のような場合も対応可能) 画面左下のSheet1のSheet見出し上で右クリック → コードの表示 → VBE画面のカーソルが点滅しているところに ↓のコードをコピー&ペースト → Sheet1に戻りG7セルにデータを入力してみてください。 Private Sub Worksheet_Change(ByVal Target As Range) 'この行から Dim i As Long, k As Long, cnt As Long, str As String, buf As String If Target.Address = "$G$7" Then For i = 1 To Len(Target) str = Mid(Target, i, 1) If str Like "[0-9]" Then Exit For buf = buf & str Next i cnt = Replace(Target, buf, "") + 1 Range("F32") = buf & Format(cnt, "0000") For k = 2 To Worksheets.Count With Worksheets(k) cnt = cnt + 1 .Range("G7") = buf & Format(cnt, "0000") cnt = cnt + 1 .Range("F32") = buf & Format(cnt, "0000") End With Next k End If End Sub 'この行まで こんな感じではどうでしょうか?m(_ _)m
お礼
おはようございます。 早速のご回答ありがとうございました。 こちらがやりたいと思っていた通りの動作です! ただ少し問題点がありまして(最初の説明不足で申し訳ないです) シートは、原本、1~30、コード一覧、とならんでまして 数字のついたシートにだけ適応されるのがベストなのですが、 そのようなことは可能でしょうか?
お礼
やりたいことにぴったりな動作でした! 素早く的確な回答に感謝いたします。