[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ボタンで文字列を表示/非表示をしたい』(うる)
いつもお世話になっております。
ボタン(フォームコントロール)をクリックすると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:37
ボタン(フォームコントロール)は表示と非表示の二つを使用して切り替えているのですか。
罫線は非表示にしないのですか。
フォームコントロールは 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
ここからは個人的な勉強となってしまいますが、
昨日、稲葉様に教えていただいたリンク先と下記のリンク先を元に一晩考えてみました。
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
>参考先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.