Home > Excel VBA Macro フロー制御 > FAQ

ある列のセルに値が入っていたら別の列のセルに数式を貼り付けるには?

Question 94.2   Previous Next
計算式の貼り付けについて質問です。
ある列に文字や値など入力されている場合に限り、別のある列に数式を貼り付る時のVBAの組み方について教えて下さい。
右図のようなシートがあった場合に、C列に文字や値が入力されている行だけ、A1、B1の数式を A列、B列の他のセルへ貼り付けたいのです。
下図のように出来ないか、ということです。
C~F列には必ずセットで文字や値が入力されているので、A列・B列に数式を貼り付けたい時に選ぶ条件は、 C~F列のいずれかで大丈夫です。
逆に、途中で何も入力されていない行が出現した時には、そこは飛ばして貼り付けないようにしたいのです。
また、C~F列に文字や値が入力されている行の数はその時々により変動するので、数式を貼り付けをする範囲もこれにあわせて流動的に実行出来ないか、と考えています。
どうぞよろしくお願い致します。
Answer   Copyright (C) 2009.4.3 永井善王
最初に確認しておきますが、「何も入力されていない行」かどうかは、「C~F列には必ずセットで文字や値が入力されている」ということですから、C列のセルが空白であるかどうかを判定するだけでよいですね。

ポイントを整理すると、下記のとおりでよいでしょうか。
 1. データの最終行をとらえる方法
 2. 2行目からデータの最終行まで1行ずつ繰り返して処理する方法
 3. 何も入力されていない行かどうかを判定する方法
 4. A1:B1セルの数式を何も入力されていない行のA列、B列のセルへ貼り付ける方法
ずばりのマクロは下記のようになります。各行に注釈を入れておきましたから参考にしてください。
SSub C列のセルが空白でない行のA列とB列に数式を貼り付ける()
    下端行 = Range("C" & Rows.Count).End(xlUp).Row '下端検出
    For 行 = 2 To 下端行                     '1行目から下端行まで1行ずつ繰り返す
        If Range("C" & 行).Value <> "" Then 'その行のC列のセルの値が空白でなければ
            Range("A1:B1").Copy             'A1:B1セル範囲をコピーする
            Range("A" & 行).PasteSpecial Paste:=xlPasteFormulas
                                    'その行のA列のセルを起点にして数式を貼り付ける
        End If
    Next
End Sub
あなたは、ご自分がやりたいことのポイントをキチンと押さえる力をお持ちのようですから、マクロの組み方のコツを身に付ければ、どんどん伸びる人でしょうね。
本で勉強したくなったときは、私の著書も見てみてください。今なら全国書店の店頭で立ち読みできるでしょうし、各地の図書館で置き始めてくれているようです。
概要はこちらのページでも見れます。

 

Excel VBA Macro

Excel DownLoad