[[20070118130418]] 『空セルへのデータコピーについて』(はり) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『空セルへのデータコピーについて』(はり)
 いつもお世話になっています。

 1列に数値データが入っています
 ところどころ歯抜けになっているセルがあり、そこにはすぐ上のデータをコピーする
 といった作業を手作業でやってます。
 これを一つ一つ手作業でしなくてもいいようにする方法ってないでしょうか?

 123
 123
   ←ココに上の123を入れたい
 456
   ←ココに上の456を入れたい
 789

 他の処理もマクロ化する予定があり、できれば上記の処理もマクロの一部にできればイチバンなのですが・・・

 何かいいアイデアをご教授ください。


 1) 範囲を選択
 2) Ctrl + G -> [セルの選択] -> 空白 にチェック
 3) アクティブなセルに
    =その一行上のセルアドレス 例: =A2
 4) Ctrl + Enter で確定
 5) 範囲をそのままコピー -> 形式を選択して貼り付け -> 値

 (seiya)

 Sub test()
    For i = 2 To Worksheets("sheet1").Range("A65536").End(xlUp).Row
        If Sheets("sheet1").Cells(i, 1).Value = "" Then
            Sheets("sheet1").Cells(i, 1).Value = Sheets("sheet1").Cells(i - 1, 1).Value
        End If
    Next i
 End Sub

 マクロならこんな感じ?
 二つ以上連続で空白があっても全部直前の値を書き込みます。
 (sato)


 こういう感じでは?

 Sub test()
 On Error Resume Next
 With Selection.SpecialCells(xlCellTypeBlanks)
     .FormulaR1C1="=r[-1]c"
     .Value = .Value
 End with
 End Sub
 (seiya)

 みなさんありがとう。
 手操作で処理する方法を試してみて、なるほど〜です。
 そして、マクロ化バージョンもお二人のをどちらも試してみたところ、なるほど〜です。
 ほんとにありがとうございます。

 実は、この作業をしたいシートは集計表のようなもので、L列まであり各列には文字列データや数値データが入っています。
 今回空欄に上のセルのデータをコピーしたいのは、K列のみで教えていただいたマクロに列指定(Columns("k:K").Select)を追加するとうまくいきません。
 K列のみ空欄セルの上セルコピー(これは数値データです)する場合どういうふうにするとうまくいくのかお教えください。

 Cells(i, 1)などにある1は,1列目つまり,A列を示しています。
 1の代わりに,K列であればK列を意味する11に変えればOKではないでしょうか。

 For i = 2 To Worksheets("Sheet1").cells(rows.count,11).End(xlUp).Row
     のように 

 (夕焼)

 夕焼さん、ありがとうございます。

 1のところをすべて変えればいいのでしょうか?やってみるのですがなぜかうまくいきません。
 ところで、sheet1とありますが、これはシートの名前を特定するものなのですか?
 今回使用するシートは複数あり、シート名も毎回異なります。

 seiyaさんの案でやってみた場合、sub test()の次行に(Columns("k:K").Select)と入れることでK列が処理対象となるようにしているつもりなのですが、うまくいきません。
 また、 .FormulaR1C1="=r[-1]c"  で、R1C1でA列を処理対象にしているのでr1c11とすればいいのかなと考えて実行してみたけれどこれまた×でした。


 下記でどうでしょうか。
 自分が扱っているシートに対して処理されます。
  下記の場合は 11が記載されていますので,K列が対象です。
 11を他の列(数値)に変えれば他の列の処理が可能です。(夕焼)

 Sub test()

    For i = 2 To Cells(Rows.Count, 11).End(xlUp).Row

        If Cells(i, 11).Value = "" Then
           Cells(i, 11).Value = Cells(i - 1, 11).Value
        End If
    Next i
 End Sub


 seiyaさんのでWithで括ってあるのをSelectionだけにすれば良いようですね。
こんな感じでも良いかも。
 
Sub Test1()
Range(Range("K1"), Range("K65536").End(xlUp)).Select
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.FormulaR1C1 = "=R[-1]C"
End Sub
 
Sub Test()
Range(Range("K1"), Range("K65536").End(xlUp)).SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
End Sub

 追加訂正
>seiyaさんのでWithで括ってあるのをSelectionだけにすれば良いようですね。
 これは間違いでした・・・_/ ̄|○ il||li
 
Sub Test()
With Range(Range("K1"), Range("K65536").End(xlUp))
    .SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
    .Value = .Value
End With
End Sub
 上で書いたのは値に直してませんでした。

 (川野鮎太郎)

 せっかく回答くださっていたのに返事がおそくなりました。
 ごめんなさい。

 夕焼けさん、川野鮎太郎さんが教えてくださった方法でやってみたところ
 いずれもエラーになります。
 先頭セルは「0」が、以降の空欄は「#REF」となります。

 扱っている帳票の説明が不十分だったかもしれません。すいません。
 帳票は、1〜3コあり複数あるときは下につながっています。
 また表と表の間は2〜3行の空白行があります。
 なので、最初にseiyaさんに教えていただいた手動でやる場合は、
 先頭の次のセルをアクティブにして「Ctrl+R」で各空白セルに
 「=R[-1]C」を入れ、表と表の間の空白行にかかるセルは手動で
 削除しております。
 手動しかないのでしょうか?


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.