Excel VBAで文字列をURLエンコードする方法を教えてください。
2023-07-24 22:38:08
質問
Excel VBA で文字列を URL エンコードする組み込みの方法はありますか、それともこの機能を手作業で行う必要がありますか?
どのように解決するのですか?
いいえ、何も組み込まれていません ( Excel 2013 まで この回答を見る ).
の3つのバージョンがあります。
URLEncode()
があります。
- UTF-8をサポートした関数です。 おそらくこれを使うべきでしょう (または 代替の実装 by Tom)を使用することで、最新の要件と互換性を持たせることができます。
-
参考と教育目的のために、UTF-8 をサポートしない 2 つの関数があります。
- サードパーティの Web サイトで見つけたもので、そのまま含まれています。(これは回答の最初のバージョンでした)
- 私が書いた、最適化されたバージョンの一つ
UTF-8 エンコーディングをサポートするバリアントは
ADODB.Stream
をサポートします (プロジェクトに "Microsoft ActiveX Data Objects" ライブラリの最新バージョンへの参照を含めてください)。
Public Function URLEncode( _
ByVal StringVal As String, _
Optional SpaceAsPlus As Boolean = False _
) As String
Dim bytes() As Byte, b As Byte, i As Integer, space As String
If SpaceAsPlus Then space = "+" Else space = "%20"
If Len(StringVal) > 0 Then
With New ADODB.Stream
.Mode = adModeReadWrite
.Type = adTypeText
.Charset = "UTF-8"
.Open
.WriteText StringVal
.Position = 0
.Type = adTypeBinary
.Position = 3 ' skip BOM
bytes = .Read
End With
ReDim result(UBound(bytes)) As String
For i = UBound(bytes) To 0 Step -1
b = bytes(i)
Select Case b
Case 97 To 122, 65 To 90, 48 To 57, 45, 46, 95, 126
result(i) = Chr(b)
Case 32
result(i) = space
Case 0 To 15
result(i) = "%0" & Hex(b)
Case Else
result(i) = "%" & Hex(b)
End Select
Next i
URLEncode = Join(result, "")
End If
End Function
この関数は で見つかりました。 :
Public Function URLEncode( _
StringToEncode As String, _
Optional UsePlusRatherThanHexForSpace As Boolean = False _
) As String
Dim TempAns As String
Dim CurChr As Integer
CurChr = 1
Do Until CurChr - 1 = Len(StringToEncode)
Select Case Asc(Mid(StringToEncode, CurChr, 1))
Case 48 To 57, 65 To 90, 97 To 122
TempAns = TempAns & Mid(StringToEncode, CurChr, 1)
Case 32
If UsePlusRatherThanHexForSpace = True Then
TempAns = TempAns & "+"
Else
TempAns = TempAns & "%" & Hex(32)
End If
Case Else
TempAns = TempAns & "%" & _
Right("0" & Hex(Asc(Mid(StringToEncode, _
CurChr, 1))), 2)
End Select
CurChr = CurChr + 1
Loop
URLEncode = TempAns
End Function
少し入っていたバグを修正しました。
私なら、上記のより効率的な(~2倍速い)バージョンを使うでしょう。
Public Function URLEncode( _
StringVal As String, _
Optional SpaceAsPlus As Boolean = False _
) As String
Dim StringLen As Long: StringLen = Len(StringVal)
If StringLen > 0 Then
ReDim result(StringLen) As String
Dim i As Long, CharCode As Integer
Dim Char As String, Space As String
If SpaceAsPlus Then Space = "+" Else Space = "%20"
For i = 1 To StringLen
Char = Mid$(StringVal, i, 1)
CharCode = Asc(Char)
Select Case CharCode
Case 97 To 122, 65 To 90, 48 To 57, 45, 46, 95, 126
result(i) = Char
Case 32
result(i) = Space
Case 0 To 15
result(i) = "%0" & Hex(CharCode)
Case Else
result(i) = "%" & Hex(CharCode)
End Select
Next i
URLEncode = Join(result, "")
End If
End Function
これら二つの関数はどちらもUTF-8エンコーディングに対応していないことに注意してください。
関連
-
[解決済み] リモート Git リポジトリの URI (URL) を変更するには?
-
[解決済み] ページを再読み込みせずにURLを変更するにはどうすればよいですか?
-
[解決済み] JavaScriptでクエリ文字列の値を取得するにはどうすればよいですか?
-
[解決済み] JavaScriptでURLをエンコードする?
-
[解決済み] アプリケーションからAndroidのWebブラウザでURLを開くにはどうすればよいですか?
-
[解決済み] クエリ文字列パラメータのJava URLエンコーディング
-
[解決済み] Excel VBA Projectのパスワードを解読する方法はありますか?
-
[解決済み】「GET」パラメータから値を取得する(JavaScript)【重複】。
-
[解決済み】Node.jsでBase64エンコードを行うにはどうすればよいですか?
-
[解決済み】Excel VBAでSelectを使用しないようにする方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Microsoft Excelで正規表現(Regex)をセル内とループの両方で使用する方法
-
[解決済み] 時間ではなく、時間DURATIONで仕事をする
-
[解決済み] 1行目とA列目を同時に凍らせる
-
[解決済み] ExcelでセルのバイトをKB, MB, GBのようにフォーマットするにはどうすればよいですか?
-
[解決済み] セルが変わると自動的にExcelマクロを実行する
-
[解決済み] CELL TO THE LEFT」を参照するためのExcelの計算式
-
[解決済み] VBAを使用してプログラム的に参照を追加する方法
-
[解決済み] マクロを使用してExcelワークブックのすべてのピボットテーブルをリフレッシュする
-
[解決済み] Cellの値がColumnに存在するかどうかを確認し、Next Cellの値を取得する。
-
[解決済み] vbaのdimとsetの違いは何ですか?