• ベストアンサー

Excel コピーについて

Excel2000を使用しています。 データが入っているシートがあります。 ある1つの列について、下の行を見て、次の文字があるところまで、次々とセルのコピーを行いたいのですが、VBAを教えてください。 次の文字があるところまでは、空白のセルです。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

質問を誤解しているかもしれませんが 仮にA列を対象として、入力されたセルの下に空白セルにがあった場合、入力されたセルの値を空白セルに入れるVBAの例です。 ただし、A列での最終入力行を終点とします。(そうしないと65536行まで埋めてしまうので) Sub test() x = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row For i = 2 To x If Cells(i, "A") = "" Then Cells(i, "A") = Cells(i - 1, "A") End If Next i End Sub

nene99
質問者

お礼

お礼が遅くなり申し訳ありません。 おかげさまでコピーをすることが出来ました! どうもありがとうございました。 また、次回もよろしくお願いいたします。

その他の回答 (4)

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.5

No.1、3です。 > 下記の行が黄色くなっていました。 > For i = 2 To Cells(Rows.Count, Col).End(xlUp).Row すみません、ちょっと原因がわからないです。 その前の、 Const Col As String = "A" '列名を指定 というところを、誤って存在しない列名に書き換えたりしない限り、うまくいくはずだと思うのですが、そういうことはないですか? No.2さんの回答で試すとどうなりますでしょうか。やっていることは同じことなのですが。

nene99
質問者

お礼

お礼が遅くなり申し訳ありません。 なぜか、エラーが出ますが…ANo.2さんの方法で解決しました。 何度もご回答いただき、どうもありがとうございました。 また、次回もよろしくお願いいたします。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

プログラマにあるまじき、あいまい性を含んだ質問。 適当に解釈して Sub test01() d = Range("A65536").End(xlUp).Row ' MsgBox d m = 1 For i = 1 To d If Cells(i, "A") = "" Then Cells(m, "A").Copy Destination:=Cells(i, "A") Else m = i End If Next i End Sub コピーを使っているので、書式(パターン、罫線、フォントなど)も引き継ぎ写します。 最終行の判別に、上記A列で行っては、いいのかな、という心配があります。 隣列B列の方が適当ならば Range("B65536").End(xlUp).Row にしてください。 A列 B列 1 a ー b ー c 2 d ー e ー f ー g 3 h ->ここで終わるか ー i ー j ->ここで終わるか

nene99
質問者

お礼

お礼が遅くなり申し訳ありません。 ANo.2さんの方法で解決しました。 ご回答いただき、どうもありがとうございました。 また、次回もよろしくお願いいたします。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.3

No.1です。 エラーになったとのことですが、VBAの画面が出てきてエラーの行が黄色くなっているかと思います。どの行でエラーが出たか、補足をお願いできますか? 当方では同じようなデータで試してみたところ、エラーにならずにうまくいったのですが…。

nene99
質問者

補足

度々恐れ入ります。 下記の行が黄色くなっていました。 For i = 2 To Cells(Rows.Count, Col).End(xlUp).Row 申し訳ありません。 よろしくお願いいたします。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.1

「次の文字があるところまで、次々とセルのコピーを行いたい」 というのが、どう解釈していいかちょっとよくわからないのですが、 たとえばA列を上から調べていって。空白の上があれば1つ上のセルをコピーする、という意味でしょうか。 そうであれば、以下のVBAでいかがでしょう。"A"のところは実際の列名を入れてください。 Sub Sample()  Dim i As Long  Const Col As String = "A" '列名を指定  For i = 2 To Cells(Rows.Count, Col).End(xlUp).Row   If Cells(i, Col).Value = "" Then    Cells(i, Col).Value = Cells(i - 1, Col).Value   End If  Next End Sub

nene99
質問者

補足

早速にご回答いただき、ありがとうございます。 残念ながら、実行した結果、エラーになってしまいました。 行いたい作業は、例えば、 A列の1行目に入力されたセルがあり、2~4行目は空欄。 5行目にまた入力されたセルがあります。 2~4行目は、1行目に入力されたセルをコピーしたいのです。 空欄行は3行と規則的に空いています。 言葉足らずで申し訳ありません。 よろしくお願いいたします。

関連するQ&A