- ベストアンサー
【Excel VBA】結合セルのデータ削除
Excel2003を使用しています。 1~1300行までのデータの中の、ある一定の範囲と間隔でデータを削除するためのコードを書きたいのですが、セルが結合されているため、うまく処理できません。 一定の範囲と間隔とは、 B7:O26、B33:O52、B59:O78、B85:O104…B1281:O1300 です。 このひとつの範囲が1ページ分のデータで、全50ページあり、範囲内のセルは全て2行1列で結合されています。 上記のような場合は、どのようにコードを書いたらいいでしょうか? よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
どんなVBAを書いたら、どうダメだったか書いていないので自信がありませんが、以下ではどうですか(シート名は変更して下さい) Sub Macro4() Dim idx As Integer For idx = 7 To 1281 Step 26 Sheets("Sheet1").Cells(idx, 2).Resize(20, 14).ClearContents Next idx End Sub
その他の回答 (3)
- fred2000
- ベストアンサー率30% (6/20)
ANo.3です。 すいません。お礼の最後に質問がありますが、私自身まだマクロ初心者なので分かりません。 練習のために書いたコードで処理できそうだったので投稿しました。 どなたか分かる方が教えて下さると良いんですが・・・
お礼
fred2000 さん、おはようございます。 >すいません。お礼の最後に質問がありますが、私自身まだマクロ初心者なので分かりません。 わざわざお答えいただき、ありがとうございます。 私もマクロ勉強中で、参考書を片手に頑張っていますが、fred2000 さんのように投稿できるレベルになるのは、まだまだ先の話のようです。 ありがとうございました。
- fred2000
- ベストアンサー率30% (6/20)
Sub test1() Dim i As Integer For i = 1 To 1275 Step 26 Range(Cells(i + 6, 2), Cells(i + 25, 15)).ClearContents Next End Sub ではどうでしょうか?
お礼
回答ありがとうございます。 fred2000 さんが書いてくださったコードと同じような感じで(下記)書いていたのですが、『結合されたセルの一部を変更することはできません』といった内容のエラーメッセージが出て、うまく処理できませんでした。 Cells の行の部分を i + 6 → j = 26 * (i - 1) + 7 i + 25 → k = 26 * (i - 1) + 26 として、i を 1 To 50 でループさせていました。 回答をいただいてから、もう一度試したところ、今度はエラーが出なかったので、結局、原因がよくわからないままで、スッキリしない部分もあるのですが、とりあえず、無事に処理できました。 あと、コードの書き方ですが、「Step 26(増分値)」としたほうが、行の部分が長くならず、わかりやすいですね。ループの回数は少ないほうがいいのかなと思い、上記のように書いていましたが、どちらのほうがいいというほどのものでもないのでしょうか?
- imogasi
- ベストアンサー率27% (4737/17069)
使っているセルの全部を範囲指定して、セル結合を解きます。 左上隅のセルに値はセットされます。 そこから質問の一定間隔の行?で削除のプログラムを組めば、どう都合が悪いのでしょうか。 それでもよければ、最下行から、Step -x でFor Nextで EntireRow(i).Delete を繰り回せばよいのではないですか。xは間隔数+1です。
お礼
>使っているセルの全部を範囲指定して、セル結合を解きます。 セルの結合を解除して、マクロを実行するとセルの状態を元に戻せませんよね?データを削除した後は、また新たにデータを入力しますので、セルの状態が変わると困ります。 >そこから質問の一定間隔の行?で削除のプログラムを組めば、どう都合が悪いのでしょうか。 都合が悪いということではなく、エラーメッセージが出て、うまく処理できなかったので、質問させていただき、他の方からいただいた回答で、無事処理できました。 ありがとうございました。
お礼
回答ありがとうございます。 >どんなVBAを書いたら、どうダメだったか書いていないので No.3の回答のように書いていたのですが、『結合されたセルの一部を変更することはできません』といった内容のエラーメッセージが出ました。 参考書で見た MergeArea プロパティを試してみましたが、うまくいかなかったので、質問させていただいた次第です。 教えていただいたコードで、無事処理できました。ありがとうございました。