[[20170920160036]] 『ボタンで文字列を表示/非表示をしたい』(うる) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ボタンで文字列を表示/非表示をしたい』(うる)

いつもお世話になっております。
ボタン(フォームコントロール)をクリックするとB8に下記の様な「領収書在中」を表示と非表示にしたいと思っています。
┏━━━━━┓
┃領収書在中┃
┗━━━━━┛
初心者なりにマクロの記録で表示するとことまではたどり着いたものの非表示にする方法がわかりません。
非表示するコードや他に良い方法があれば教えていただきたいです。
よろしくお願い致します。

以下マクロの記録のコードです。


Sub ボタン2_Click()
'
' ボタン2_Click Macro
'

'

    Range("B8").Select
    ActiveCell.FormulaR1C1 = "領収書在中"
    ActiveCell.Characters(1, 3).PhoneticCharacters = "リョウシュウショ"
    ActiveCell.Characters(4, 2).PhoneticCharacters = "ザイチュウ"
    Range("B8").Select
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    With Selection.Font
        .Name = "MS Pゴシック"
        .Size = 12
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0
        .ThemeFont = xlThemeFontMinor
    End With
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone

End Sub

< 使用 Excel:Excel2013、使用 OS:Windows10 >


 書式設定はされているようですので、文字だけ入れ替えればいいと思いますが、いかがですか?
    Sub ボタン2_Click()
        Range("B8").Value = IIf(Range("B8").Value = "領収書在中", "", "領収書在中")
    End Sub

(稲葉) 2017/09/20(水) 16:25


稲葉様
お教えいただいたコードを早速入力してみました。
質問文で漏れてしまっていたのですが、領収書在中のセルに外枠太罫線を設定したいです。
文字の表示/非表示は問題なくできました!
言葉足らずで申し訳ございませんが、よろしくお願い致します。
(うる) 2017/09/20(水) 17:04

http://officetanaka.net/excel/vba/cell/cell07.htm
 こちらを参考にして、少しだけ自分でがんばって見ませんか?
(稲葉) 2017/09/20(水) 17:37

稲葉様
URLありがとうございます。
自分でコードを作ってみないと今後にもいかせないと思うのでやってみます!
明日、URLをもとに考えてみたコードを貼らせていただきます。
おかしな所だらけだと思うので、また回答いただけますと嬉しいです。
(うる) 2017/09/20(水) 17:59

>「領収書在中」を表示と非表示にしたい

ボタン(フォームコントロール)は表示と非表示の二つを使用して切り替えているのですか。
罫線は非表示にしないのですか。

フォームコントロールは FONT だけの設定、マクロは標準モジュールのマクロ名を指定します。

Activexコントロールは、プロパティ設定による表示やマクロも含むことができます。
ので私はこちらを使用しています。

Activex(トグルボタン)を利用した切り替えを紹介します。参考にしてください。

トグルボタンは ONOFF のプッシュボタンになっていて2値を切り替える時に使用します。

1.開発タブ→挿入→Activex(トグルボタン)を貼り付ける

2.トグルボタンをダブルクリックする

3. Private Sub ToggleButton1_Change()

  End Sub と表示される

4.次のコードを挿入する

     If Not ToggleButton1.Value Then

        With ToggleButton1.Font
            .Name = "MS ゴシック"
            .Size = 16
            .Bold = True
        End With

        ToggleButton1.ForeColor = &HFF0000
        ToggleButton1.BackColor = &HC0C0FF
        ToggleButton1.Caption = "表示"

     Call 非表示

     ElseIf ToggleButton1.Value Then

        ToggleButton1.ForeColor = &HFF&
        ToggleButton1.BackColor = &HFFFF80
        ToggleButton1.Caption = "非表示"

     Call 表示

     End If

