- ベストアンサー
【VBA】 通し番号の入力について
こんばんは。 こちらの識者の方々にはいつもお世話になっています。 VBAの件で質問があります。 B列の最終行までA列に001から文字列で連番を振りたい場合、どのような構文になりますでしょうか。 Range("A1:A" & Range("B" & Cells.Rows.Count).End(xlUp).Row).Value = Format(row, "000") は通らなかったのですが、なにかいい構文はありますでしょうか。 データは必ず1000行以下ですので、番号は3桁で大丈夫です。 よろしくお願いいたしますm(_ _)m
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。お邪魔します。 あれこれ考えていたら新しい回答が付いていました。 既に私が回答しようという理由はなくなったのですが せっかくなのでコードだけあげてみます。 いや、しかし、余りにも多様なので、どのような志向か限定しないと きりがないかも知れませんね。 一応、私自身が普段書き分けている4つの志向で4タイプです。 ' ' ================================================== ' ' コンサバティブ版 Sub Re7820341c() Dim nRowOffset As Long Dim nBtm As Long Dim i As Long ' ' 項目タイトルが1行の(つまり2行目からナンバリングする)場合 nRowOffset = 1 nBtm = Range("B" & Cells.Rows.Count).End(xlUp).Row For i = 1 To nBtm - nRowOffset Cells(i + nRowOffset, 1) = Format(i, "'000") Next i End Sub ' ' -------------------------------------------------- ' ' Excel一般機能活用版(値は数値、表示は"000") Sub Re7820341a() Cells(1) = 1 With Range("A1:A" & Range("B" & Cells.Rows.Count).End(xlUp).Row) .DataSeries Rowcol:=xlColumns, Type:=xlLinear, Step:=1, Trend:=False .NumberFormat = "000" End With End Sub ' ' -------------------------------------------------- ' ' 配列(高速仕様)版 Sub Re7820341j() Dim nBtm As Long Dim nTop As Long Dim i As Long Columns(1).Clear ' ' 3行目からナンバリングする場合 nTop = 3 nBtm = Range("B" & Cells.Rows.Count).End(xlUp).Row ReDim mtxPrint(nTop To nBtm, 1 To 1) For i = nTop To nBtm mtxPrint(i, 1) = Format(i - nTop + 1, "'000") Next i Range("A" & nTop & ":A" & nBtm).Value = mtxPrint End Sub ' ' -------------------------------------------------- ' ' 短い記述のマニアック版 Sub Re7820341jj() Dim sRef As String sRef = "A1:A" & Range("B" & Cells.Rows.Count).End(xlUp).Row Range(sRef).Value = Application.Evaluate("transpose(text(transpose(row(" & sRef & ")),""'000""))") End Sub ' ' ==================================================
その他の回答 (3)
- keithin
- ベストアンサー率66% (5278/7941)
もう一個、アポストロフィなしの文字列で記入: sub macro3() with range("A1:A" & range("B65536").end(xlUp).row) .formula = "=TEXT(ROW(A1),""000"")" .numberformat = "@" .value = .value end with end sub #言わずもがなですが 既に寄せられている回答の幾つかのマクロでやってるように、「文字列で記入」を止めてふつーに数値で記入し、表示形式で001と表示させた方がはるかに簡単です。
お礼
具体例を2つも提示していただいてありがとうございます。 とても参考になりました。
- keithin
- ベストアンサー率66% (5278/7941)
こんばんは。 >文字列で連番を振りたい 一応ご相談に忠実に。まぁ趣味に応じて手口は様々ですが。 sub macro1() range("A:A").clearcontents range("A1").characters.text = "001" range("A1").autofill range("A1:A" & range("B65536").end(xlup).row), xlfillseries end sub もちろん sub macro2() dim r as long for r = 1 to range("B65536").end(xlup).row cells(r, "A") = format(r, "'000") next r end sub とかしても、1000行以内程度ならそんなに目に見えて遅いことは無いだろうと思います。
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 色々やり方はあると思いますが、 一例です。 Sub 連番() Dim i As Long i = Cells(Rows.Count, 2).End(xlUp).Row With Range(Cells(1, 1), Cells(i, 1)) .Formula = "=row()" .NumberFormatLocal = "000" End With End Sub ※ A列には数式が入っています。 実データにしたい場合は Sub 連番2() Dim i As Long For i = 1 To Cells(Rows.Count, 2).End(xlUp).Row With Cells(i, 1) .Value = Cells(i, 1).Row .NumberFormatLocal = "000" End With Next i End Sub といった感じではどうでしょうか?m(_ _)m
お礼
いろいろとやり方があるんですね。 いずれの方法でもできました。 自分でも一つ一つ紐解きながら勉強していきたいと思います。