VBAでセルの値を11行おきに増やす方法

このQ&Aのポイント
  • VBAを使用してセルの値を最終行まで、11行おきに1ずつ増やす方法を教えてください。
  • 現在のセルは1800行あり、手動でこの作業を続けることは大変です。
  • 以下のVBAコードを使用することで、自動的にセルの値を増やすことができます。
回答を見る
  • ベストアンサー

VBA 11行おきにセルの値を1づつ増やす

セルの値を最終行まで、11行おきに1増やしていく方法をお教えください。 現在1800行あります。 下記の構文を延々と続けるのは、気が遠くなります。 何卒よろしくお願いします。 Private Sub CommandButton1_Click() With Worksheets("○○○”) .Range("A1").Value = "1" .Range("A12").Value = .Range("A1").Value + 1 .Range("A23").Value = .Range("A12").Value + 1 .Range("A34").Value = .Range("A23").Value + 1 .Range("A45").Value = .Range("A34").Value + 1 ・・・・・・・ ・・・・・・・・ End With End Sub

  • 1211M
  • お礼率54% (90/165)

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

  • ベストアンサー
回答No.1

Private Sub CommandButton1_Click() Dim i as Integer For i = 1 to 1800 Step 11 Worksheets("○○○").Cells(i, 1).value = (i - 1) * 11 + 1 Next i End Sub

1211M
質問者

お礼

nan93850673 さん お正月なのに 早速の回答ありがとうございました。 思い通りにできました。 また、困ったことがありましたら、よろしくお願いします。

その他の回答 (4)

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.5

繰り返しの手法で処理できます。 For i = 1 To 1800 Step 11 ' ここにセルへの代入式を書く Next i 代入の数式は以下のような方法で良いでしょう。 n = n + 1 ' n の初期値を 0 としたとき Cells(i, 1) = n 代案( A1セルへ予め 1 を代入しておいて i の初期値を 12 にします) Cells(i, 1) = Cells(i - 11, 1) + 1 ループには次のような Do ループもありますので好みの方法で対処してください。 Do While [条件式] [代入数式] Loop または Do Untile [条件式] [代入数式] Loop VBAの入門書で学習しながら順次覚える方法で良いと思います。

1211M
質問者

お礼

bunjii さん 早速の回答ありがとうございます。 勉強します。

noname#232800
noname#232800
回答No.4

VBAでも、subで定義すると値を返さないけど、function で値を返す関数を書いて、cellsでアドレス指定で・・・・って考えたけど。 イベントドリブンだよ。(って出来てないけど)

1211M
質問者

お礼

HohoPapa さん 早速の回答ありがとうございます。 勉強します。

  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.3

VBAによる解を期待しているだろうことから 期待と異なるものと思いますが別解を。 A1に1を埋め A12に2を埋め A1からA22を選択(ハイライト)し、 オートフィルの機能を使い フィルハンドルを下方向に必要数ドラッグします。

1211M
質問者

お礼

HohoPapa さん 早速の回答ありがとうございます。 勉強します。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

For NextのStepを勉強すること。 コマンドボタンなど使う前に勉強するべき。 自分が作って、実行して終わるようなものに、なぜコマンドボタンを使うのか。他の例の引き写しか? ーー セルを指定するVBAコードの、Cells(i,"A")のiに、順次に11を加えたセルを指定し、コードの前行のセルの値に+1したものを、代入すれば仕舞だろう。 VBAの本やVBAの指導者について、系統だった勉強をすること。

1211M
質問者

お礼

imogasi さん 早速の回答ありがとうございます。 Cells(i,"A")が解らなかったもので、勉強します。

関連するQ&A

  • マクロ セル指定について

    Sheet(”体温”)のA3に フォームのTextBox1の内容をボタンを押したら 挿入させたいです。! 下の記述では上手くいきません 教えて下さい! Private Sub CommandButton1_Click() With Worksheets("体温") .Range(A3).Value = TextBox1.Value End With End Sub お願いします!

  • VBA controlsouce の使い方

    エクセル2002使用です。 個人情報リストのようなものを作ってます。 ユーザーフォームにTextBox1とCommandButton1をつくり、そこにセルに既に入力されているデーターを入力したいのですが、うまくいきません。 Private Sub CommandButton1_Click() UserForm1.TextBox1.ControlSource = _ Worksheets(1).Range("B5").Value End Sub どこか悪いのか全くわからず困ってます。 よろしくお願いします。

  • VBAのセル空白探しは??????多々仕様なども含めて迷っている部分があるので助けてください

    VBAで入力チェッカーを作っているのですが、仕様の部分でなやんでいます。 Private Sub CommandButton1_Click() Dim i As Long lastRow = Range("A65536").End(xlUp).Row For i = 10 To lastRow If Range("A" & i).Value = "" Then Range("A" & i).Value = ??? Exit For End If Next i End Sub USERがあるセルにデータを入力するとA列に5行ごと自動に値が入ります。 しかし、入力忘れで5行飛ばしたりはたまた10行空白が出来る場合があります。 その際のチェッカーの役割なのですが。。。 したから行を見ていってA10~最終行までの間でどこか空白があったら下から空白を探し空白箇所から5個上のセルの値を基本的にコピーをしていれる。 もし5個上のセルにも無かったら10個上みたいにやりたいのですがどうしたらよいでしょうか?

  • コマンドボタンを押したときシート2のa行の空白セルを選択したいのですが

    コマンドボタンを押したときシート2のa行の空白セルを選択したいのですが以下のやり方では”RangeクラスのSelectメソッドが失敗しました。”のエラーが出てしまいます。どこがいけないのか教えてください。 Private Sub CommandButton1_Click() Worksheets("sheet2").Activate Range("a65536").End(xlUp).Offset(1).Select End Sub ちなみに、コマンドボタンはシート1にあります。 よろしくお願いします。

  • 複数のコマンドボタン(VBAで)を一つにまとめたい。

    複数のコマンドボタン(VBAで)を一つにまとめたい。 Private Sub CommandButton1_Click() Application.Goto Reference:=Range("A7"), Scroll:=True End Sub Private Sub CommandButton2_Click() Application.Goto Reference:=Range("A29"), Scroll:=True End Sub Private Sub CommandButton3_Click() Application.Goto Reference:=Range("A51"), Scroll:=True End Sub Private Sub CommandButton4_Click() Application.Goto Reference:=Range("A73"), Scroll:=True End Sub Private Sub CommandButton5_Click() Application.Goto Reference:=Range("A95"), Scroll:=True End Sub Private Sub CommandButton6_Click() Application.Goto Reference:=Range("A117"), Scroll:=True End Sub Private Sub CommandButton7_Click() Application.Goto Reference:=Range("A139"), Scroll:=True End Sub Private Sub CommandButton8_Click() Application.Goto Reference:=Range("A161"), Scroll:=True End Sub Private Sub CommandButton9_Click() Application.Goto Reference:=Range("A183"), Scroll:=True End Sub Private Sub CommandButton10_Click() Application.Goto Reference:=Range("A205"), Scroll:=True End Sub Private Sub CommandButton11_Click() Application.Goto Reference:=Range("A227"), Scroll:=True End Sub 上記のように複数のコマンドボタンを関数化して一つにすることは出来るでしょうか?

  • VBAで最終行の取得について

    UserFormのConboBoxで「○○」を選んで、 UserFormのTextBoxで『あいう』と入力すると、ワークシートに A      B 1 ○○   ×× 2 あいう と表示され、 UserFormのConboBoxで「××」を選んで、 UserFormのTextBoxで『アイウ』と入力すると A      B 1 ○○   ×× 2 あいう  アイウ 3 :    : と表示されるようにしたいと思います。 以下のプログラムまではできています。 ********************************************* Private Sub UserForm_Initialize()  Dim lasClm As Integer, i As Integer  lasClm = Sheet1.Range("A1").End(xlToRight).Column   For i = 1 To lasClm   ComboBox1.AddItem Sheet1.Cells(1, i).Value   Next i End Sub ********************************************* Private Sub CommandButton1_Click()  Select Case ComboBox1.Text  Case Sheet1.Cells(1, 1).Value '「○○」が選択  Sheet1.Cells(2, 1).Value = TextBox1.Text ・・・(1)  Case Sheet1.Cells(1, 2).Value '「××」が選択  Sheet1.Cells(2, 2).Value = TextBox1.Text ・・・(2)  End Select  UserForm1.Hide End Sub ********************************************** 今は(1)、(2)のように直接セルを指定しているのですが、 この部分を各列(A列、B列)の最終行の値を取得して、 最終行+1のセルに順次TextBoxに入力された値を代入していきたいのですが、 どのようにしたらよいのでしょうか。 しかし、A列とB列は同じように値が増えていくとは限りません。 例)    A     B 1 ○○   ×× 2 あいう  アイウ 3 かきく 4 さしす となる場合もあるので、A列とB列それぞれの最終行の値を取得したいと思っています。

  • Excelシート上のボタンでセルの背景色を設定する

    シート上のボタンを押したときにセルの値と背景色を設定したいのですが、エラーになります。 原因・解決策が分かる方お願いいたします。 Private Sub CommandButton1_Click() With Range("A1") .Value = "Yellow" .Interior.ColorIndex = 6 '実行時エラー1004:InteriorクラスのColorIndexプロパティを設定できません。 End With End Sub 環境 Excel97/Win98

  • VBA スタック容量が足りない・・・

    こんばんわ! エクセルのVBAを使った管理システムを作ろうと思うのですが、色々考えて下記のような状態にしてみたのですが、ユーザーフォームをモードレスにするとスタック容量が足りなくなります。 Sub aaa_date() If Range("a1") = 1 Then bbb_date.Show ElseIf Range("a1") = 2 Then ccc_date.Show ElseIf Range("a1") = 3 Then ddd_date.Show End If Call aaa_date End Sub bbb_date(ユーザーフォーム)に↓ Private Sub CommandButton1_Click() Range("a1") = 2 Unload Me End Sub Private Sub CommandButton2_Click() Range("a1") = 3 Unload Me End Sub ccc_date(ユーザーフォーム)に↓ Private Sub CommandButton1_Click() Range("a1") = 1 Unload Me End Sub Private Sub CommandButton2_Click() Range("a1") = 3 Unload Me End Sub ddd_date(ユーザーフォーム)に↓ Private Sub CommandButton1_Click() Range("a1") = 1 Unload Me End Sub Private Sub CommandButton2_Click() Range("a1") = 2 Unload Me End Sub ※bbb_dateとccc_dateとddd_dateはそれぞれにあるボタンを押すとA7セルの値を変更するようにして、aaa_dateでどのフォームを表示するのかを選択しています。 ※実際にはもっと沢山ユーザーフォームがあります。 上記の状態では動作するのですが、エクセルの表に値を入力したいので、bbb_dateとccc_datとddd_datをvbModeless(モードレス状態)にすると、スタック容量が足りませんと出ます。 別のやり方でもよいですので、ユーザーフォームを切り替える良い方法があったらお願いします。

  • VBA 最終行の値を取得

    Excel2007です。 印刷用シートに、用紙を4分割して、4件分のカードを印刷できるようにしてあります。 A1, F1, A10, F10の入力セルに、それぞれデータシートのNo.を入れると、vlookupで連動されるようになっています。 No.の入力セルは、4ずつ加算されるようにVBAを書きました。 さらに、データシートの最終No.を超えた場合に、メッセージボックスを出したいのですが、うまくいきません。 例えば、データシートが200件まで入力されているとして、印刷シートのNo.に「201」を入力すると、「これ以上データがありません」というメッセージを表示させたいです。 Sub 次データ() Dim 最終行 As Long, 最終値 As Long Dim my As String 最終行 = Worksheets("データ").Range("A1048576").End(xlUp).Row 最終値 = Cells(最終行, 1) Worksheets("印刷用").Select Range("A1").Value = Range("A1") + 4 Range("F1").Value = Range("F1") + 4 Range("A10").Value = Range("A10") + 4 Range("F10").Value = Range("F10") + 4 If Range("A1") > 最終値 Or Range("F1") > 最終値 Or Range("A10") > 最終値 Or Range("F10") > 最終値 Then my = MsgBox("これ以上データがありません", vbOKOnly + vbExclamation, "注意!") End If End Sub このように書いてみましたが、これだと「次データ」を実行する度にメッセージボックスが出てしまいます。 どこを直せばいいのでしょうか。 分かりづらい文章ですみません。 なにぶん、VBAをかじりかけたばかりで、ド素人ですのでよろしくお願いします。

  • 条件判定について

    下記のようなコードを作成しましたが、チェックボックスがオンでもオフでもTextBox4.Valueの値が返ります。どこがいけないでしょうか。 Private Sub CommandButton2_Click() If CheckBox1.Visible = True Then Worksheets("sheet1").Range("a1") = TextBox4.Value Else Worksheets("sheet1").Range("a1") = TextBox3.Value End If End Sub

専門家に質問してみよう