解決済みですが、参考までに。
VBAのString型は、Office2000以降は Unicodeになってます。
ところが、VBE(コード入力画面)は、いまだに Shift-JIS のままなのです。
ですので、㎠ のようなUnicodeにはあるがShift-JISない文字は、入力しても?に文字化けします。
解決済みの回答では、独自の関数を使って解決していますが、標準でUnicode文字を表現する関数が用意されてます。
例えば、 ㎠ を表現するには、ChrW関数を使って、ChrW(13216)
とします。
13216
という文字コードを調べるには、AscW関数を使います。
A1セルに ㎠ を入力して、イミディエイトウィンドウで、
?AscW(Range("A1"))
と入力してEnterキーを押せば 13216
が出力されます。
また、質問のコードですが、同じセルを何度も参照するのは無駄なので,Select Case を使うとシンプルになります。
vba
1 Dim cm2 As String
2 cm2 = ChrW(13216)
3
4 Select Case Range("C7").Value
5 Case "(0)なし"
6 r7 = 0
7 Case Replace("(6)4?未満", "?", cm2)
8 r7 = 6
9 Case Replace("(9)4?以上16?未満", "?", cm2)
10 r7 = 9
11 Case Replace("(12)16?以上36?未満", "?", cm2)
12 r7 = 12
13 Case Replace("(24)36?以上", "?", cm2)
14 r7 = 24
15 End Select
別案
対象文字列と結果を比べてみると、( )内の数値を取り出しているようなので、下記のようなコードでもよさそうです。
vba
1 Dim s As String
2 s = Range("C7").Value
3
4 If s Like "(#)*" Then
5 R7 = Val(Mid(s,2,1))
6 ElseIf s Like "(##)*" Then
7 R7 = Val(Mid(s,2,2))
8 End If
補足
thom.jpさんの回答のリンク先でNBSP(ノーブレークスペース)を通常の半角スペースに変換する自作関数が紹介されていますが、NBSPは、ChrW(160)で表現できます。ということで、
Replace(Range("A1").Value, ChrW(160)," ")
で変換できます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/18 13:06