5.標準モジュールに次のコードを複写する

  Sub 非表示()

  Range("B8").Select

  ActiveCell.Value = ""

  With Selection

      .Borders(xlDiagonalDown).LineStyle = xlNone
      .Borders(xlDiagonalUp).LineStyle = xlNone
      .Borders(xlEdgeLeft).LineStyle = xlNone
      .Borders(xlEdgeTop).LineStyle = xlNone
      .Borders(xlEdgeBottom).LineStyle = xlNone
      .Borders(xlEdgeRight).LineStyle = xlNone
      .Borders(xlInsideVertical).LineStyle = xlNone
      .Borders(xlInsideHorizontal).LineStyle = xlNone
  End With

  End Sub

6.(うる)さんが作成された

>Sub ボタン2_Click()のマクロ名を Sub 表示_Click()に変更してください。

どうなるか試してみて下さい。

(HO) 2017/09/20(水) 21:20


HO様
教えていただいた手順通りにしましたところ希望通りのものができました。
本当にありがとうございます!
トグルボタンを他のものにも使えるように勉強いたします!

ここからは個人的な勉強となってしまいますが、
昨日、稲葉様に教えていただいたリンク先と下記のリンク先を元に一晩考えてみました。
http://www.moug.net/tech/exvba/0050133.html
http://www.relief.jp/docs/excel-move-remove-border-lines.html
http://www.relief.jp/docs/002068.html

結果的には外枠太罫線を引くコードを足すことはできましたが(そのままコピーしただけですが…)表示・非表示の方法は全くわかりませんでした。
ヒント等があればお教えいただけないでしょうか?

以下コードです。教えていただいたコードの3行目に罫線を引くように追加しました。

 Sub ボタン2_Click()
     Range("B8").Value = IIf(Range("B8").Value = "領収書在中", "", "領収書在中")
     Range("B8").BorderAround Weight:=xlMedium
 End Sub

(うる) 2017/09/21(木) 11:44


 よく勉強されていますね!
 最初の私の回答が分かりにくかったと思います。申し訳ないです。
 このような形でどうですか?

 Withステートメントについて
http://officetanaka.net/excel/vba/beginner/16.htm

 Ifステートメントについて
http://excelvba.pc-users.net/fol6/6_1.html

    Sub ボタン2_Click()
        With Range("B8")
            If .Value = "領収書在中" Then
                .ClearContents '.Value = ""
                .Borders.LineStyle = xlNone 'xlLineStyleNone
            Else
                .Value = "領収書在中"
                .Borders.Weight = xlMedium  '.BorderAround Weight:=xlMedium
            End If
        End With
    End Sub

 Not演算子についても勉強されているようですが、今回は
 「セルの値「領収書在中」があるかどうか」のほうが、
 「罫線が引かれているかどうか」よりも判断基準としてふさわしいと判断しました。

 以下余談です。暇があったら読んでください。

 参考先URLは改ページの点線のOnOffですが、罫線は複数の種類があり、次のような使い方は出来ませ
  ×   Range("B8").Borders.LineStyle = Not Range("B8").Borders.LineStyle

 これはLineStyleプロパティの戻り値がTrueFalseではなく、XlLineStyleという集まりになっているためです。
 次のコードを実行するとそれぞれの戻り値が確認でき、改ページの点線と異なることが分かると思います。
    Sub test()
        Dim msg As String
        msg = ".Borders.LineStyle = [" & Range("B8").Borders.LineStyle & "]" & vbNewLine
        msg = msg & "XlLineStyleのxlLineStyleNone = [" & xlLineStyleNone & "]" & vbNewLine
        msg = msg & ".DisplayPageBreaks = [" & ActiveSheet.DisplayPageBreaks & "]"
        MsgBox msg
    End Sub

 以上を踏まえて、前回投稿時に紹介したTANAKAさんの一番最後を読むと
 True Falseでも設定できるじゃん、ってなりますよね。
 無理やりTrueFalseでやろうとすると以下のようになります。

 ○?  Range("B8").Borders.LineStyle = Range("B8").Borders.LineStyle = xlLineStyleNone

 分かりにくいですよね。

 余談2
