VBAでASCIIコード(漢字)への変換を行うコードが必要となりましたので、作成して頂けると嬉しいです。


例:
hogehoge 清水 愛 > hogehoge 清水 愛

よろしくお願いします。

逆変換のコードは
http://q.hatena.ne.jp/1286454563
の質問の最初の回答 Hatena_ReoReo7_101007_01()
を作って頂き、大変有用でしたが、(順)変換が必要となりましたので再度質問させて頂きます。XMLは利用しないやり方でお願いできればと思います。

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2010/11/05 21:52:40
  • 終了:2010/11/06 10:45:10

ベストアンサー

id:Silvanus No.2

Silvanus回答回数174ベストアンサー獲得回数672010/11/05 22:27:39

ポイント40pt

果たしてこんなんでええんやろか…。

Option Explicit

Sub Hatena_ReoReo7_101105_01()

Debug.Print strCnvUcCN_Rvrs("hogehoge 清水 愛")

End Sub

Function strCnvUcCN_Rvrs(strSrc As String) As String

Dim strCnv As String
Dim str1Ch As String
Dim intPos As Integer

strCnv = ""
    For intPos = 1 To Len(strSrc)
        str1Ch = Mid(strSrc, intPos, 1)
            If AscW(str1Ch) < 256 Then
                strCnv = strCnv & str1Ch
            Else
                strCnv = strCnv & "&#x" & Hex(AscW(str1Ch)) & ";"
            End If
    Next
strCnvUcCN_Rvrs = strCnv

End Function
id:ReoReo7

ありがとうございます。スペースをスペースとして吐き出してくれるのですね。

どちらの使い方が良いのかは検討してみたいと思いますが、両方を比較検討できるのが大変助かります。ありがとうございました。

2010/11/06 10:43:12

その他の回答(1件)

id:taknt No.1

きゃづみぃ回答回数13538ベストアンサー獲得回数11982010/11/05 22:26:06

ポイント40pt
Sub test()
    Debug.Print strCnvCNUc("清水愛")
End Sub

Function strCnvCNUc(a As String)
    For b = 1 To Len(a)
        c = c & "&#x" & Hex(AscW(Mid(a, b, 1))) & ";"
    Next b
strCnvCNUc = c
End Function

strCnvCNUc("清水愛")
で "&#x6E05;&#x6C34;&#x611B;"と
返してくれます。
id:ReoReo7

ありがとうございます。スペースも"&#x68セミコロン"のようなコードに変換してくれるのですね。

2010/11/06 10:42:21
id:Silvanus No.2

Silvanus回答回数174ベストアンサー獲得回数672010/11/05 22:27:39ここでベストアンサー

ポイント40pt

果たしてこんなんでええんやろか…。

Option Explicit

Sub Hatena_ReoReo7_101105_01()

Debug.Print strCnvUcCN_Rvrs("hogehoge 清水 愛")

End Sub

Function strCnvUcCN_Rvrs(strSrc As String) As String

Dim strCnv As String
Dim str1Ch As String
Dim intPos As Integer

strCnv = ""
    For intPos = 1 To Len(strSrc)
        str1Ch = Mid(strSrc, intPos, 1)
            If AscW(str1Ch) < 256 Then
                strCnv = strCnv & str1Ch
            Else
                strCnv = strCnv & "&#x" & Hex(AscW(str1Ch)) & ";"
            End If
    Next
strCnvUcCN_Rvrs = strCnv

End Function
id:ReoReo7

ありがとうございます。スペースをスペースとして吐き出してくれるのですね。

どちらの使い方が良いのかは検討してみたいと思いますが、両方を比較検討できるのが大変助かります。ありがとうございました。

2010/11/06 10:43:12
  • id:ReoReo7
    お二方のコードの良否は甲乙つけられませんでした。質問ではスペースの扱いの指定が無かったのですが、質問の仕様の通りに変換できることと、2回目の回答ということでいるか賞を選ばせて頂きます。お二方へ、ありがとうございました。
  • id:a-kuma3
    どんな用途で実体参照を使うのか分からないけど、
    回答2> If AscW(str1Ch) < 256 Then
    は、256→128の方が良いと思う。
    「×」を試してみれば分かる。
  • id:ReoReo7
    ご指摘ありがとうございます。128に変更して使いたいと思います。

    GETメソッドでMySQLに直接投稿するURL用のデータです。URLに直接書き込むデータ(日本語含む)を入力しています。
    URLに使われるコードなので大丈夫かと思いましたが、試してみたら&や'が引っかかってダメですね。。。

    現状、&amp;→$、'→~、" "→"_"、" "→"_"のように変換していますが、MySQLとの親和性などの点で良い方法なのか疑問です。うまい方法は無いでしょうか?

    今思いついたのが、GETで直接投稿するのではなく、フォームを一発かまして、その投稿データをphpで受け取る際にurlencode()したら良いんでしょうか?ちょっと試す時間は今はないです。。
  • id:Silvanus
    >a-kuma3さん
    あ、そうでした…128以降は記号類があるから避けないといけないんでしたね…。
    御指摘有難うございます。
    >ReoReo7さん
    いつも「抜けてる」回答で申し訳ないです…。
    MySQL向けのものですか…って、MySQLのことは全然判らないのでちんぷんかん(涙)。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません