- ベストアンサー
エクセルVBAで右向三角▶
エクセルVBAで、メッセージボックスで向三角▶を表示するにはどのように書けばよいでしょうか?
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
Option Explicit Private Declare PtrSafe Function MessageBoxW Lib "User32" (ByVal hWnd As LongPtr, ByVal lpText As LongPtr, ByVal lpCaption As LongPtr, ByVal uType As Long) As Long Public Function MsgBoxW(Prompt As String, Optional Buttons As VbMsgBoxStyle = vbOKOnly, Optional Title As String = "Microsoft Access") As VbMsgBoxResult Prompt = Prompt & vbNullChar 'Add null terminators Title = Title & vbNullChar MsgBoxW = MessageBoxW(Application.hWnd, StrPtr(Prompt), StrPtr(Title), Buttons) End Function Sub Test() Dim s As String s = ChrW(9654) MsgBoxW s End Sub
その他の回答 (5)
- HohoPapa
- ベストアンサー率65% (455/693)
どう頑張っても、Msgboxのメッセージ部分に ▶(UnicodeにはあるがShift-JISない文字) を表示することはできません。 もし他のルーチンで使っているMsgboxと違和感のない (あたかもMsgboxを使っているかのような) インターフェースにする必要があり、かつ、 課題文字を含める必要があるのであれば Formを使う必要があります。 他の方のコメントにあるAPIという手がありますが、 他のMsgboxとイメージが若干異なるので、 利用者にいらぬ違和感を感じさせてしまうかもしれません。 インターフェースに拘る必要があるのか、 メッセージテキストにこだわる必要があるのか、 コーディングの手間をどこまで割けるのか、 APIの使用を許容するのか、 後日誰かにソースコードを引き継ぐときに足かせとなるか といった総合的な視点が必要と思います。 むろん、 取るに足らない細部のインターフェースに拘る必要があり、 作りこまなければならないことも少なくありません。 今回の課題の代替えになるかどうか相当怪しいですし、 毛色がちょっと違いますが メッセージテキストの表示個所に ステータスバーを使い、 msgboxと抱き合わせて使う対応を思いつきます。 Application.StatusBar = ChrW(9654) MsgBox "ステータスバーを見て!" Application.StatusBar = False
お礼
ありがとうございます。 >メッセージテキストにこだわる必要があるのか、 ワークシート上の入力欄に漏れがあると、その左のセルに ▶ を表示させているので、入力漏れのまま注ぎの操作に移った場合の警告メッセージに「右向き三角を入力してください。」で逃げています。それを「▶のセルに入力してください。」としたかったのです。 今回はAPIで行こうと思います。
- imogasi
- ベストアンサー率27% (4737/17069)
知識経験とも少ないのですが、VBE画面でVBAのコードを作成中で、 その記号のユニコードが分かったとしても、文字列として、組み込みはうまく行かないようです。 ワードの文書の画面ではユニコード27a4として、ALTキーを押しつつxを押すと記号が出ます。しかしこれをVBE画面にコピペしようとしても?になるだけです。 Sub test11() Dim x As String x = "?" MsgBox x End Sub 「XXできない」と回答に書けるのは、相当広い、知識がないとならないのですが、小生にはありませんが、本件はあきらめるほうが良いのでは。 環境依存文字を探すより、欲望を抑えて、→矢印で済ませてはどうかな。 もう1つ失敗例 A1セルに ▶ 「さんかく」で出したもの。 Sub test02() x = WorksheetFunction.Unicode(Range("A1")) MsgBox x Y = WorksheetFunction.Unichar(x) MsgBox Y End Sub ?が返る。エクセル2013.
お礼
ありがとうございます。
- skp026
- ベストアンサー率45% (1010/2238)
文字化けしているということでしょうか。 以下の方法で表示できないか試してみてください。 https://rara-haha.com/2018/10/10/office-9/ リットルの記号文字なんかだとこうChrW(&H2113)みたいです。 ▶の文字コードを調べる手間はありますが、記事のようにWordを使えば確認できるようです。 いま手元に環境がないので、試してはいないことをお詫びします。すみません。 解決できると良いですね。 以上、解決できなかったらごめんなさい。
お礼
ありがとうございます。 25ご教示のURLの方法で▶の文字コードを調べると、25B6 のようでした。 さっそく、MsgBox ChrW(&H25B6) としてみましたが、メッセージボックスでは ? が表示されるだけでした。残念。
- HohoPapa
- ベストアンサー率65% (455/693)
VBAは、一部環境依存文字 (UnicodeにはあるがShift-JISない文字) に対応できていない部分があります。 例えば、 ・ソースコードに直書きできない ・msgboxでは使えない といった制限です。 Msgboxを使わず、 labelを配置したFormを用意し Showメソッドを使う必要があります。 また、課題の文字はソースコードに直書きできないので 文字列を適当なセルに埋め込んで使うとか ChrW関数を使って文字を拾う必要があります。
お礼
ありがとうございます。ユーザーフォームではなくメッセージボックスでやりたかったのです。
- not_spirit
- ベストアンサー率34% (901/2592)
「さんかく」と入力して変換すればいいだけの話では? あと、▶は「環境依存文字」ですので、 他のPCでは表示されなかったり、 別の記号が振り分けられている場合もあるので、共用には向きませんが。
お礼
ありがとうございます。 ワークシートへの入力はそうでしょうが、質問はVBAでメッセージボックスに表示させる方法です。 Sub test() MsgBox "▶" End Sub では、文字化けして駄目なんです。
お礼
ありがとうございます。 API関数ですか・・・・ ここまで大掛かりにやらないと右向三角▶はメッセージボックスに表示できないのですね。