まずは、以下をご覧ください。
セルC2に入力されている数式をVBAで最下行までコピーするコードです。
関数を最下行までコピーするコード
関数を下までコピーするときって、関数をコピーして、値貼り付けまでしませんか? わたしはよくサイズ軽くするために値貼り付けまでするのですが、VBAでも再現しています
Sub 関数を下までコピーする() ' 描画開始 Application.ScreenUpdating = False Dim ws As Worksheet Dim endRow As Long ' シート名の指定 Set ws = ThisWorkbook.Worksheets("Sheet1") ' 最下行の取得 endRow = ws.Cells(Rows.Count, 2).End(xlUp).Row ' 関数の入力 ws.Range("C2:C" & endRow).Formula = "=LEFT(B2,FIND("" "",B2)-1)" ' 値貼り付け ws.Range("C2:C" & endRow).Value = ws.Range("C2:C" & endRow).Value ' 描画再開 Application.ScreenUpdating = True End Sub
コードの解説
最下行の取得
最下行の取得は一番下までデータが入っていると思わしき列の番号を選択します。 ここでは、B列の氏名は必ず入っているという前提で、B列=2(列目)を指定しています。
関数の入力
メインですよね!ポイントが二つあります! 1.”C2:C”と記載がある部分はC2からCの最後の行までデータを埋めるという意味合いなので、任意で範囲指定しましょう! 2.ダブルクォーテーションは一つ余計につけましょう!
値貼り付け
VBAの値貼り付けって、いくつか方法があるのですが、わたしが一番簡単だと思う方法を記載しています! これは、関数を入力した範囲の値(Value)を全く同じ範囲に値(Value)で貼り付けているというコードです。 このやり方が一番簡単で、速いのでお勧めです!!
さいごに
実行した結果、C3~C11まで数式を埋めることができました!簡単!
重要なポイントを押さえつつ使ってみてください!
ではまた!
初めまして。(VBA初心者なので説明が通じない場合はすみません)
上記のパターンで今悩んでいる事がこちらの内容で解決出来そうなのですが、
C列だけで無くD列とE列にも異なる数式を入れなければならず、どうしたものか…と悩んでおります。
単純に
‘ 関数の入力
ws.Range(“C2:C” & endRow).Formula = “=LEFT(B2,FIND(“” ””,B2)-1)”
‘ 値貼り付け
ws.Range(“C2:C” & endRow).Value = ws.Range(“C2:C” & endRow).Value
の行をセルの位置と数式を変更するだけで大丈夫でしょうか?
(それともDim wsと同じく他のDim を作成したほうが良いのでしょうか?)
こちらは、C/D/E列に別々の数式を入力している内容を一番下までコピーするという内容でしょうか?
Yesであれば、それぞれの列で同じ処理をさせれば良いだけです。
今後動画アップさせていただきます。上記説明では足りないかと思いますので、動画にて別途ご確認ください。
すみません。上記の行を2回コピーし、セルの位置と関数を変更すると記入したつもりがコピーの言葉が抜けておりました。