[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『空白セルに一つ上の値をコピーするマクロ』(RINA)
マクロについてまだまだ勉強不足のため、ご教示お願い致します。
B11列からO11列まで文字列・名前・日付等が不規則に入っており、J列の最終行までの
空白に一つ上のセルをコピー という処理の為、
ネットより引用した下記マクロを使用し、選択したセルごとの処理を行っています。
Sub CopyCell_Down()
'連続データの中に空白があったとき、上の値をコピーして '下の空白セルを埋める処理 '現在選択中の列のみが対象 Dim i As Long Dim myCol As Long '現在の列位置 Dim startRow As Long '開始行番号 Dim Ccnt As Long '現在の列の行数
myCol = ActiveCell.Column startRow = 11 '★11行目から開始 With ActiveSheet Ccnt = .Columns(myCol).CurrentRegion.Rows.Count For i = startRow To Cells(Rows.Count, 10).End(xlUp).Row If .Cells(i, myCol).Value = "" Then '上のセルの値を入力 .Cells(i, myCol).Value = .Cells(i - 1, myCol).Value End If Next i End With End Sub
@アクティブになっているセル指定からB列からO列まで一回で指定することは 出来ないでしょうか? A一列(C列に)「’5/29」という形式で日付が入っており、マクロを実行すると 5月29日でコピーされます。統一した値でコピーすることは出来ないでしょうか?
現在は一つの列ごと、日付は手作業で、形式を選択しての貼り付け(値のみ)を しておりますが、ファイルが毎日10以上ある為、簡素化できないかと質問させて いただきました。 何卒宜しくお願い致します。
B11からJの最終行 ということなら、ループ無で
Sub test() With Range("b11", Range("j" & Rows.Count).End(xlUp)) On Error Resume Next .SpecialCells(4).Formula = "=r[-1]c" On Error GoTo 0 .Value = .Value End With End Sub (seiya)
早速のご回答有難うございます。
当方説明が悪かったようで、再度質問させてください。
上記試してみたところ、B11からJの最終行を範囲指定してコピー 上手くいきましたが、データはO列まで入っており、K〜O列がコピー 出来ませんでした。 なお、こちらは試してから出てきてしまった質問なのですが、 D・E列は11行目が空行のため、コピーされなくて大丈夫なのですが、 10行目をコピーしてくれたようです。 範囲を解除する、もしくはコピー出来なくするにはどうしたらよいでしょうか?
説明不足で申し訳ございません。 再度お知恵を貸していただきたく、お願いいたします。
(RINA)
> D・E列は11行目が空行のため、コピーされなくて大丈夫なのですが、 >10行目をコピーしてくれたようです。 の意味がよくわからいけど、 こういうことですか?
Sub test() With Range("b12:o" & Range("j" & Rows.Count).End(xlUp).Row) On Error Resume Next .SpecialCells(4).Formula = "=r[-1]c" On Error GoTo 0 .Value = .Value End With End Sub (seiya)
(seiya)様 何度も有難うございます。 やっぱり説明下手でしたね。
上記試してみたところ、 @日付がC11は「’4/27」C12より下は「4月27日」で表示されてしまう。 AD・E列はもともと時間を入れる設定となっているのか、D11・E11は空白、D12・E12より下は 「0:00」と表示されました。
> D・E列は11行目が空行のため、コピーされなくて大丈夫なのですが、 >10行目をコピーしてくれたようです。 この10行目とは表の見出しとなり現在D=開始 E=終了と入っており、一回目のマクロでは この文言がコピーされてしまいました。(データ未記入のセルのため)
最初のマクロでD列・E列はコピー対象としない設定に出来れば・・と思うのですが。。 ここまでお知恵を貸していただけたので、自分でも少し試してみようと思います。 有難うございます。 (RINA)
>@日付がC11は「’4/27」C12より下は「4月27日」で表示されてしまう。 これは、その列のセルの書式設定をC11の設定に合わせる。
こういうこと?
Sub test() With Range("b12:o" & Range("j" & Rows.Count).End(xlUp).Row) On Error Resume Next Intersect(Range("a:c,f:o"), .Cells).SpecialCells(4).Formula = "=r[-1]c" On Error GoTo 0 .Value = .Value End With End Sub (seiya)
(seiya)様
つたない説明でここまで!! 本当に有難うございます。無事やりたいことがスムーズに出来ました!!
自分にはいただいたマクロに Range("D11:E11").Select Range(Selection, Selection.End(xlDown)).Select Selection.ClearContents をつけてデータを削除する方法しか思いつきませんでした。。
何度もお手数をお掛けしてすみませんでした。 今後もこちらのHPで勉強させていただこうと思った次第です。
有難うございました。 (RINA)
私の読解力は非常に乏しいので、詳しい(具体的な)説明が無いとトンチンカンな回答になります。 気にしないでください。 (seiya)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.