• ベストアンサー

"VBAの繰り返し"についてお尋ねします。VBA初心者です。

"VBAの繰り返し"についてお尋ねします。VBA初心者です。 例えば「A列の最後のセルに何か入れば、その行のB列、C列・・・の一つ上のセルに入っている計算式を繰り返しコピーする」と言うコードを教えていただけたらと思います。A列の最後のセルに何か入ってくれば、その行の一つ上のセルに入っている計算式を繰り返しコピーするというコードです。コード記述の例を教えていただけたらと思います。よろしくお願いします。

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

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

オートフィル機能を用いたサンプルです。 >A列の最後のセルに何か入れば 最後のセルというのを「A1から連続して入力A列の最後」として判定しています。 Sub Main()   '書式コピー元の列宣言   Const DEF_COL1 As String = "B" 'コピー元の先頭列をBとする   Const DEF_COL2 As String = "D" 'コピー元の最終列をDとする  'このマクロブックのシート1を対照とする   Dim l_xlsSheet As Worksheet   Set l_xlsSheet = ThisWorkbook.Worksheets("Sheet1")      'シートのA1   Dim l_rng先頭  As Range   Set l_rng先頭 = l_xlsSheet.Cells(1)      'A1から連続して入力のある最後を取得   Dim l_rng最後  As Range   Set l_rng最後 = l_rng先頭.End(xlDown)      '先頭と最後が違う場合   If Not (l_rng先頭 Is l_rng最後) Then     Dim l_rng1 As Range     '先頭のB~D(実質B1~D1)     Set l_rng1 = l_xlsSheet.Range(l_xlsSheet.Range(DEF_COL1 & l_rng先頭.Row), l_xlsSheet.Range(DEF_COL2 & l_rng先頭.Row))          '入力のあるA列のB~D     Dim l_rng2 As Range     Set l_rng2 = l_xlsSheet.Range(l_xlsSheet.Range(DEF_COL1 & l_rng最後.Row), l_xlsSheet.Range(DEF_COL2 & l_rng最後.Row))          '四角形のエリアを取得     Dim l_rngBox As Range     Set l_rngBox = l_xlsSheet.Range(l_rng1, l_rng2)          'オートフィル機能を利用する(元ネタ:B1~D1/出力先:BOXエリア)     Call l_rng1.AutoFill(l_rngBox)   End If End Sub

huaban
質問者

お礼

すみません。家の事で色々あったもので、PCを開く事も出来ず、お礼が遅くなりました事、お詫び申し上げます。細かく説明していただいてありがとうございましたm(__)mこのソースでやってみたいと思います。ありがとうございました。取り急ぎお礼を申し上げます。

