ここから本文です

【エクセルマクロ:行の削除についての質問】 5^4の全組み合わせを出力した後、条...

kke********さん

2017/10/2304:06:39

【エクセルマクロ:行の削除についての質問】
5^4の全組み合わせを出力した後、条件にあう組み合わせのみ残し、それ以外の行を消すというプログラムを作りたいと思っています。

しかし、EntireRow.Deleteを実行すると
、行自体が削除されず、セルの値がクリアされるだけになってしまいます。
自分でもいろいろ試してみましたが、原因がわからないのでどなたか解決方法をご教授ください<m(__)m>

コードの途中を抜粋すると↓こんな感じです。(ゴリ押しのコードですみません…)

For i1 = 1 To 5
For i2 = 1 To 5
For i3 = 1 To 5
For i4 = 1 To 5
x = x + 1
Cells(x + 7, "A") = Cells(i1, "A")
Cells(x + 7, "B") = Cells(i2, "B")
Cells(x + 7, "C") = Cells(i3, "C")
Cells(x + 7, "D") = Cells(i4, "D")

a = Cells(x + 7, "A").Value
b = Cells(x + 7, "B").Value
c = Cells(x + 7, "C").Value
d = Cells(x + 7, "D").Value
y = a + b + c + d

If y = 1 Then
Cells(x + 7, "E").Value = y
Else
Cells(x + 7, "E").EntireRow.Delete
End If
Next i4
Next i3
Next i2
Next i1

閲覧数:
57
回答数:
4
お礼:
500枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

tra********さん

2017/10/2309:19:23

↓の変更をおこなえば、とりあえずは動きそう

Else
Cells(x + 7, "E").EntireRow.Delete
End If



Else
Cells(x + 7, "E").EntireRow.Delete
x = x - 1
End If

コードを理解したわけではないですが、行削除がされるのはその時点での最終行(=x行)ということですよね?
最終行を削除するということは、最終行が1行戻るのですよね?

本来は、
>y = a + b + c + d
>If y = 1 Then

の判定を、

>x = x + 1
>Cells(x + 7, "A") = Cells(i1, "A")
>Cells(x + 7, "B") = Cells(i2, "B")
>Cells(x + 7, "C") = Cells(i3, "C")
>Cells(x + 7, "D") = Cells(i4, "D")

の処理前に行えば、よいのですよね?

  • tra********さん

    2017/10/2309:24:42

    まとめると
    といった感じにすればいいのですかね?試してください。

    x = 7
    For i1 = 1 To 5
    For i2 = 1 To 5
    For i3 = 1 To 5
    For i4 = 1 To 5
    a = Cells(i1, "A")
    b = Cells(i2, "B")
    c = Cells(i3, "C")
    d = Cells(i4, "D")
    y = a + b + c + d

    If y = 1 Then
    x = x + 1
    Cells(x, "A") = a
    Cells(x, "B") = b
    Cells(x, "C") = c
    Cells(x, "D") = d
    Cells(x, "E").Value = y
    End If
    Next i4
    Next i3
    Next i2
    Next i1

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜3件/3件中

並び替え:回答日時の
新しい順
|古い順

tor********さん

2017/10/2308:48:55

デバッグでステップインとウォッチ式を使って動きを確認しましたか?

行削除をするなら「上から下」ではなく「下から上」に向かってやるのが鉄則です
削除したら行がずれます
最終行を求めてカウントダウンしていきましょう

それと行数わかってるのにRowsではなくEntireRowを使うのは個人的に気に入らない

プロフィール画像

カテゴリマスター

tai********さん

2017/10/2306:47:03

抜粋のコードを示して回答者にやりたいことを推理させる、という手法には無理があるのでは?

不適切な内容が含まれている可能性があるため、非表示になっています。

投稿内容に関する注意

あわせて知りたい

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる