プロが教えるわが家の防犯対策術!

こんばんは。
こちらの識者の方々にはいつもお世話になっています。
VBAの件で質問があります。

B列の最終行までA列に001から文字列で連番を振りたい場合、どのような構文になりますでしょうか。

Range("A1:A" & Range("B" & Cells.Rows.Count).End(xlUp).Row).Value = Format(row, "000")
は通らなかったのですが、なにかいい構文はありますでしょうか。

データは必ず1000行以下ですので、番号は3桁で大丈夫です。
よろしくお願いいたしますm(_ _)m

A 回答 (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
' ' ==================================================
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/04/27 00:00

もう一個、アポストロフィなしの文字列で記入:


sub macro3()
 with range("A1:A" & range("B65536").end(xlUp).row)
  .formula = "=TEXT(ROW(A1),""000"")"
  .numberformat = "@"
  .value = .value
 end with
end sub




#言わずもがなですが
既に寄せられている回答の幾つかのマクロでやってるように、「文字列で記入」を止めてふつーに数値で記入し、表示形式で001と表示させた方がはるかに簡単です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/04/26 23:59

こんばんは。



>文字列で連番を振りたい

一応ご相談に忠実に。まぁ趣味に応じて手口は様々ですが。

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行以内程度ならそんなに目に見えて遅いことは無いだろうと思います。
    • good
    • 0

こんばんは!


色々やり方はあると思いますが、
一例です。

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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています