• ベストアンサー

VBAを使用し、まとまりごとに値をコピーしたい

VBA初心者です。 色々と調べてはいるのですが、まとまりごとにコピーをするコードが 分かりません。教えて頂けると助かります。   A   B     1 1   ワード   2 空欄 空欄     3 空欄 空欄   ←(A1:B1)の内容を(A3:B3)までコピーしたいです 4 空欄 エクセル ←ここから別のまとまりです 5 空欄 空欄    (A5:B5)の内容を(A6:B6)にコピーしたいです 6 30  アクセス ←ここから別のまとまりです 7 空欄 空欄    (A6:B6)の内容を(A7:B7)にコピーしたいです 8 5  パワーポイント ←ここから別のまとまりです   ・   ・       ←続きます   ・        この繰り返しを最後の列まで行いたいです ・必ずA列・B列両方に値や文字が入っているわけではありません  A列・B列どちらかに値や文字があれば、まとまりが変わります ・追加・削除を行うので、1つのまとまりの行数は決まっていません ・EXCEL2000を使用しています 条件・繰り返しステートメントを使用して出来ますか?         

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

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

行ごとコピーするサンプルです。 Sub Test() i = 1 ' 先頭行は1行目で Do While i <= 100 'ここでは100が最終行とする  With ActiveSheet   If .Cells(i, 1).Value <> "" Or .Cells(i, 2).Value <> "" Then     .Cells(i, 1).EntireRow.Copy   Else    If Application.CutCopyMode Then .Cells(i, 1).PasteSpecial   End If    i = i + 1  End With Loop Application.CutCopyMode = False End Sub

Rhyme3nt
質問者

お礼

出来ました! papayukaさん、ありがとうございます。 詳しいコードの意味は勉強していきます。 また、分からない時は教えて頂けると助かります。 本当にありがとうございました。

その他の回答 (2)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

>まとまりごとにコピーをするコードが分かりません。 コードではなく、自分のVBAスキルに見合った処理方法が思いつけないということだと思います。 この処理は「A列、B列がともに空白なら、1行上のセルの値を代入する」という言い方もできますね。そう考える方が簡単だと思います これをなるべく簡単なコードで書くと以下のようになります Sub Macro1() Dim idx As Integer  For idx = 2 To Range("A65536").End(xlUp).Row   If Cells(idx, "A").Value = "" And Cells(idx, "B").Value = "" Then    Cells(idx, "A").Value = Cells(idx - 1, "A").Value    Cells(idx, "B").Value = Cells(idx - 1, "B").Value   End If  Next idx End Sub 「どうすれば簡単な処理にできるか」は、やはりトレーニング(数をこなす)ことが必要ですね。がんばってください。

Rhyme3nt
質問者

お礼

出来ました! zap35さん、ありがとうございます。 まだ自分で考えて組み立てる能力がない状態で 質問してしまいすみません。 みなさんのように色々と考えられるように これから勉強していきます。 色々とありがとうございました。

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

プログラムロジックを組み立てる訓練が不足しているので、この質問になる。昔は、バッチ作業プログラムが多く、コントロールブレークというのを教えられたがそれが最近、説明を見かけない。 (1)毎行データにつき、最終行まで繰り返し(For Nextなど) (2)A列、B列がどちらか空白でなければ、その値を変数に記憶する (3)A列、B列がどちらも空白の場合、(2)で記憶した変数をそれぞれA列、B列にセット ーーー 以上は私の経験から出たもので、質問例と少し違うところがある、質問の書き違えでは無いですか。 そうでなければ、本回答は無視してください。 Sub test01() d1 = Range("A65536").End(xlUp).Row D2 = Range("B65536").End(xlUp).Row d = Application.WorksheetFunction.Max(d1, D2) MsgBox d mA = Cells(1, "A"): mB = Cells(1, "B") For i = 2 To d If Cells(i, "A") = "" And Cells(i, "B") = "" Then Cells(i, "A") = mA: Cells(i, "B") = mB Else mA = Cells(i, "A"): mB = Cells(i, "B") End If Next i End Sub 第1行またはデータ最上行は、「A列、B列どちらも空白」ではないとする。 最終(下)の塊の状況が良くわからないので、修正が必要かも。 例 データ a c(B列) s d s ーー 結果 a a a a c(B列、Cは以下同じ) c c c s d s d s d s d s d s

Rhyme3nt
質問者

お礼

出来ました! imogasiさん、ありがとうございます。 初歩的な質問ですみません。 まだ勉強を始めて1週間の何も分からない状態で質問してしまい 気分を害されたかもしれません。 これからもっと組み方を勉強していきます。 色々とありがとうございました。

関連するQ&A