【3月6日実施】システムメンテナンス実施のお知らせ

VBAでボタンを押すと同じシート内の空白の行を非表示にするようにしているのですが
空白かどうかを判定するセルが外部からのリンク貼りつけにより数式が入っており
貼り付けの結果が空白でも空白扱いにならなくて非表示になってくれません。
リンク貼り付けされた結果でも空白なら空白扱いにするにはどうしたらいいでしょうか

A 回答 (5件)

No4です



>その方法は数式が入ってるセルには無効のようです。
その憶測は間違いです。
原因は、質問者様が隠している条件にあると推測されます。
例えば、参照すべき列が違っているとか、結合セルになっているとか・・・
    • good
    • 0
この回答へのお礼

原因は別にあるんですね…
結合はされてませんでしたし列もあってます
数式バーに=[○○.xlsm],○○!J36
というのがあり、これを消すと動作するのでこれが原因かと思ったのですが…
あとは私では検討もつかないです…

お礼日時:2019/12/26 12:23

No3です



>SpecialCells(xlCellTypeBlanks)
関数のCOUNTBLANCとは異なり、SpecialCellsだと計算式で空白になっているセルは含まれないようです。
対象範囲を順に空白(="")か否かをチェックするのが地道ですが簡単な方法かと。

なお、ご質問には、関係ありませんが、
>If [Counta(j3:j300)] < 300 Then
仮に全部が該当しても、298 < 300 なので、その条件がFalseになることはないので、意味のない条件判断になっています。


以下は、範囲を順にチェックする例です
For Each c In Range("j3:j300")
 If c.Value = "" Then c.EntireRow.Hidden = True
Next c

事前に全ての行が表示されているとは限らない場合は、
For Each c In Range("j3:j300")
 c.EntireRow.Hidden = (c.Value = "")
Next c

※ 上の例では1行ずつ処理していますので若干時間がかかります。
 (と言っても、問題にはならないと思いますが…)
 仕分けだけ先に行ってUNIONなどでまとめておいて、全部の表示処理をまとめて行うようにすれば、それなりに速くなるはずです。
    • good
    • 0
この回答へのお礼

ありがとうございます!…しかしダメでした他の列で試したら動作してくれるのですが判定の対象になってる列に対して行うと無反応です。
その方法は数式が入ってるセルには無効のようです。

お礼日時:2019/12/26 10:35

こんにちは



>空白なら空白扱いにするにはどうしたらいいでしょうか
普通にCOUNTBLANKなどで数えれば空白扱いされるはずです。
逆に、どうやって「非空白」扱いと判断しているのかが不明なのですけれど・・・

>VBAでボタンを押すと~~
VBAで行っているのなら、そちらの空白判定のロジックを修正すれば良いだけでしょう。
(現状が不明ですが、COUNTBLANKでも良いしVALUEやTEXT値を調べても良い)
もしかして、質問者様は「空白」としているけれど、セルにスペース等が入っていて、(見えないので)空白だと思っているだけといった可能性はないでしょうか?
そんなことも考慮しておくなら、空白かどうか調べる前に、スペースや改行などを除いてから判定する方が良いかも知れませんね。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
もともとはこんなマクロでした。

Sub 空白行を非表示()
If [Counta(j3:j300)] < 300 Then

Range("J3:J300").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True

End If

End Sub

>VBAで行っているのなら、そちらの空白判定のロジックを修正すれば良いだけでしょう。
まだ初心者なので他で使われている物を編集して使用している感じです。

>もしかして、質問者様は「空白」としているけれど、セルにスペース等が入っていて、(見えないので)空白だと思っているだけといった可能性はないでしょうか?
セルは空白でしたリンク貼り付けによるアドレスが数式バーに入力されてるだけのように見えますがもしかして他の原因ですか…?

お礼日時:2019/12/25 13:01

.Text =空白


で空白判定出来ませんか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
ちょっと使い方調べてみます

お礼日時:2019/12/25 13:01

そのセルが数式かどうかを判定したらどうですか。



If Sh1.Range("A1").HasFormula Then

数式が入っていたらtrue、数式が入ってないならfalse
    • good
    • 0
この回答へのお礼

早い回答ありがとうございます。
まだ初心者でHasFormulaという物をしりませんでした。
サンプルに則って少し勉強してみます。

お礼日時:2019/12/25 10:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A