- ベストアンサー
マクロで値がある列までコピー
マクロの初心者です。 A列 B列 C列 1 使用年 使用月 使用期限 2 2010 5 2010-05 3 空欄 空欄 空欄 4 0 0 - . . . マクロでC2には下の関数が自動で入力されるようにしてるのですが、A列に値がある行にだけ、C2の関数をコピーできるようにしたいのです。 宜しくお願い致します。 C列の関数:=IF(ISBLANK(A2),"",IF(ISERR(DATE(A2,B2,1)),"-",TEXT(DATE(A2,B2,1),"yyyy-mm")))
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
おはようございます。#1,#3のmerlionXXです。 > 回答をいただいたマクロはC列全体にC2の関数をコピーをするのでしょうか? 違いますよ。A列に数値がある行にだけ式をコピーします。
その他の回答 (3)
- merlionXX
- ベストアンサー率48% (1930/4007)
#1です。 もし対象の行数が非常に多く#1のマクロでは時間がかかるようでしたらこういうやりかたもあります。 Sub test02() Dim lr As Long With ActiveSheet lr = .Cells(Rows.Count, "A").End(xlUp).Row .Range("A3:A" & lr).SpecialCells(xlCellTypeConstants, 1).Offset(0, 2).FormulaR1C1 = .Range("C2").FormulaR1C1 End With End Sub
補足
回答ありがとうございます。 明日会社で試そうと思っているのですが、1つ質問があります。 回答をいただいたマクロはC列全体にC2の関数をコピーをするのでしょうか? できたら、A3から最後に値があるセルで止まるマクロを教えて頂けないでしょうか?最後に空欄になることはないそうです。 このデータをACCESSにインポートするのですが、空欄の行もインポートするのでどうにかならないかと思ってますので。 宜しくお願い致します。
- hallo-2007
- ベストアンサー率41% (888/2115)
=IF(ISBLANK(A2),"",IF(ISERR(DATE(A2,B2,1)),"-",TEXT(DATE(A2,B2,1),"yyyy-mm"))) の式は、ご自身で考えられたものでしょうか。 別に、マクロでC列に記述していく必要もない、しっかりした数式です。 上記式が、C2に入っていれば、C2クリックして、マウスをセルの右下に持っておくと、 表示が+になります。 そのまま、マウスでドラックして下方向へ移動すると、同様の式が、下まで記述されていきます。 その式の内容は、A列は、空白であれば、空白という意味がすでに、記述されていますが? ご質問の意味が、違っていれば忘れてください。
補足
回答ありがとうございます。 説明が変でした。 後で、確認をしたら空欄はないそうなので、上の関数でなくても良いようです。 ただ、1つ問題があります。 A列が空欄になったら、C3から下にC2の関数のコピーを制限できるようなマクロが作りたいです。
- merlionXX
- ベストアンサー率48% (1930/4007)
提示された関数では:=IF(ISBLANK(A2),"", と、A列が空白なら非表示になってるのですからA列に値がある行にだけと限定する必要もないとは思いますが、そのようなリクエストですので・・・・。 Sub test01() Dim lr As Long, i As Long With ActiveSheet lr = .Cells(Rows.Count, "A").End(xlUp).Row For i = 3 To lr If .Cells(i, "A").Value <> "" Then .Range("C2").Copy Destination:=.Cells(i, "C") End If Next End With End Sub
お礼
お礼が遅くなってすいませんでした。 想像していた通りに動きました。 ありがとうございました。