Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
セル内の空白行削除(複数セル)について
投稿日時: 21/06/05 18:14:23
投稿者: youkey14

simple様
  
今朝、回答していただきました内容についてですが、
1点何度挑戦してもできないことがありますので、
私のコードのどの部分が間違えているかご教示いただけませんでしょうか。
  
行いたい内容

A1:A400まで繰り返し、空白行の削除

  
試した実行コード
Sub 練習1()
    Dim r As Range
    For Each r In Range("A1:A400")
        Call deleteF(r)
    Next
End Sub

  
このコード
 Call deleteF(Range("A1"))
で単体セルに適用可能なら、上記コードでも動いてくれると思いましたが、結果は実行前と全く変化なしでした。
  
尚、以下コードはきちんと動いてくれます。
Sub 練習2()
    Dim r As Range
    For Each r In Range("A1:A400")
        Call deleteF(r, "あいう", "たちつ", "なにぬ")
    Next
End Sub

  
For Nextなども試してみましたが、動いてくれませんでした。
お手数をおかけしますが、よろしくお願いいたします。

投稿日時: 21/06/05 18:54:24
投稿者: youkey14

早速ありがとうございます。
根本的なミスでした。
 

Sub 練習2()
    Dim r As Range
    For Each r In Range("A1:A400")
        Call deleteF(r, "あいう", "たちつ", "なにぬ")
    Next
End Sub

Sub 練習1()
    Dim r As Range
    For Each r In Range("A1:A400")
        Call deleteF(r)
    Next
End Sub

 
標準モジュール内にこのようにコード入力していたのですが、何度やっても出来なかった理由は、練習2のコードを必死に何回も実行していただけでした。
それなのにトピック上げてしまって申し訳ございません。
 
上記2つのコードですが、一つにまとめたい場合はどのようにすればよろしいでしょうか。
 
初心者ながら、以下のようなコードは試してみましたが、エラーになってしまいます。
 
試したコード
    Dim r As Range
    For Each r In Range("G2:G400")
        Call deleteF(r, "お手入れ", "製造", "カラー")
    Next
    For Each r In Range("G2:G400")
        Call deleteF(r)
    Next

    Dim r As Range
    For Each r In Range("G2:G400")
        Call deleteF(r, "お手入れ", "製造", "カラー")
        Call deleteF(r)
    Next

 
すみませんが、よろしくお願いいたします。

回答
投稿日時: 21/06/05 19:12:18
投稿者: simple

rの宣言が二度されているのでエラーになっているのでしょう。
 

Sub test10()
    Dim r As Range
    For Each r In Range("G2:G400")
        Call deleteF(r, "お手入れ", "製造", "カラー")
    Next
End Sub

これで、空白行も削除されますので、
Call deleteF(r) を追加実行する必要はありません。
 
========
なお、今までに議論は、セル内改行を ALT+Enterで挿入した前提でした。(vbLFが改行コード)
しかし、他の場所からコピーしてきて、
改行コードがvbCRLFになる可能性があるかもしれません。
その場合は、以下の手当が必要です。
   '(1)空白行を排除した配列ary2を作成
    の手前にある、
    ary = Split(rng.Value, vbLf) という一行を
    s = Replace(rng.Value, vbCrLf, vbLf)
    ary = Split(s, vbLf)
に書き換えてください。

投稿日時: 21/06/05 21:45:15
投稿者: youkey14

ありがとうございます。
 
まさにおっしゃる通りで、

    s = Replace(rng.Value, vbCrLf, vbLf)
    ary = Split(s, vbLf)

にすることで、全て解決しました。
 
サンプルデータにて、したかったことを全てテストしたところ、オールクリアできました。
お時間とお手数をおかけして、すみませんでした。
とても有難かったです。
ありがとうございました。