
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) Excel VBAの解読について質問があります。 概要は、マクロでチェックボックスにチェックすると日 1 2023/02/10 07:50
- Visual Basic(VBA) エクセルのマクロとシートの保護について教えてください。 1 2022/10/18 08:36
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたい 6 2023/01/23 12:00
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/03 09:11
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
COBOLのCOMP形式について
-
char str[256]の256の意味は?
-
バイト列とバイナリ列の違いが...
-
エクセルシート名の制限を変更...
-
ビットスワップとバイトスワッ...
-
Javaで日本語1文字のバイト数
-
windowsのファイルパス最大文字数
-
memcmp バイナリデータの比較方法
-
【VB2005】テキストボックス内...
-
日付時刻を4バイトに
-
C++ Builderで文字列をバイトに...
-
ワイド文字のバイト数が取得で...
-
3バイト文字(UTF-8)をprintfで...
-
Console.writeLineで文字化け
-
VBAでShift-JISのURLエンコード
-
機種依存文字をチェックしたい。
-
:(コロン)のKeyCode
-
GetWindowTextでアドレスバーか...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
COBOLのCOMP形式について
-
エクセルシート名の制限を変更...
-
char str[256]の256の意味は?
-
バイト列とバイナリ列の違いが...
-
ピクセル,dpiから容量(バイト...
-
C++ Builderで文字列をバイトに...
-
Javaで日本語1文字のバイト数
-
ビットスワップとバイトスワッ...
-
SQLで1バイト、2バイト混在...
-
バイナリとBCDコード
-
URLは最高何文字まで可能なので...
-
機種依存文字をチェックしたい。
-
VBAでShift-JISのURLエンコード
-
COBOL PICTUREで X,S,Vの意味
-
memcmp バイナリデータの比較方法
-
pythonでバイナリデータを配列...
-
64bit対応
-
3バイト文字(UTF-8)をprintfで...
おすすめ情報