[[20251211233441]] 『マクロで特殊文字』(ゆう) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『マクロで特殊文字』(ゆう)

マクロで特殊文字って使えないのですか?

●を㊡にしたいのですが?になってしまいます。
方法有りましたら教えてください

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

    With Target
        If Not Application.Intersect(.Cells, Range("B9:AF35")) Is Nothing Then
           Cancel = True
           .Offset(, 0).Value = IIf(.Offset(, 0).Value = "●", "", "●")
        End If
    End With

 End Sub

< 使用 Excel:Excel2021、使用 OS:Windows11 >


 文字化けするのは、VBAエディターがUnicode非対応だからです。
 ㊡の代わりに ChrW(12961)としてください。
 12961を得るには、ワークシートに㊡を入力し、UNICODE関数で求めることができます。

(xyz) 2025/12/11(木) 23:46:55


 補足しておきます。

 日本語環境ではVBAエディタは大昔から、CP932(Shift-JISのMicrosoft独自拡張)という文字コードを使っています。
 それは、Excel本体がユニコードに対応するようになってからも、
 VBAエディタは、後方互換性を考慮して従来のものが使い続けられています。
 (今後もたぶん変更されることはないと思います。)

 ㊡と言う文字は、CP932(Shift-JISのMicrosoft独自拡張)で定義されていないので、?と表示されてしまう訳です。

 そこで、ChrW 関数を使えば、これはユニコードにも対応しているので、その文字コードを指定することで
 (エディタ上に表示はできませんが)それを使うことはできます。
 例えば、以下のようにです。

 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
     Dim s As String
     s = ChrW(12961)
     With Target
         If Not Intersect(.Cells, Range("B9:AF35")) Is Nothing Then  
             Cancel = True
             .Value = IIf(.Value = s, "", s)
         End If
     End With
 End Sub

 (シート上の特定セル(例:A1)にその文字を入れ、 s = Range("A1").Value として文字列変数sにセットすることもできます。)
   こうすれば文字コードを調べなくてもOKですが、そのセルを消されないようにしないといけません)

 # 不明な点があれば遠慮なく質問を続けてください。反応がないのが一番残念なことです。 
(xyz) 2025/12/12(金) 21:02:50

解答ありがとうございます
解決していただき有難うございました。
凄いですね!この様なシステム上の癖があるとは思いませんでした。
この特殊文字のコード表みたいなものは存在するのでしょうか?

(ゆう) 2025/12/12(金) 22:33:31 


 使用しているIMEの 「IMEパッド 文字一覧」で一覧とそれぞれのコードが分かります。
 そのほか、"Unicode文字一覧表"でネット検索してみてはどうですか?
(xyz) 2025/12/12(金) 23:06:04

 ゆうさん KKさん コメントを無視ですか。図太いですね。
(xyz) 2025/12/18(木) 19:05:28

コメント返信:

[ 一覧(最新更新順) ]


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