Excelの列へ周期的に数字を入れていきたいです


今、C列の3行目からスタートしまして。

3行目から46行目には「1」を入れまして。
47行目から90行目には「2」を入れます。
91行目から134行目には「3」を入れまして。
135行目から178行目には「4」を入れます。



と、このように3行目の1からスタートして、44行目毎に数値が1、プラスされていくように、セルに数値を入れていきたいのです。
これを12万行目辺りまで、うまく入力していきたいのですが。

オートフィルなどでうまくいくかな?と思ったのですが、どうしてもうまくいかず。
お知恵をお貸しいただけますと幸いです。

よろしくお願い致します。

回答の条件
  • 1人10回まで
  • 登録:2018/04/19 21:36:51
  • 終了:2018/04/22 09:51:42

ベストアンサー

id:Z1000S No.3

Z1000S回答回数19ベストアンサー獲得回数162018/04/20 08:03:27

ポイント600pt

式で表示させるなら
=QUOTIENT(ROW()-3,44)+1

VBAで書き込むなら

Public Sub fillNumber()

    Const BEGIN_ROW     As Long = 3
    Const END_ROW       As Long = 120000
    Const FILL_COUNTS   As Long = 44
    Const TARGET_COL    As Long = 3
    Const TARGET_SHEET_NAME As String = "Sheet1"

    Dim n As Long
    Dim i As Long

    n = 1

    With ThisWorkbook.Worksheets(TARGET_SHEET_NAME)
        For i = BEGIN_ROW To END_ROW Step FILL_COUNTS
            .Range(.Cells(i, TARGET_COL), .Cells(i + FILL_COUNTS - 1, TARGET_COL)).Value = n

            n = n + 1
        Next i
    End With

End Sub

式をVBAで埋め込むなら

Sub fillNumber2()

    Const BEGIN_ROW     As Long = 3
    Const END_ROW       As Long = 120000
    Const FILL_COUNTS   As Long = 44
    Const TARGET_COL    As Long = 3
    Const TARGET_SHEET_NAME As String = "Sheet1"

    Dim lEndRow As Long

    lEndRow = ((END_ROW + FILL_COUNTS - 1) \ FILL_COUNTS) * FILL_COUNTS + BEGIN_ROW - 1

    With ThisWorkbook.Worksheets(TARGET_SHEET_NAME)
        .Range(.Cells(BEGIN_ROW, TARGET_COL), .Cells(lEndRow, TARGET_COL)).FormulaR1C1 = "=QUOTIENT(ROW()-3," & CStr(FILL_COUNTS) & ")+1"
    End With

End Sub
id:Z1000S

補足
式で値を表示させた場合、途中に行の挿入または削除を行うと
それ以降の行で隣接するセルとのヒモ付が変わってくる部分が出てきます。
ヒモ付が変わっては困る場合には、式で表示させず、VBAで値を埋め込んで下さい。


行 C列 D列
46 1 あああ
47 2 いいい
48 2 ううう

45行目を削除すると
 ↓
46 1 いいい
47 2 ううう

このように、C列の値は変わりませんが、それ以外の列の値は上にシフトするため、「いいい」と「1」が紐付いていたものが「2」に変わってしまします。

2018/04/20 08:59:10
id:moon-fondu

すべてうまくいきました!
いろいろな方法をご提示いただきまして、ありがとうございます(^O^)

2018/04/22 09:51:11

その他の回答(2件)

id:smithy250 No.1

smithy250回答回数26ベストアンサー獲得回数52018/04/19 21:40:22

ポイント200pt

=INT((ROW()-3)/44)+1

id:moon-fondu

変わりました!ありがとうございます(^^♪

2018/04/19 23:40:33
id:a-kuma3 No.2

a-kuma3回答回数4678ベストアンサー獲得回数19932018/04/19 23:06:28

ポイント200pt

下記のマクロを標準モジュールにはりつけて、insert_number サブルーチンを実行してください。

Sub insert_number()
    target_col = 1      ' A列
    last_row = 120000
    n = 1
    r = 3
    Do Until r > last_row
        For rr = r To r + 43
            Cells(rr, target_col).Value = n
            DoEvents
        Next
        r = r + 44
        n = n + 1
    Loop
End Sub

指定が無かったので、とりあえず A列を対象にしましたが、別の列であれば target_col を調整してください。
12万行あると、まあまあ時間がかかりますので、お茶でも淹れて待っててください。

他1件のコメントを見る
id:moon-fondu

ありがとうございます、A列でもC列でも、うまくいきました!

2018/04/19 23:42:23
id:a-kuma3

あ゙、思いっきり C列って書いてましたね orz

2018/04/20 00:25:35
id:Z1000S No.3

Z1000S回答回数19ベストアンサー獲得回数162018/04/20 08:03:27ここでベストアンサー

ポイント600pt

式で表示させるなら
=QUOTIENT(ROW()-3,44)+1

VBAで書き込むなら

Public Sub fillNumber()

    Const BEGIN_ROW     As Long = 3
    Const END_ROW       As Long = 120000
    Const FILL_COUNTS   As Long = 44
    Const TARGET_COL    As Long = 3
    Const TARGET_SHEET_NAME As String = "Sheet1"

    Dim n As Long
    Dim i As Long

    n = 1

    With ThisWorkbook.Worksheets(TARGET_SHEET_NAME)
        For i = BEGIN_ROW To END_ROW Step FILL_COUNTS
            .Range(.Cells(i, TARGET_COL), .Cells(i + FILL_COUNTS - 1, TARGET_COL)).Value = n

            n = n + 1
        Next i
    End With

End Sub

式をVBAで埋め込むなら

Sub fillNumber2()

    Const BEGIN_ROW     As Long = 3
    Const END_ROW       As Long = 120000
    Const FILL_COUNTS   As Long = 44
    Const TARGET_COL    As Long = 3
    Const TARGET_SHEET_NAME As String = "Sheet1"

    Dim lEndRow As Long

    lEndRow = ((END_ROW + FILL_COUNTS - 1) \ FILL_COUNTS) * FILL_COUNTS + BEGIN_ROW - 1

    With ThisWorkbook.Worksheets(TARGET_SHEET_NAME)
        .Range(.Cells(BEGIN_ROW, TARGET_COL), .Cells(lEndRow, TARGET_COL)).FormulaR1C1 = "=QUOTIENT(ROW()-3," & CStr(FILL_COUNTS) & ")+1"
    End With

End Sub
id:Z1000S

補足
式で値を表示させた場合、途中に行の挿入または削除を行うと
それ以降の行で隣接するセルとのヒモ付が変わってくる部分が出てきます。
ヒモ付が変わっては困る場合には、式で表示させず、VBAで値を埋め込んで下さい。


行 C列 D列
46 1 あああ
47 2 いいい
48 2 ううう

45行目を削除すると
 ↓
46 1 いいい
47 2 ううう

このように、C列の値は変わりませんが、それ以外の列の値は上にシフトするため、「いいい」と「1」が紐付いていたものが「2」に変わってしまします。

2018/04/20 08:59:10
id:moon-fondu

すべてうまくいきました!
いろいろな方法をご提示いただきまして、ありがとうございます(^O^)

2018/04/22 09:51:11

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません