- ベストアンサー
エクセルで、データに番号をふるプログラムを教えてください。
はじめまして、VBA初心者です。よろしくお願いします。 例えば、5,000件でデータに番号をふっていきたいのです。 ふり方なんですが、先頭から1、2・・・20とふり、20の次はまた1に戻って、1,2・・・20とふります。つまり、1から20を、5,000件に繰り返しふっていきたいのですが、どのようなプログラムを書いていいのかわかりません。For~ToとかWhile~とかを組み合わせてもうまくいきませんでした。どなたかアドバイスをお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
方法はいつくかありますが。 '------------------------------------------- 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)
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
行番号を返却するワークシート関数自体をセルに書き込む方法もあります。 こうすると『シートの行を削除しても勝手にインデックス番号を張り替えてくれる』 という利点がありますが、逆に勝手に張り替えられては困るのであれば、不向きです。 それと、処理をループさせていないので、非情に高速です。 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
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
補足
Husky2007さん、早々の回答、ありがとうございます。 MOD関数を使うんですね。そこまでは、気がつきませんでした。 また、教えていただきたいんですけど、上の式だて、データ1からデータ20までは番号がふられますが、データ21以降、続けて1から20の番号を繰り返しふるにはどのようにすれば良いのでしょうか? Husky2007さんの表現を使えば、「A1からA5000に1~20を繰り返し代入する」にはどのようにすればよいのでしょうか。よろしくお願いします。