macでOfficeの最新記事

Excel for mac(2011) VBAの内部コードはSJIS?

Excel for mac のVBA でexecShell


StackoverflowにVBAでpopenを使った呼び出し方法がありました。
http://stackoverflow.com/questions/6136798/vba-shell-function-in-office-2011-for-mac

dllの代わりにdylibの関数も呼び出せるんですね。
Private Declare Function system Lib "libc.dylib" (ByVal command As String) As Long
Private Declare Function popen Lib "libc.dylib" (ByVal command As String, ByVal mode As String) As Long
Private Declare Function pclose Lib "libc.dylib" (ByVal file As Long) As Long
Private Declare Function fread Lib "libc.dylib" (ByVal outStr As String, ByVal size As Long, ByVal items As Long, ByVal stream As Long) As Long
Private Declare Function feof Lib "libc.dylib" (ByVal file As Long) As Long


popenで呼び出すことができるメリット


内蔵されているShell関数は、コマンドを実行することができますが、
そのコマンドが標準出力等へ出力した結果を直接得ることができません。

popenを使うことで、
osxのシェル系コマンドを呼び出して、コマンドの実行結果をVBA内で得ることが
できます。

VBAでpopen


早速、execShellの呼び出しを確認してみます。
execShell("pwd", exitCode)の結果は、/(root)でした。
execShell("locale", exitCode)の結果は、C (英語圏)でした。

execShell("echo あいうえお", exitCode)とすると”あいうえお"がイミディエイトに出力されます。

ふと、ここで疑問が・・Windows系のVBA、標準文字コードはUnicodeと言われていますが
Macでは?

execShellでVBA(mac)の文字コードを確認


execShell("echo ""あいうえお"">/tmp/a.txt", exitCode)
として実行し、odコマンドで出力されたコードを確認します。
$ od -x /tmp/a.txt
0000000 a082 a282 a482 a682 a882 000a
0000013

Unicodeの「あ」は、U+3042(http://ja.wikipedia.org/wiki/Unicode一覧_3000-3FFF)ですが、
a082
IntelCPUを使っているのでリトルエンディアンなので、
実際のコードは、82a0=Shift_JISっていうことになります。


本当にSJISなのか?


String型をByte型に変換して、中身を確認してみます。

Sub Test2()
Dim b() As Byte
Dim s As String
s = "1234567890あいうえお"
b = s
For i = LBound(b) To UBound(b)
Debug.Print i & ": " & Hex(b(i))
Next i
End Sub

結果は、4230 -> 3042でUnicodeの「あ」です。

0: 42
1: 30


???
VBAから呼び出したpopenで渡される「あ」は、SJIS。
VBA内の「あ」は、Unicode。

[ACC2000] Unicode と文字列操作関数の留意点のANSI形式で保持されていて、VBAのObjectを経由するとUnicodeになっているってことなんでしょうか・・
もう少し、学習が必要そうです。

 

 

Excel for mac(2011) VBAの内部コードはSJIS?
サブコンテンツ

コメント

comments powered by Disqus

2018.12.15 macyarounanoka(管理者)のメールアドレスを失って、disqusにログインできなくなっていました。 そのためmacyarounanoka-2で返信するように変わっています。 エキサイトのフリーメールアドレス使っていたことに気がつけませんでした。 ちょっとやってしまいました感がありますOrz。 記事へのコメントはいままで通りdisqusでお願いします。 個別のお問い合わせはお問い合わせからお願いします。
2013.8.19 DISQUS(外部コメントサービス)の利用を開始しました。
Facebook, google, Twitter等のアカウントで投稿可能です。


↓↓Office365 Soloは年間契約がお得です↓↓
Microsoft Public Affiliate Program (JP)

  • 祝!初マック(mac book retina 13インチ)!retina美しいです^^マックに関係するTips、情報、はまったことの解決策等
  • Mac野郎なのか
  • プロフィール

このページの先頭へ