タイ語などを直接入力するには(下図)を使って設定しますが、ここでは 簡単な VBA を使ってキーボード感覚でタイプ入力できるようにしました。ここのプロシージャは極めて単純なので、
図1.キーボード
図2.
以下 Word でのタイ語について記述します。( Excel でも実行できます。末尾参照) 図1.はタイ語キーボード配列の例です。小さい文字は拡大表示しています。
図2.のようにカーソル位置で VBA 実行するとキーボード入力のタイ文字が挿入されます。
VBA を起動して InputBox にキーボードからタイプし、例えば "8" のキー なら以下の対応表から "ค" の文字がカーソル位置に挿入されます。InputBox には通常一度に複数文字を半角英数での書き込み Enter を押します。該当するキーボード文字 ( kAr() ) がない場合は InputBox で入力した文字がそのまま出力されます。InputBox には default が表示されますが不必要な場合(不必要の方が多い)、その都度消去などしないで完全無視してタイプします。
漢字なども使えるようにし、例えば "水" と入力し น้ำ が出力できるようにしてあります。
対応表
Thai | 十進数 | 16進数 | kAr() | |
1 | ก | 3585 | 0E01 | d |
2 | ข | 3586 | 0E02 | - |
3 | ฃ | 3587 | 0E03 | ] |
4 | ค | 3588 | 0E04 | 8 |
5 | ฅ | 3589 | 0E05 | } |
6 | ฆ | 3590 | 0E06 | S |
7 | ง | 3591 | 0E07 | : |
8 | จ | 3592 | 0E08 | 0 |
9 | ฉ | 3593 | 0E09 | C |
10 | ช | 3594 | 0E0A | ^ |
11 | ซ | 3595 | 0E0B | + |
12 | ฌ | 3596 | 0E0C | G |
13 | ญ | 3597 | 0E0D | P |
14 | ฎ | 3598 | 0E0E | E |
15 | ฏ | 3599 | 0E0F | D |
16 | ฐ | 3600 | 0E10 | ` |
17 | ฑ | 3601 | 0E11 | R |
18 | ฒ | 3602 | 0E12 | < |
19 | ณ | 3603 | 0E13 | I |
20 | ด | 3604 | 0E14 | f |
21 | ต | 3605 | 0E15 | 9 |
22 | ถ | 3606 | 0E16 | 5 |
23 | ท | 3607 | 0E17 | m |
24 | ธ | 3608 | 0E18 | T |
25 | น | 3609 | 0E19 | o |
26 | บ | 3610 | 0E1A | @ |
27 | ป | 3611 | 0E1B | x |
28 | ผ | 3612 | 0E1C | z |
29 | ฝ | 3613 | 0E1D | / |
30 | พ | 3614 | 0E1E | r |
31 | ฟ | 3615 | 0E1F | a |
32 | ภ | 3616 | 0E20 | 4 |
33 | ม | 3617 | 0E21 | , |
34 | ย | 3618 | 0E22 | p |
35 | ร | 3619 | 0E23 | i |
36 | ฤ | 3620 | 0E24 | A |
37 | ล | 3621 | 0E25 | [ |
38 | ฦ | 3622 | 0E26 | ? |
39 | ว | 3623 | 0E27 | ; |
40 | ศ | 3624 | 0E28 | L |
41 | ษ | 3625 | 0E29 | K |
42 | ส | 3626 | 0E2A | l |
43 | ห | 3627 | 0E2B | s |
44 | ฬ | 3628 | 0E2C | > |
45 | อ | 3629 | 0E2D | v |
46 | ฮ | 3630 | 0E2E | V |
47 | ฯ | 3631 | 0E2F | O |
48 | ะ | 3632 | 0E30 | t |
49 | ั | 3633 | 0E31 | y |
50 | า | 3634 | 0E32 | k |
51 | ำ | 3635 | 0E33 | e |
52 | ิ | 3636 | 0E34 | b |
53 | ี | 3637 | 0E35 | u |
54 | ึ | 3638 | 0E36 | 7 |
55 | ื | 3639 | 0E37 | n |
56 | ุ | 3640 | 0E38 | 6 |
57 | ู | 3641 | 0E39 | & |
58 | ฺ | 3642 | 0E3A | |
59 | | 3643 | 0E3B | |
60 | | 3644 | 0E3C | |
61 | | 3645 | 0E3D | |
62 | | 3646 | 0E3E | |
63 | ฿ | 3647 | 0E3F | ' |
64 | เ | 3648 | 0E40 | g |
65 | แ | 3649 | 0E41 | c |
66 | โ | 3650 | 0E42 | F |
67 | ใ | 3651 | 0E43 | . |
68 | ไ | 3652 | 0E44 | w |
69 | ๅ | 3653 | 0E45 | |
70 | ๆ | 3654 | 0E46 | q |
71 | ็ | 3655 | 0E47 | H |
72 | ่ | 3656 | 0E48 | j |
73 | ้ | 3657 | 0E49 | h |
74 | ๊ | 3658 | 0E4A | U |
75 | ๋ | 3659 | 0E4B | J |
76 | ์ | 3660 | 0E4C | N |
77 | ํ | 3661 | 0E4D | |
78 | ๎ | 3662 | 0E4E | |
79 | ๏ | 3663 | 0E4F | |
80 | ๐ | 3664 | 0E50 | Q |
81 | ๑ | 3665 | 0E51 | " |
82 | ๒ | 3666 | 0E52 | # |
83 | ๓ | 3667 | 0E53 | $ |
84 | ๔ | 3668 | 0E54 | % |
85 | ๕ | 3669 | 0E55 | ( |
86 | ๖ | 3670 | 0E56 | ) |
87 | ๗ | 3671 | 0E57 | _ |
88 | ๘ | 3672 | 0E58 | = |
89 | ๙ | 3673 | 0E59 | ~ |
90 | ๚ | 3674 | 0E5A | |
91 | ๛ | 3675 | 0E5B |
変数など
文字番号、タイ文字、Unicode 十進数と16進数、キーボード文字の対応表を左に表示しています。
kAr() には ( Keyboard の文字 ) が番号順に格納されます。例えば "ก"を表示するため kAr(1) には "d" が入ります。タイキーボードで ๗ の文字 (87番目) は Shift + 0 (ゼロ) ですが、文字が表示できないのでここでは アンダースコア 『 _ 』 で代用しています。
VBA コードは一部改訂により行ナンバーがずれていますが、以前のバージョンのままにしています。
(6行目) の a は Unicode 十進数の最初の数字、x, y は InputBox の表示位置で、邪魔にならない場所に変更できます。 (11行目)に
s = Replace(s, "水","ohe")
とありますが、必要に応じて入力全角文字とキーボード文字対応を (11行目)〜(13行目) に挿入し何個でも追加することができます。全角文字は "みず" のように複数の文字を使っても構いません。例えば
s = Replace(s, "目", "9k") s = Replace(s, "固", "c-H:")
を追加しておいて、"目"、"固" で "目" や "固い" のタイ語、また "水目" や "水固" と入力して "泪 (น้ำตา )"、 "氷 (น้ำแข็ง )" の単語を出力させることができます。
また、 s = Replace(s, "好", "CyoiydgTv") を追加挿入しておいて "好" の文字でよく使うお好みのフレーズを出力させることも考えられます。
ดู พจนานุกรม
他言語への変更
他言語に作り替えるには (6行目) の a を変更し、新しいキーボード文字対応の配列変数 kAr() を作成するだけでOKです。
他言語の実例
例えば a = 3330 とし、w を次のようにするとマラヤーラム語に変身します。
w = " x = D E F R G T ~ Z S W A Q k K i I U" & _ " ; + p P { : * @ ` C l L o O v h H y Y c / j J" & _ " n N B b M < m u e f r g t ^ z s w a q d" & _ " | 0 1 2 3 4 5 6 7 8 9 "
また a=1548 とし, w を
w = " K P ? x N H c Y h f m j e @ p o [ v . s a w q : / u" & _ " y t r ; g l i , n d W R A Q E S X "
とするとアラビア語になり、文字は左方向に挿入されます。
a=1025
W = " ? F < D U L T + P B Q R K V Y J G H C N E A ` W X I O" & _ " { S M * > Z f M d u l t ; p b q r k v y j g h c n e a @ w x i o [ s m : . z _ "
ではロシア語になります。
当然のことですがこのままではタイの長い首都名等は正しく表示されません。
独自の言語に変更(1) 対応表の作成
Excel で新しい言語の対応表を作成します。十六進数は必ずしも必要ではありません。。取り敢えず、表見出しも含めここの対応表と同じ書式で オートフィル等利用して作成します。2列目の文字は以下を実行すれば埋まります。
c は最初のセルで ワークシートの B2 セル、 a、 91 はタイ語の場合での 最初の文字十進数 (3585)および領域数です。
独自の言語に変更(2) kAr() の作成
キーボード文字を配列変数 kAr() に割り当てるには対応表を参照しながら
などと単純に列記するのが簡単です注*。キーボードの文字は最大でも 100文字もないので面倒でもこの方が良いでしょう。その場合、(1行目) は Dim kAr(##) などとし (2行目)〜(5行目) は削除します。## の数字は Unicode 文字領域数( ここの対応表では ## は 91 )です。
コード (2 〜4 行目) の文字列を独自に作成するには対応表の 5列目部分を選択したうえで、
を Excel イミディエイト・ウインドウで実行すると文字列結合注**されて簡単です。最後の space はあっても無くても構いません。VBA で特別な意味を持つ引用符 『 " 』に注意しないとエラーが出たり対応関係がずれてしまったりします。
注*kAr() に割り当てる少し簡単な方法があります。Excel の文字の対応表で Shift を使って表示される文字がコンピューターによっては異なることがあります。また、キーボード配列は何種かあるようです。不具合があれば適宜 kAr() を変更する必要があります。
(17行目) の 『 .InsertAfter vbCr: .Start = .End - 1: .Delete 』 の部分は筆者が InsertAfter の理解不足で記入した部分です。これが無いと InputBox を閉じないと挿入文字が表示されないからです。
Excel で実行する場合は、アクティブセルに入力され、入力後は下のセルに移ります。なお(行番号) はこのページでの記述の便宜上だけなので、再編集の時には削除したほうがよいです。
Set c = Range("b2"): a = c.Range("b1").Value
For i = 1 To 91
c.Cells(i, 1).Value = ChrW(a + i - 1)
Next
kAr(1)="d": kAr(2)="-": kAr(3)="]": kAr(4)="8": kAr(5)="}": ……
w=" ": for each c in selection: w= w & c.value & " ": next: ?w
=IF(E2="","","kAr("&A2&")="&CHAR(34)&E2&CHAR(34)&":")
を F2 セルに入力すると kAr(1)="d": となります。これを表末尾までコピーして値のみの貼り付けにします。F 列の文字部分を選択し文字列の結合注**を応用すれば自動的にできます。
余録
Sub typethai()
Dim kAr '=Word (Excel)タイ語キー入力 Ver. 3.2.1 ===== ' 1
w = " d - ] 8 } S : 0 C ^ + G P E D ` R < I f 9 5 m T o @ x z / r a 4 , p i A [ ? ; L" & _
" K l s > v V O t y k e b u 7 n 6 & ' g c F . w q H j h U J N Q " & Chr(34) & _
" # $ % ( ) _ = ~ " '4
kAr = Split(w) '5
a = 3585: x = 100: y = 100: w = "最も長い首都名": kAr(0) = "di6:gmrO" '6
If InStr(Application.Name, "Excel") Then Ap = "Excel"
myLoop: '7
s = InputBox(kAr(0) & " とタイプすると" & w & _
" が挿入されます。" & vbCr & "終了はキャンセル", "Type In", kAr(0), x, y) '9
w = "前回入力と同じ": kAr(0) = s: If s = "" Then End '10
s = Replace(s, "水", "ohe") '11
For i = 1 To UBound(kAr) '13
s = Replace(s, kAr(i), ChrW(a + i - 1)) '14
Next '15
If Ap = "Excel" Then ActiveCell.Value = s: ActiveCell.Range("a2").Activate: GoTo myLoop
With Selection '16
.InsertAfter Text:=s: .InsertAfter vbCr: .Start = .End - 1: .Delete '17
End With '18
GoTo myLoop '19
End Sub
このサイトで扱った項目