dポイントプレゼントキャンペーン実施中!

下記URLのサンプルファイルに含まれるVBAで作成されたユーザー定義関数について、
Excel2003(Windows7)の環境で利用することが出来ました。
http://www.relief.jp/itnote/archives/003799.php

しかしながら、Excel2010およびExcel2013(ともにWindows7)で開くと、結果が
#VALUE! と変わってしまい、正しく表示されませんでした。

VBAの参照設定でも同じものにチェックを入れている状態ですが、うまくいきません。
(ただし、Microsoft Excel XX.X Object LibraryやMicrosoft Office XX.X Object Library
などバージョンの差異はあり)

Excel2010またはExcel2013において、このユーザー定義関数を
正しく利用できる方法が分かりましたらご教示いただけますと助かります。

A 回答 (1件)

64ビット版のWindowsをお使いの場合には、


MSScript.ocxが存在しないのでScriptControlも使えません。
ExcelではなくてWindowsが64ビットか32ビットか、の問題のようです。
#私は64ビットでインストール出来るものはすべて64ビットしか経験がないので、
#32ビットなら動くのかどうか、わかりませんが、、、。

『64ビット版OfficeでURLエンコード処理ができない?に対する返信1 』
http://dirtysexyquery.blogspot.jp/2011/10/64offi …
『64ビット環境でのScriptControlの代わり』
http://www.ka-net.org/office/of32.html
ダウンロード『•MSScript.ocxが存在しない64ビット版のWindowsでScriptControlを動作するようにします。』
http://www.eonet.ne.jp/~gakana/tablacus/scriptco …
以上、原因を知ることと、対策の可能性について、参考になると思います。

以下、元々64ビット環境用に書いていたものですが、
結果的に32ビットでもいけるので、汎用性を考えるとこんな感じになると思います。
関数名(2カ所)は、お好きなように。

' ' /// URL文字列(UTF-8)をデコードする(64bitOS対応)
Function DecodeUTF8(ByVal Source As String) As String
  Dim oHtmlFile As Object
  Dim oElement As Object

  Source = Replace(Source, "\", "\\")
  Source = Replace(Source, "'", "\'")

  Set oHtmlFile = CreateObject("htmlfile")
  Set oElement = oHtmlFile.createElement("span")
  oElement.setAttribute "id", "response"
  oHtmlFile.appendChild oElement
  oHtmlFile.parentWindow.execScript _
        "document.getElementById('response').innerText " _
        & "= decodeURIComponent('" & Source & "');", "JScript"
  DecodeUTF8 = oElement.innerText
End Function
    • good
    • 3
この回答へのお礼

ご回答ありがとうございます。
てっきりExcelのバージョン違いが原因と思い込んでしまい、
OSの32bit/64bitの違いに考えが至りませんでした。

また、教えて頂いたリンク先等を見て原因は分かっても、
自分のスキルでは動作するコードを書くことは出来なかったため、
コードもご提示頂きまして大変感謝しております。

こちらのWindows7 64bit & Excel2013 64bit環境で
利用できますこと、確認いたしました。

本当にありがとうございました!

お礼日時:2014/09/02 22:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!