Excel (VBA)

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

 
(指定なし : Excel 2010)
「土」「日」の行?を減らす方法
投稿日時: 19/08/25 18:12:05
投稿者: m024240

よろしくお願いします。
 
既存の行事予定表があり、手帳用のシートを作ろうとしています。
「予定」シートから「手帳」シートに、各項目をコピーしています。
 
「手帳」    
01  日  曜日      予定1     予定2     予定3
02     金
    (=予定!B10)
 
03     土
    (=予定!B11)
 
このとき、月から金の行は173ピクセルに、土、日は80ピクセルに整えたくて
ネットを検索して、以下のようなコードを考えました。
助言をください。
 
Private Sub Worksheet_Activate()
Dim hgt As Variant
Dim WorkRng As Range
    Set WorkRng = Range("B2:B400")
    WorkRng.rowheight = 173
    For Each h In WorkRng
        If h.Value = "土" Then
                hgt = 80
        ElseIf h.Value = "日" Then
                hgt = 80
        End If
    Next h
End Sub

回答
投稿日時: 19/08/25 20:09:03
投稿者: WinArrow
投稿者のウェブサイトに移動

最初に
  
この板にコードを記述する場合、手入力ではなく、
コードペインからコピペしてください。
  
次に、行の高さは、ピクセルではなく、ポイントで、指定します。
 基本的にVBAはポイントで指定することが多い。
 列幅だけ、文字数で指定します。
  
ところで、土、日、の行の設定は
変数に「値」を代入しているだけで、行には適用していません。
この処理で変数は必要ですか?
  
掲示のコードを実行してみましたか?
 結果は?
  
何を助言すればよいんでしょう?
 
Excelのメッセージだけでは、対応できないのかしら?

回答
投稿日時: 19/08/25 20:29:43
投稿者: WinArrow
投稿者のウェブサイトに移動

1案:ループしない方法:オートフィルタを使う
 
Dim WorkRng As Range, h As Range
    Set WorkRng = Range("B2:B400")
    WorkRng.EntireRow.RowHeight = 129.75 '173
    ActiveSheet.Range("$A$1:$B$400").AutoFilter _
        Field:=2, _
        Criteria1:="=土", Operator:=xlOr, _
        Criteria2:="=日"
    Rows("2:400").RowHeight = 60
    ActiveSheet.Range("$A$1:$B$400").AutoFilter Field:=2

回答
投稿日時: 19/08/26 12:46:01
投稿者: simple

既に完全回答をいただいていますが、蛇足です。
 
要するに、ピクセルをポイントに変換してRowHeightを設定すればよいということです。
 
1ピクセルは0.75ポイントということのようです。
↓参照して下さい。
「ポイント、ピクセル、インチ、センチ、ミリの相互変換 」
https://vbabeginner.net/%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88%E3%80%81%E3%83%94%E3%82%AF%E3%82%BB%E3%83%AB%E3%80%81%E3%82%A4%E3%83%B3%E3%83%81%E3%80%81%E3%82%BB%E3%83%B3%E3%83%81%E3%80%81%E3%83%9F%E3%83%AA%E3%81%AE%E7%9B%B8/
 
(指摘いただいていることばかりで済みません)

回答
投稿日時: 19/08/26 13:22:12
投稿者: WinArrow
投稿者のウェブサイトに移動

推測ですが、
未定義の変数があると思われます。
 
モジュールの先頭に

Option Explicit

を挿入しましょう。
 
以下を、設定しておくと自動で
Option Explicit

が挿入されます。
 
メニューの中の「ツール」から
「オプション」を選択し
「変数の宣言を強制する」にチェックを入れておきます。

投稿日時: 19/08/27 00:53:02
投稿者: m024240

WinArrow 様
 
コメントありがとうございます。
最初に、行の高さはポイントで指定するのですね。
行番号を右クリックすると行の高さ数値が2つ表示されるので、
ポイントで指定するのですね。
このようなことも分かっていない初心者です。
 
オートフィルタを使ったコードをありがとうございました。
思っていることができました。
オートフィルタを使うなんて考えてもいませんでした。
 
それから、自分が提示したコードですが、
ネット上のコードを使って、自分で少し変えたものです。
ですので、十分意味が分かっていないまま質問してしまいました。
 
今となっては、
B列の2行から400行まで、
値が"土"or"日"なら、行の高さを60に、
そうでなければ、行の高さを129にする。
でループすればよかったのかな?と思っています。