Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5953 / 13646 ツリー ←次へ | 前へ→

【48017】行の高さが0のまま表示/非表示 ひげくま 07/3/30(金) 16:31 質問[未読]
【48019】Re:行の高さが0のまま表示/非表示 ton 07/3/30(金) 19:42 回答[未読]
【48020】Re:行の高さが0のまま表示/非表示 ichinose 07/3/30(金) 20:02 発言[未読]
【48023】Re:行の高さが0のまま表示/非表示 ひげくま 07/3/30(金) 21:32 質問[未読]
【48024】Re:行の高さが0のまま表示/非表示 ichinose 07/3/30(金) 22:46 発言[未読]
【48025】Re:行の高さが0のまま表示/非表示 ひげくま 07/3/30(金) 23:50 お礼[未読]

【48017】行の高さが0のまま表示/非表示
質問  ひげくま  - 07/3/30(金) 16:31 -

引用なし
パスワード
   こんにちは。

1行目は普通の高さで、2〜3行目の高さを0にした状態で、
1〜3行目を隠したり表示させたりしたいのですが、
RowHeight を 0 にして、Hidden を True にしたあとに、
Hidden を False にすると、RowHeight が 0 のままではなく、
0 にする前の高さに戻ってしまいます。

Rows("2:3").RowHeight = 0
Rows("1:3").Hidden = True
Rows("1:3").Hidden = False

これをステップ実行すると、解ってもらえると思います。
私の環境は、Win2000 Excel2000 です。

RowHeightの値は変えずに、行を隠したり表示させたりはできない
ものでしょうか?

どこかのセルに、行の高さを書いておくのは、できればしたく
ありません。

ちなみに、コードの1行目で、RowHeight を 0 ではなく 0.1 にすると、
コードの3行目を実行しても、行の高さは元に戻ることはありません。
(実際には、0.1 ではなく 0.25 になっているみたいですが)
なので、他に何か良さそうな方法が無ければ、RowHeight を0.1 に
しようと思っていますが、ちょっとスマートじゃなくて・・・

よろしくお願いします。

【48019】Re:行の高さが0のまま表示/非表示
回答  ton  - 07/3/30(金) 19:42 -

引用なし
パスワード
   ▼ひげくま さん:

>Rows("2:3").RowHeight = 0
は非表示と同じだと思います。

【48020】Re:行の高さが0のまま表示/非表示
発言  ichinose  - 07/3/30(金) 20:02 -

引用なし
パスワード
   ひげくま さん:
こんばんは。

>1行目は普通の高さで、2〜3行目の高さを0にした状態で、
>1〜3行目を隠したり表示させたりしたいのですが、
>RowHeight を 0 にして、Hidden を True にしたあとに、
>Hidden を False にすると、RowHeight が 0 のままではなく、
>0 にする前の高さに戻ってしまいます。
>
>Rows("2:3").RowHeight = 0
MsgBox Rows("2:3").Hidden
>Rows("1:3").Hidden = True
>Rows("1:3").Hidden = False

これで確認すると、既にTrueが表示されていますからねえ。

よって、どこかに覚えておかないとなりませんね!!
あとは、どこに置くかですが・・・。

Sub test()
Call set_rowheight_0(Rows("2:3"))
Call set_hidden(Rows("1:3"), True)
Call set_hidden(Rows("1:3"), False)
End Sub
'===============================================
Sub set_rowheight_0(ByVal rng As Range)
  Dim crng As Range
  For Each crng In rng.Rows
    crng.ID = "0"
    Next
  rng.RowHeight = 0
  
End Sub
'===============================================
Sub set_hidden(ByVal rng As Range, ByVal myvalue As Boolean)
  Dim crng As Range
  rng.Rows.Hidden = myvalue
  If myvalue = False Then
    For Each crng In rng.Rows
     If crng.ID = "0" Then
       crng.RowHeight = Val(crng.ID)
       End If
     Next
    End If
End Sub
'===============================================
Sub set_id_clear(ByVal rng As Range)
  Dim crng As Range
  For Each crng In rng.Rows
    crng.ID = ""
    Next
End Sub


Excel2000以上なら、IDプロパティを借りて上記の方法では?

【48023】Re:行の高さが0のまま表示/非表示
質問  ひげくま  - 07/3/30(金) 21:32 -

引用なし
パスワード
   ▼ichinose さん:
>>Rows("2:3").RowHeight = 0
>MsgBox Rows("2:3").Hidden
>
>これで確認すると、既にTrueが表示されていますからねえ。

なるほど、RowHeight と Hidden は、完全に独立しているわけではないんですね。
ありがとうございます。

こちらでのお礼で申し訳ありませんが、tonさんも回答ありがとうございます。

>よって、どこかに覚えておかないとなりませんね!!
>あとは、どこに置くかですが・・・。
>
(略)
>
>Excel2000以上なら、IDプロパティを借りて上記の方法では?

IDを利用するんですか。まったく考え付きませんでした。
結構面倒になりますねぇ(苦笑)
RowHeight = 0.1 をスマートじゃないってこだわっちゃうと、面倒なことをしなくちゃいけなくなるんですね。

Excel97を使っている人がこのマクロを使うかもしれないのですが、それだとこのやり方をしないほうが良いんですよね?

【48024】Re:行の高さが0のまま表示/非表示
発言  ichinose  - 07/3/30(金) 22:46 -

引用なし
パスワード
   >
>Excel97を使っている人がこのマクロを使うかもしれないのですが、それだとこのやり方をしないほうが良いんですよね?
97を使ったことがない私にとっては、想定外のことです。

では、フラグとしてIDではなく、名前でも使ったらいかがですか?

'===========================================
Sub set_rowheight_0(ByVal rng As Range)
  Dim crng As Range
  For Each crng In rng.Rows
    crng.Name = "rheight" & crng.Row
    Next
  rng.RowHeight = 0
End Sub
'===============================================
Sub set_hidden(ByVal rng As Range, ByVal myvalue As Boolean)
  Dim crng As Range
  Dim nm As String
  rng.Rows.Hidden = myvalue
  If myvalue = False Then
    On Error Resume Next
    For Each crng In rng.Rows
     Err.Clear
     nm = crng.Name.Name
     If Err.Number = 0 Then
       crng.RowHeight = 0
       End If
     Next
    On Error GoTo 0
    End If
End Sub
'===============================================
Sub set_id_clear(ByVal rng As Range)
  Dim crng As Range
  For Each crng In rng.Rows
    crng.Name = ""
    Next
End Sub

尚、testは同じです。

【48025】Re:行の高さが0のまま表示/非表示
お礼  ひげくま  - 07/3/30(金) 23:50 -

引用なし
パスワード
   ▼ichinose さん:
>では、フラグとしてIDではなく、名前でも使ったらいかがですか?

参考になりました。
ありがとうございました。

5953 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free