• ベストアンサー

エクセルで、データに番号をふるプログラムを教えてください。

はじめまして、VBA初心者です。よろしくお願いします。 例えば、5,000件でデータに番号をふっていきたいのです。 ふり方なんですが、先頭から1、2・・・20とふり、20の次はまた1に戻って、1,2・・・20とふります。つまり、1から20を、5,000件に繰り返しふっていきたいのですが、どのようなプログラムを書いていいのかわかりません。For~ToとかWhile~とかを組み合わせてもうまくいきませんでした。どなたかアドバイスをお願いいたします。

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

  • ベストアンサー
  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.2

方法はいつくかありますが。 '------------------------------------------- Sub test()    Dim R As Long  Dim StartRow As Long  StartRow = 3  '開始行  For R = 1 To 5000    Cells(R + StartRow - 1, "A").Value = ((R - 1) Mod 20) + 1  Next R End Sub '----------------------------------------- 見れば分かると思いますが、StarRowは開始行です。 1行目から始めたければ、StartRow = 1 3行目から始めたければ、StartRow = 3 のようにします。  

その他の回答 (2)

回答No.3

行番号を返却するワークシート関数自体をセルに書き込む方法もあります。 こうすると『シートの行を削除しても勝手にインデックス番号を張り替えてくれる』 という利点がありますが、逆に勝手に張り替えられては困るのであれば、不向きです。 それと、処理をループさせていないので、非情に高速です。 Sub test()   Dim l_xlsSheet As Excel.Worksheet   Dim l_xlsRange1 As Excel.Range   Dim l_xlsRange2 As Excel.Range   Dim l_xlsRangeArea As Excel.Range      '対象のワークシート   Set l_xlsSheet = Worksheets(1)      '番号を張る先頭のセルを取得   Set l_xlsRange1 = l_xlsSheet.Cells(1, 1)   '番号を張る末尾のセルを取得   Set l_xlsRange2 = l_xlsSheet.Cells(5000, 1)      '番号を張るセルのエリアを取得   Set l_xlsRangeArea = l_xlsSheet.Range(l_xlsRange1, l_xlsRange2)   '関数の埋め込み   l_xlsRange1.FormulaR1C1 = "=MOD(ROW()-1,20) + 1"      '書式のコピーを行わないオートフィル(xlFillValues)を実行する   Call l_xlsRange1.AutoFill(l_xlsRangeArea, XlAutoFillType.xlFillValues)   '書式のコピーをするオートフィルを利用したいのであれば、引数を省略する   'Call l_xlsRange1.AutoFill(l_xlsRangeArea) End Sub

noname#140971
noname#140971
回答No.1

A1~A20 に 1~10 を代入するサンプルコードです。 Private Sub CommandButton1_Click()   Dim I As Integer      For I = 0 To 19     Me.Cells(I + 1, 1) = (I Mod 10) + 1   Next I End Sub

yukakanarina
質問者

補足

Husky2007さん、早々の回答、ありがとうございます。 MOD関数を使うんですね。そこまでは、気がつきませんでした。 また、教えていただきたいんですけど、上の式だて、データ1からデータ20までは番号がふられますが、データ21以降、続けて1から20の番号を繰り返しふるにはどのようにすれば良いのでしょうか? Husky2007さんの表現を使えば、「A1からA5000に1~20を繰り返し代入する」にはどのようにすればよいのでしょうか。よろしくお願いします。

関連するQ&A

専門家に質問してみよう