
Excelにおいて、マクロを使ってShint-JIS形式のエンコードを行いたいのですが
その方法(ソース)がネット上で見つかりません。。どなたかご教授いただけないでしょか!
※VBA(マクロ)について、ぜんぜん詳しくありません。。
検索 ⇒ %8c%9f%8d%f5
UTF-8の場合ならば、シンプルなものが見つかりました。
-----------------------------------------------------
Public Function UrlEncode(ByVal sText As String) As String
If Len(sText) = 0 Then Exit Function
With CreateObject("ScriptControl")
.Language = "JScript"
UrlEncode = .CodeObject.encodeURIComponent(sText)
End With
End Function
また、デコードするものも見つかりました。
-----------------------------------------------------
Function URLDecodeSJIS(src)
src = UnEscape(src)
For i = 1 To Len(src)
srcCh1 = AscW(Mid(src, i, 1))
If (&H0 <= srcCh1 And srcCh1 <= &H80) Or (&HA0 <= srcCh1 And srcCh1 <= &HDF) Then
URLDecodeSJIS = URLDecodeSJIS & Chr(srcCh1)
ElseIf (&H81 <= srcCh1 And srcCh1 <= &H9F) Or (&HE0 <= srcCh1 And srcCh1 <= &HFF) Then
i = i + 1
srcCh2 = AscW(Mid(src, i, 1))
clcCh = srcCh1 * 256 + srcCh2
If (Asc(Chr(clcCh)) And &HFFFF&) = clcCh Then clcCh = Chr(clcCh)
URLDecodeSJIS = URLDecodeSJIS & clcCh
End If
Next
End Function
Function UnEscape(s)
With CreateObject("MSScriptControl.ScriptControl")
.Language = "VBScript"
.Reset
UnEscape = .Eval("unescape(""" & s & """)")
End With
End Function
よろしくお願い致します。
No.1ベストアンサー
- 回答日時:
なかなか回答がつかないようなので、自信はありませんが回答させていただきます。
(回答がつかないよりはいいと思いますので・・・)
文字をシフトJISの文字コードに直すには、単にAsc関数を使えばいいはずです。ただし、文字コードが&H8000 (32768) 以上のものは負になるので補正が必要です。
Function CharToSJISCode(Char As String) As Long
Dim c As Long
c = Asc(Char)
If c < 0 Then c = c + &H10000
CharToSJISCode = c
End Function
1バイト文字のエンコードですが、文字コードが&H7F (127) 以下のものですが、おそらくUTF-8と同じだと思いますので質問者様提示の関数 UrlEncode をそのまま使わせていただきます。
&H80から&HFF (128から255)はおそらくすべてエンコードすればいいと思います。エンコードの方法は文字コードの16進数2桁の左に%をつけます。
(1バイト文字については特に自信がありません)
Function EncodeSJIS1byte(code) As String
If code <= &H7F Then
EncodeSJIS1byte = UrlEncode(Chr(code))
Else
EncodeSJIS1byte = "%" & Hex(code)
End If
End Function
2バイト文字のエンコードですが、二つに分割して1バイトずつエンコードするのはよいとして、Wikipediaのパーセントエンコーディング(http://ja.wikipedia.org/wiki/%E3%83%91%E3%83%BC% … のところを読むと、すべてエンコーディングしても、1バイト文字と見なして必要なものだけエンコーディングしてもいいようです。ここでは、後者の方法、具体的には今書いたばかりのEncodeSJIS1byteでエンコードするようにしてみます。
Function EncodeSJIS2byte(Code) As String
EncodeSJIS2byte = EncodeSJIS1byte(Code \ &H100) & EncodeSJIS1byte(Code Mod &H100)
End Function
これまで書いた関数を用いてシフトJISエンコードを書きます。
Function UrlEncodeSJIS(SStr As String) As String
Dim DStr As String
Dim i As Long, c As Long
For i = 1 To Len(SStr)
c = CharToSJISCode(Mid(SStr, i, 1))
If c < &H100 Then
DStr = DStr & EncodeSJIS1byte(c)
Else
DStr = DStr & EncodeSJIS2byte(c)
End If
Next
UrlEncodeSJIS = DStr
End Function
以上です。
最初に申し上げたとおり自信がありません。
そのため、ご使用になる際は十分にテストして不具合がないか確認していただきたくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
10Mバイトて文字数に すると何...
-
UTF-8で5~6バイトになる文字コ...
-
COBOLのCOMP形式について
-
char str[256]の256の意味は?
-
エクセルシート名の制限を変更...
-
日付時刻を4バイトに
-
VB.NET LeftBの代用
-
文字コードの利点・欠点について
-
「1TB」のHDDに日本語は何字入...
-
VBSでテキストファイルの文字列...
-
ホームページビルダーで行間を...
-
PINVOKEで構造体配列をマーシャ...
-
Excel 1セル当りの文字数が2...
-
DataGridViewの特定列に入力さ...
-
Excel VBA メール作成について ...
-
stable diffusionのエラー
-
CGIを勉強しています。¥n(改...
-
【Excel VBA】10進数を2進数に...
-
micropythonコード 修正
-
エラー「書き込み中にアクセス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
char str[256]の256の意味は?
-
COBOLのCOMP形式について
-
バイト列とバイナリ列の違いが...
-
エクセルシート名の制限を変更...
-
ピクセル,dpiから容量(バイト...
-
ビットスワップとバイトスワッ...
-
テキストBOXの入力制限について
-
機種依存文字をチェックしたい。
-
「1TB」のHDDに日本語は何字入...
-
C++ Builderで文字列をバイトに...
-
全角半角を調べるライブラリ関...
-
SQLで1バイト、2バイト混在...
-
VB6とSQL Serverの桁の扱い方に...
-
jis x 0208 について
-
VBAでShift-JISのURLエンコード
-
この関数はどのプログラミング...
-
COBOL PICTUREで X,S,Vの意味
-
半角、全角の判別方法
おすすめ情報