• ベストアンサー

【ExcelVBA】非表示行の高さを取得する方法

いつもこちらで勉強させていただいています。 VBAで非表示にされたExcelの行の高さを取得したいのですが、可能でしょうか。 (再表示した際に元の高さで表示されるので  非表示前の高さを取得できる方法があるように思っています。) ・Excel2003 ・試したプロパティ   ・Rows.Height   ・Rows.RowHeight     ※どちらも0pointでした 以上です。宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • Alpha-j
  • ベストアンサー率66% (18/27)
回答No.1

せっかくVBAを作成するのですから、一瞬表示させて高さを変数に仕舞い込むのはいかがですか。 [例] If Rows(i).EntireRow.Hidden = True Then Rows(i).EntireRow.Hidden = False Line_Hight = Rows(i).RowHeight Rows(i).EntireRow.Hidden = Ture MsgBox Line_Hight End If

hoduki
質問者

お礼

いただいたソースを参考に実装し、実現することができました。 このような応用があるのですね!目からうろこです。 急な仕事でしたので、とても助かりました。 有難う御座いました。

関連するQ&A

  • ExcelVBAで行の非表示、表示をコード化

    現在、Excel2003をつかっており、VBAを用いて sheet1シートの2行目、4行目、10行目を非表示にするマクロ(HIDDEN)と すべての行を表示にするマクロ(APPEAR)を使っています。 Sub HIDDEN() ThisWorkbook.Worksheets("sheet1").Rows("2").HIDDEN = True ThisWorkbook.Worksheets("sheet1").Rows("4").HIDDEN = True ThisWorkbook.Worksheets("sheet1").Rows("10").HIDDEN = True End Sub Sub APPEAR() ThisWorkbook.Worksheets("sheet1").Rows.HIDDEN = False End Sub いま、2つのマクロを併合し 「Sheet1の2行目、4行目、10行目のいずれかが非表示であれば、すべての行を表示 そうでなければ、2行目、4行目、10行目のすべてを非表示にしたい」 と考えています。 ここで私が困っているのは、2行目、4行目、10行目のいずれかが非表示であれば というのをどうVBAで記述するのかです。

  • ExcelVBAで行の非表示、表示をコード化したい

    現在、Excel2003をつかっており、VBAを用いて sheet1シートの2行目、4行目、10行目を非表示にするマクロ(HIDDEN)と すべての行を表示にするマクロ(APPEAR)を使っています。 Sub HIDDEN() ThisWorkbook.Worksheets("sheet1").Rows("2").HIDDEN = True ThisWorkbook.Worksheets("sheet1").Rows("4").HIDDEN = True ThisWorkbook.Worksheets("sheet1").Rows("10").HIDDEN = True End Sub Sub APPEAR() ThisWorkbook.Worksheets("sheet1").Rows.HIDDEN = False End Sub いま、2つのマクロを併合し 「Sheet1の2行目、4行目、10行目のいずれかが非表示であれば、すべての行を表示 そうでなければ、2行目、4行目、10行目のすべてを非表示にしたい」 と考えています。 ここで私が困っているのは、2行目、4行目、10行目のいずれかが非表示であれば というのをどうVBAで記述するのかです。

  • EXCELVBAで行の削除

    WIN98SE EXCEL2000です。 G列に99の文字があったらその行を削除するというVBAを下記のように作りました。 Dim i As Integer Dim rowcount As Integer rowcount = Cells(1,1).CurrentRegion.Rows.Count For i = 1 To rowcount If Cells(i, 7) = "99" Then Rows(i).Delete Next i これを実行するとG列に99のある行が連続してあると1行おきに削除されます。どこをなおせばよいのか教えてください。よろしくお願いします。

  • 塗りつぶしのない行を非表示にするマクロ

    塗りつぶしのない行を非表示にするマクロを作成したいのですが、 どこが問題で実行できないのかわかりません! 例えば8行目に対して実行したい場合を教えてください! ちなみに自分で作成したVBAはこんな感じです。 Sub macro1() If Rows("8:8").Interior.Color = xlNone Then Rows("8:8").EntireRow.Hidden = True End If End Sub よろしくお願いします。 ちなみにexcel2007です。

  • RowHeightで設定できる行の高さは最高いくつ

    エクセルなのですが Sub Macro() Rows(1).RowHeight = 401 End Sub のように RowHeightで設定できる行の高さは最高いくつなのでしょうか? ある一定の数値以上になるとエラーになりますが それがいくつなのかわかりません。

  • エクセル「折り返して全体を表示」での折り返しの行数取得方法

    エクセル2000のVBAで質問します。 A1セルにVLOOKUP関数で文字列が表示されます。 セルの書式設定で「折り返して全体を表示する」にした場合、セル内で折り返されて全部で何行になっているのかを取得する方法はありますか?(VBAでも関数でも) 現在、セルの高さを3行分とっているのですが、関数で表示される文字列の長さによっては3行でおさまらない場合があり、何行になるかがわかれば行数に応じてフォントサイズを変更し、縮小して全体を表示させようと思っています。 当初、セルからはみ出るかどうかがわかれば出来るかと思い、 Sub test01() With Worksheets("Sheet1").Range("A1") h = .Height .Value = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" .WrapText = True .EntireRow.AutoFit h2 = .Height .EntireRow.RowHeight = h End With If h2 > h Then MsgBox "はみ出しちゃった!", , " \(≧▽≦)丿" End If End Sub というマクロを書いてみたのですが、行数がわからないと縮小する割合が求められないので質問いたしました。

  • 【ExcelVBA】シートのCodeNameプロパティからオブジェクトを取得する方法

    いつも勉強させていただいてます。 業務でExcelVBAを使用していますが、ワークシートのCodeNameプロパティ値からワークシートオブジェクトを取得する方法はありますでしょうか。 以下、詳細です。 ・環境:Excel2003 ・概要    ワークシートのオブジェクト名:"shtFormat"    シート名:"フォーマット"  ガントチャートを作成するVBAなのですが、上記のシートをコピーして、実際に処理に使用するシートを作成します。  作成後も、ユーザフォームや別のデータ操作用ワークシートのイベントから操作するため、コピーしたシートを特定する情報を内部で保持しようと考えています。  そこで、CodeNameプロパティ値を保持しようと考えておりますが、CodeNameプロパティ値(文字列)からワークシート型のオブジェクトを取得する方法が分かりません。 ※ Nameプロパティはシート名を変更した際に使用できなくなり、断念しました。 ※Indexプロパティはシートの並び順によって値が変わるため、断念しました。 以上です。 宜しくお願い致します。

  • ExcelVBA 行を非表示にするとボタンが消える

     Excel2016です。調べても解決できなかったので,初めて質問させていただきます。  マクロで行を非表示にしたらコマンドボタンやチェックボックスが消えてしまいます。非表示にする行にはかからないようにオブジェクトを設置していますが,消えてしまいます。コントロールの書式設定で「セルにあわせて移動やサイズ変更をする」「セルにあわせて移動するが変更はしない」「セルにあわせて移動やサイズを変更しない」のいずれに設定しても消えてしまいます。一部消えない(見えている)オブジェクトもありますが,シートやオブジェクトをクリックしたり,画面を切り替えたりすると消えてしまいます。  しかし,「オブジェクトの選択と表示」で確認すると,消えたオブジェクトは全て残っています。  この状態で上書き保存をし,一旦ブックを閉じて再度開くと,オブジェクトは表示されており,機能します。  オブジェクトを配置した位置は,非表示処理をする14~35行より上と,それより下ですが,全て消えてしまいます。全てのオブジェクトを14行目より上に配置しても消えてしまいます。  しかし,別のシート(B)で全てのオブジェクトを非表示する行より上に配置して同様の処理をした場合は,消えません。  ※問題のシート(A)は,元々シートBをコピーして,更に別の処理を加えたりしたものなので,基本的には同じ処理を行っています。  また,その他の確認できた現象として,Ctrl+Wでブックを閉じた場合,通常はウィンドウの位置は変わりませんが,シートAでマクロ実行後に閉じた場合はなぜかウィンドウの位置がずれます(移動します)。ブックを開いて,何もせずにCtrl+Wで閉じた場合は移動しません。  念のため,オブジェクトの高さ等が0になってしまっているのかもしれないと思い,行を非表示にした後にオブジェクトの高さ・幅を変更するコードを追加してみてもやはり消えたままでした。  また,マクロを使用せずに手動で行を非表示にした場合は,オブジェクトは消えませんでした。  このオブジェクトが消える問題を解決する方法を教えていただきたいです。よろしくお願いいたします。 <コードの一部> Dim i As Integer For i = 14 To 35 Step 3 If Len(Cells(i, 9)) = 0 Then Range(Cells(i - 1, 9), Cells(i + 1, 9)).EntireRow.Hidden = True Next i なお, Range(Cells(i - 1, 9), Cells(i + 1, 9)).EntireRow.Hidden = True を Rows(i - 1).Hidden = True Rows(i).Hidden = True Rows(i + 1).Hidden = True に変えてみてもオブジェクトは消えます。

  • エクセルVBAにて最終行の取得とその活用

    エクセルVBA初心者です。 VBAで入力行最終行を取得するのは、色々なところに載っているですが、 その行から一個下の行を全て消すのはどうしたらよいのですか? Sub 最終行取得() Dim r r = Range("B4").End(xlDown) Rows(r + 2).ClearContents  ←ここは適当です。 ちなみに Range("a"&r+1).ClearContents で一つしたのセルを消す事は出来ました。

  • 選択行番号を取得して別シート貼り付ける方法

    VBAを使いsheet1の選択した行番号をsheet2のA1列に全て貼り付ける方法が分からなくて困っています。  ちなみに下記のVBAはsheet1上で実行するとメッセージボックスに選択行の数値が順番に表示されます。この選択行番号情報を全てsheet2のA1列に貼り付けたいのですが、どうすれば良いでしょうか?   選択行は最大400位になります。特にメッセージボックスに表示する必要はありませんので、メッセージボックス表示は不要です。 Sub 行番号取得() Dim r As Range For Each r In Selection.Rows MsgBox r.Row Next End Sub

専門家に質問してみよう