関連するQ&A

  • VBA超初心者です。繰り返しのVBAの使い方

    お読みくださいましてありがとうございます。 超初心者のため、くだらない質問をしてしまっていることをお許しください。 現在シート内で、 B2のセルが空白ではなかったら、 MsgBox (("B2")&("B4") &("B7")) c2のセルが空白ではなかったら、 MsgBox (("C2") & ("C4") & ("C7") ) ...... と、IF~Thenを使ってFの列まで続けて書いています。 これを、空白の列になるまで繰り返すようなプログラムに書き換えることは可能でしょうか。 繰り返しのVBAを使ったことがありません。 どなたか教えていただける方、ご回答をお願いいたします。 End Sub

  • VBA超初心者の参照に関するご質問です

    VBAの超初心者ですが、請求書を作っているところです。 A列はボタンを置くためだけに作った欄外列です。 ある任意行のAセルにボタンを置いています。 ご質問は; そのボタンを押せばアクティブセルが現在どこにあってもそのボタンが置いてある行の直ぐ下に一行挿入される。その挿入行は、例えばNo1行に書式を埋め込んだセル群を置いてあり、その行を参照してコピー・ペーストする という記述はどう書けば良いでしょうか。 アクティブセルを行の特定場所に置けばそこからの相対参照が出来ますが、「アクティブセルがどこにあっても」という記述が良く解りません。

  • vba初心者です。どなたか教えて下さい。

      独学でエクセルVBAを勉強している熟年おじさんです。  色んな参考例を見ながらヒントになる事例を探していますが、中々、似た例が見つからず  困っています。手がかりでも掴めたらと思います。どなたかご指導下さい。   同一BOOK内の2つのシートに同じ行と列に同じ項目内容が入っています。その一枚目のシートの行と列を検索して同じ行と列に該当するデータを、二枚目のシートの同じ行列のセルにコピーするのです。   それだけのことですが、もうひとつの条件は、一枚目のシートには毎日新しいデータが入ってきて  その二枚目シートのデータを日単位で色分けしたいのです。従って、二枚目のシートには、日単位で 空いているセルにデータが蓄積されていき、空白セルが埋め尽くされていきます。   この場合、各シートのデータが同一セルにダブルことは絶対にありません。 一枚目シート                 二枚目シート     行⇒ A B C D E F G          行⇒ A B C D E F G 列 A1 2 6 1 9 23 7 90          列A1 2 6 1 9 23 7 90     B5 11 8 18 34 67 9 34          B5 11 8 18 34 67 9 34    C9                       C9   U9                        U9  ・・・翌日データ追加・・・    P5                        P5        上記はシートイメージですが、行は品名で列は工程名で、中のデータは測定値です。    2枚のシートには全く同じ品名と工程名が入っていて、毎日、入ってくる一枚目シートには    その日のデータしか入ってきません。それを、二枚目のシートの空いたセルにコピーして    いきます。データは毎日追加すのですが、同一セルにダブルことはありません。    以上よろしくお願いします。

  • VBA データを戻すコード

    おはようございます。 データを戻すコードが分からない為質問させていただきます。 やりたいこと 前提として シート2やシート3は A1からC100セルまで文字が書かれています。 シート1に A1からC200セルまで文字が書かれています。 そのセルのAセル以外の範囲(B1:C200)のどれか が変更が有れば(例:B110セルが変更なら110行目をコピーする) その変更された行をコピーし シート2やシート3内をAセルの行(1から100行まで)検索し シート1の110行目のAセルの文字とAセルの文字が当てはまったら (例A30セルに同じ文字が有れば) シート1でコピーしたセル (上の例であれば110行目コピーされたもの) を30行目に貼り付けを行う。 といった処理をしたいのですが 出来ましたらコードを記載していただきたいです。 すいませんが回答よろしくお願いいたします。

  • エクセルVBAでセル選択

    エクセル2000でリストを作成し、VBAで編集しようとしています。 A列に入力されているコードの先頭に「’」をつけて文字列とするための関数をB2のセルからA列のデータが入力されている最後のセルの隣までコピーしたいと思っています。 A列の最終セルを取得するVBAは分かったのですが、その値をB列の選択範囲として使用する方法がわかりません。 エクセルVBAは全くの初心者です。 どなたか教えてください!

  • VBA 計算の繰り返し

    VBAの初心者です。 ご指導お願いいたします。 G列とH列とJ列に入力されている数字をK列に合計が出るように計算式ができているのですが、 その計算式をVBAでK2からKの最後の行まで自動で入力してくれて なおかつ、K○にはG○+H○+J○の合計が入力されるように 計算式を変換する方法を教えてください。 ちなみに計算式は =VALUE(SUBSTITUTE(G2,"万",""))*10000+VALUE(SUBSTITUTE(H2,"円",""))+IF(J2="-",0,VALUE(SUBSTITUTE(J2,"円",""))) です。 ご指導お願いいたします。

  • Excel コピー&貼付の繰り返し

    VBA初心者です。仕事で使いたいのですが、やり方がわからないので教えてください! A1セル 5650590 A16セル 5150950 15行おきに数字が3000行まで入っています。A1セルをコピーし、A2~A15に貼付。 A16セルをコピーしてA17~A31に貼付。 ↑この作業を繰り返したいのですが、VBAの書き方がわかりません。 よろしくお願いいたします。

  • vbaにて並べ替えしたい。

    並べ替えするには? ただいまVBA学習中です。 sheet1に次のような文字列がセルに入力されているとします。 3列で30行あります。   A列 B列 C列 1行 あ  い  う 2行 え  お  か ...以下30行まで続く。 これらを sheet2に A列 あ い う え お か のようにひとつの列へ縦にするにはどのような記述になりますか? 私なりの考え方ですが セルのスタート位置はシート1のA1とします。  シート1にて  ・あ い う と順番に配列に格納  ・セルを左に2つ下に1つ移動   この動作を30回繰り返す(for next 使えばでいいですよね?)  シート2に移動してA1から下方向へ  格納された文字列を入力する。  と、考えてみたものの記述の仕方がわかりません。 力貸してください。   

  • VBAで

    すいません、エクセルVBAで教えてください A B C D 1 2 3 4 2 3 1 4 3 1 2 4 上記のように、AからD列に数値が入っています。 Cが1のときに、その行を削除(上の場合は、2行目)したいのですが、VBAでプログラムでどう記述すればよろしいでしょうか。 フィルタ機能は使いたくないので、IF文がいいのでしょうか。 申し訳ないですがよろしくお願いします

  • エクセル VBA で 教えてください!

    初めて質問させていただきます 初心者で困っています どなたかご教授よろしくお願いします! A列 ____B列______C列 B_____________________ 123 D______________________ 1 D______________________ 2 B______________________456 D______________________ 1 D______________________ 2 D______________________ 3 B______________________789 D______________________ 1 自分はB列にいます(表現が正しいかもわかりませんが) 同じ行で A列の内容が Bだったら隣のCセルの 内容をBセル(自分のいるセル)にコピー Dだったら上の内容(Bの時コピーした内容)をコピーし          行を下へ繰り返し A列のデータが空白まで繰り返す そうして B列を 埋めたいのですが よろしくお願いしたします!