• ベストアンサー

【VBA】 通し番号の入力について

こんばんは。 こちらの識者の方々にはいつもお世話になっています。 VBAの件で質問があります。 B列の最終行までA列に001から文字列で連番を振りたい場合、どのような構文になりますでしょうか。 Range("A1:A" & Range("B" & Cells.Rows.Count).End(xlUp).Row).Value = Format(row, "000") は通らなかったのですが、なにかいい構文はありますでしょうか。 データは必ず1000行以下ですので、番号は3桁で大丈夫です。 よろしくお願いいたしますm(_ _)m

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

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.3

こんにちは。お邪魔します。 あれこれ考えていたら新しい回答が付いていました。 既に私が回答しようという理由はなくなったのですが せっかくなのでコードだけあげてみます。 いや、しかし、余りにも多様なので、どのような志向か限定しないと きりがないかも知れませんね。 一応、私自身が普段書き分けている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 ' ' ==================================================

rihitomo
質問者

お礼

いろいろとやり方があるんですね。 いずれの方法でもできました。 自分でも一つ一つ紐解きながら勉強していきたいと思います。

その他の回答 (3)

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

もう一個、アポストロフィなしの文字列で記入: sub macro3()  with range("A1:A" & range("B65536").end(xlUp).row)   .formula = "=TEXT(ROW(A1),""000"")"   .numberformat = "@"   .value = .value  end with end sub #言わずもがなですが 既に寄せられている回答の幾つかのマクロでやってるように、「文字列で記入」を止めてふつーに数値で記入し、表示形式で001と表示させた方がはるかに簡単です。

rihitomo
質問者

お礼

具体例を2つも提示していただいてありがとうございます。 とても参考になりました。

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

こんばんは。 >文字列で連番を振りたい 一応ご相談に忠実に。まぁ趣味に応じて手口は様々ですが。 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)
回答No.1

こんばんは! 色々やり方はあると思いますが、 一例です。 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

関連するQ&A