http://vbae.odyssey-com.co.jp/column/no1_1.html
 漫画ですが、結構面白かったですよ。
 基礎中の基礎は楽しんで覚えられます。

 分からないことがあれば聞いてください。
(稲葉) 2017/09/21(木) 12:47

稲葉様
まさに思い描いていた動作になりました!
本当にありがとうございます。
教えていただいたコードの意味を参考先を元に考えてみました。
B8のセルに「領収書在中」があれば文字列も罫線も消す。
そうでなければ「領収書在中」と罫線を表示する。
という意味で合っていますでしょうか?
思考の凝り固まった私は「指定のセルに文字列と罫線を表示し、その文字列がなければ罫線も消す。」という考えしか思い浮かびませんでした…

 >参考先URLは改ページの点線のOnOffですが、罫線は複数の種類があり、次のような使い方は出来ません。
 >  ×   Range("B8").Borders.LineStyle = Not Range("B8").Borders.LineStyle
 まさにそのコードを試してエラーになっていました。
 コードを実行し戻り値も確認しました。
   .Borders.LineStyle = [-4142]
   XlLineStyleのxlLineStyleNone = [-4142]
   .DisplayPageBreaks = [False]
 となっていたので、TANAKAさんのサイトでxlLineStyleNoneは「-4142」でも「False」でも代用可能なの
 は理解できた気がします。

 >○?  Range("B8").Borders.LineStyle = Range("B8").Borders.LineStyle = xlLineStyleNone
 1. Range("B8").Borders.LineStyle =
 2. Range("B8").Borders.LineStyle = xlLineStyleNone
 1つのコードを分けて考えても良いのかわかりませんが、1.はB8に罫線を引くコード、2.はその逆でB8の罫線を消すコードだと思うのですが、
 Notがないのになぜこのコードで罫線のOnOffが可能なのかがさっぱりわかりません。。
 余談になってしまいますが、xlLineStyleNoneの部分を「-4142」と「False」に変えて実行してみました。
 代用可能とわかっていても同じ結果が返ってくると感動しますね。

今まで検索してきたVBAのサイトはコードの説明と使用方法ばかり(当たり前ですが…)だったので
初心者の私には若干とっつきにくかったですが、物語があると入りやすいですね!
コードを一つずつ実際に実行しながら読み進めていこうと思います。
(うる) 2017/09/22(金) 13:56


 >1つのコードを分けて考えても良いのかわかりませんが、1.はB8に罫線を引くコード、2.はその逆でB8の罫線を消すコードだと思うのですが、
 >Notがないのになぜこのコードで罫線のOnOffが可能なのかがさっぱりわかりません。。
 出先なので簡単にしか説明できません。
 TureFalseをLineStyleプロパティに渡すと線が引けることがわかったと思います。
 なので、Tureを作るのはどうするかを考えます

 次の質問にTureFalseて答えてください。自ずとわかってきませんか?
 1 = 1は正しいですか?
 1 = 2は正しいですか?
 xlLineStyleNone = xlLineStyleNoneは正しいですか?
 xlLineStyleNone = xlContinuousは正しいですか?

(稲葉) 2017/09/22(金) 15:26


 稲葉様

 質問をしておきながら回答が遅くなり申し訳ございません。
 ご提示頂いた質問を自分なりにこういうことかな?と考えました。
 1と1、1と2を実際に入れ替えて実行してみました。
 本当になんとなくわかった気はしますが、それを説明できるだけの理解には達していません…

 1 = 1は正しいですか?
 → False

 1 = 2は正しいですか?
 → True

 xlLineStyleNone = xlLineStyleNoneは正しいですか?
 → False

 xlLineStyleNone = xlContinuousは正しいですか?
 → True
(うる) 2017/09/25(月) 17:44

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.