痔になりやすい生活習慣とは?

1.環境
Microsoft Windows7 64ビット
Microsoft Ofiice2013 Excel2013 32ビット

2.事象
テキストファイルに定義しているUNICODEを読むと文字化け(?)します。
メモ帳等のテキストファイル上はUNICODEを文字化けせずに目視で確認しています。
どうしたら文字化けせずに読めるのでしょうか?
どなたか詳しい方、ご教授願います。

3.テキストファイル(test.dat)


4.VBA
・参照設定([ツール(T)]バー-[参照設定(R)…])
レ Microsoft ActiveX Data Objects 2.8 Library

・ソース
※例どっちでも、文字化けします。
Dim a, b As String
例1)
With CreateObject("ADODB.Stream")
.Charset = "UTF-8"
.Type = adTypeText
.Open
.LoadFromFile "C:\test.dat"
a = .ReadText
.Close
End With

例2)
Open "C:\test.dat" For Input As #1
Do Until EOF(1)
Line Input #1, b
Loop
Close #1

質問者からの補足コメント

  • うーん・・・

    UTF-16LEに変更して実行後、下記のエラーが出ました。
    困っています。
    解消方法を願います。

    ■エラー詳細
    Err.Number:3001
    Err.Description:引数が間違った型、許容範囲外、または競合しています。

    No.1の回答に寄せられた補足コメントです。 補足日時:2016/09/16 11:43
  • どう思う?

    64ビット版の秀丸エディタで、開きました。
    次に[メニュー]バー-[ファイル]-[名前を付けて保存(A)…]
    名前を付けて保存画面
    エンコードの種類(C): [自動判定 - Unicode(UTF-8)] □BOMを付ける(※チェック無)

    No.2の回答に寄せられた補足コメントです。 補足日時:2016/09/16 14:26
  • どう思う?

    Unicode(UTF-8) BOMはグレー表示(BOM無)になっています。
    開いたファイルの内容は、秀丸できちんと表示されています。

    No.3の回答に寄せられた補足コメントです。 補足日時:2016/09/16 15:13
  • うーん・・・

    ソースの提供ありがとうございました。
    下記のようにして参照設定を変更してソース実行をしました。

    まだ、文字化け(?)をします。
    ちなみに試しに①は、文字化け(?)をせずにきちんと表示されました。
    また、Microsoft ActiveX Data Objects 2.8 Libraryに戻して、実行も文字化けしています。
    後、例1の実行も文字化けしています。

    ■参照設定の変更
    ・参照設定([ツール(T)]バー-[参照設定(R)…])
    レ Microsoft ActiveX Data Objects 6.1 Library

    No.5の回答に寄せられた補足コメントです。 補足日時:2016/09/16 16:20
  • うーん・・・

    皆さん、様々な情報ありがとうございます。
    秀丸で❶を改行付き、Unicode16(UTF-16) □BOMを付ける(※チェック有)で保存

    > この文字をexcelのシートに直接出力すれば、きちんと表示されます。
    結果は文字化けです。
    (◆◆の中に(?)v')が見れました。
    > ・読み込んだテキストがどんな文字列になっているか、1文字1文字ascWでコードを調べる
    -3でした。
    > Shift_JISに無い「黒地の丸数字」が変換できずに「文字化け」になっている、というものです。
    と自分も思います。
    書き忘れていたのですが、したい事はExcelVBAを通して別のテキストファイルに❶を出力させる事です。
    今の文字化け状態で別のテキストファイルにそのまま出力で、あるソフト変換にて正しく表示出来ればOKです。
    果たしてそのUnicodeを維持していればいいのですが…

    No.9の回答に寄せられた補足コメントです。 補足日時:2016/09/18 18:13
  • うれしい

    皆さんのアドバイスを元に色々、試しました。
    結果、NGです。
    発想を変えて、入力テキストファイルから出力テキストファイルではなく、シートのセルから出力テキストファイルに変更しました。
    結果、OKです。
    これは、セル自体にUnicodeを対応していると思っています。
    自分だけでは、解決出来ず、皆さんのアドバイズに感謝しています。
    ありがとうございました(__)。

      補足日時:2016/09/22 10:52

このQ&Aに関連する最新のQ&A

A 回答 (14件中1~10件)

できないときは、何か肝心なミスを見逃していることがあります。



>セル自体にUnicodeを対応していると思っています。
Excel 2003の頃から、対応はしているのですが、本格的な対応は、
Excel 2013 前後だと思います。新しい文字関数が増えましたからね。

>入力テキストファイルから出力テキストファイル
これは、ADODB.Stream で対応可能なはずです。

しかし、私の経験では、逆に、セルからの出力テキストの場合は、まったくやり方が違う方法を思いつきました。いずれにしても、私の範囲内では、UTF-8とUTF-16 は、共有しませんから、要注意だと思います。思わぬ失敗をしている時があります。

学ばれるのでしたから、以下のサイトがよいです。
NonSoft というサイトです。
http://nonsoft.la.coocan.jp/SoftSample/SampleMod …

私も、それなりに、この問題をそのサイトを中心に格闘した上でのことですが、ただ、こういう話は、どちらかというと、VB6系よりも次の世代の言語のプログラムに任せたほうが早いのです。さしずめ、PowerShellあたりでも対応可能なのですから、本当に、ばかばかしいと思うぐらいに簡単になってしまいました。

それと、ご存知かもしれませんが、有名なUnix系ツールのnkf32 あたりが、巨大ファイルの変換が思うに任せないようです。私の間違いかもしれませんが。それで、試しに、Notepad++ で、あっけなく変換してしまったので、本当に拍子抜けしてしまいました。
    • good
    • 0

#7の回答者です。



Excel VBAはあくまでも、Excel の中だけの話で、テキストファイルとして出力する場合は、それなりの加工でもするのでしょうか。
何か、前回の別のご質問者さんと同じようなストーリー展開です。

>書き忘れていたのですが、したい事はExcelVBAを通して別のテキストファイルに「❶」を出力させる事です。

Excelのシート上で、Unicode を表示させることなら話は分かるけれども、Excel VBAを媒体にして、単なる入出力だけでは、Excelを使う意味があるとは思えません。全体の中のひとつの問題でしたら、まだまだ、解決はしないはずです。しかし、もしそう状況な、あえてVBAなどは使わないで、&ペーストをしたほうが手っ取り早いし、コピーしてクリップボードまで入れるという、ブログラムにしてもよいと思います。

以下は、全自動化はできませんでしたが、オールラウンド対応です。UTF-8のBOMなしの判定が正しくできません。ほかは大丈夫だと思います。UTF-8のBOMなしは、確率で出すそうですから、コードが長すぎてしまいます。HTMLオブジェクトで文字の判定をさせています。しかし、初めからEncodeをキメウチするなら、数行で済むものです。

コードは、必要に応じて、オブジェクトの解放を加えてください。まあ、ご質問者さんは、こちらの書いているのは読まれていないようでしたら、それならそれで、スルーしても構いません。ひとまず、こちらは、自分自身の問題を解決したので、これで終わりです。


'//

Const MYPATH = "C:\Temp\Test1\"  'プロシージャの中でも構わない
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
Sub TextImport()
 Dim buf As String, arBuf
 Dim FileName As String
 Dim EncodeType As String
 Dim oHTML, oFile
 Dim i As Long
 Dim ret As VbMsgBoxResult
 Dim objStream As New ADODB.Stream '参照設定のこと
 FileName = MYPATH & "Sample.txt" 'ファイル名
 'エンコード判定
 With CreateObject("Scripting.FileSystemObject")
  Set oFile = .GetFile(FileName)
  Set oHTML = GetObject(oFile.Path, "HTMLfile")
  Sleep 1000
  EncodeType = oHTML.CharSet
 End With
 If EncodeType Like "shift_jis" Then
  ret = MsgBox(EncodeType & ": " & vbCrLf & _
  "目的のテキストファイルが、Shift-JISでない可能性があるなら、" & vbCrLf & _
  "これは、UTF-8 BOMなしファイルであるかもしれません。" & vbCrLf & _
  "UTF-8 で実行しますか?", vbYesNoCancel)
  If ret = vbYes Then
   EncodeType = "UTF-8"
  ElseIf ret = vbCancel Then
   Exit Sub
  End If
 End If

objStream.CharSet = EncodeType
objStream.Open
objStream.LoadFromFile FileName
buf = objStream.ReadText

arBuf = Split(buf, vbCrLf)
For i = 0 To UBound(arBuf)
 Cells(i + 1, 1).Value = arBuf(i)
Next i
End Sub
    • good
    • 0

No10です。


>秀丸で❶を改行付き、Unicode16(UTF-16) □BOMを付ける(※チェック有)で保存
上記を見落としていました。
入力ファイルはUTF-8ということのはずですが?
秀丸で❶を改行付き、UTF-8 □BOMを付ける(※チェック有)で保存して再テストしていただけませんか?
念の為、確認しますが、
入力ファイル UTF-8 BOM付き
出力ファイル UTF-8 BOM付き
があなたの望んでいる要件で間違いないでしょうか?
    • good
    • 0

> (◆◆の中に(?)v')が見れました。


UTF-16BEをUTF-8で読んでいるように見えます。
> -3でした。
既に文字化けしてU+FFFD Replacement Caracter「�」になっているようですね。
    • good
    • 0

No9です。


>結果は文字化けです。
>(◆◆の中に(?)v')が見れました。
うーむ・・・。こちらではきちんと表示されます。

>書き忘れていたのですが、したい事はExcelVBAを通して別のテキストファイルに❶を出力させる事です。
>今の文字化け状態で別のテキストファイルにそのまま出力で、あるソフト変換にて正しく表示出来ればOKです。
以下に示すのが、
入力ファイル:UTF-8(BOM付き)
出力ファイル:UTF-8(BOM付き)
の仕様で、1行単位で入力ファイルを読み込み、1行単位で出力するプログラムです。
これで、入力ファイルと出力ファイルが全く同じであれば、あなたが必要とする要件は満たせると思います。
以下のようになります。
------------------------------------------------------
Option Explicit
Public Sub Macro2()
Call myCopyFile("D:\goo\excel\goo11.txt", "D:\goo\excel\goo11_out.txt")
End Sub
'参照設定でMicrosoft ActiveX Data Objects x.x Library(最新版) にチェックをしておくこと
Public Sub myCopyFile(ByVal infile As String, ByVal outFile As String)
'読み込み用オブジェクト作成
'ファイルを読み込むための変数
Dim line As String
Dim lineNo As Long
'オブジェクトを作成
Dim txt As Object
Set txt = CreateObject("ADODB.Stream")
'オブジェクトに保存するデータの種類を文字列型に指定する
txt.Type = adTypeText
'文字列型のオブジェクトの文字コードを指定する
txt.Charset = "UTF-8"
'オブジェクトのインスタンスを作成
txt.Open

'書き込み用オブジェクト作成
Dim txt2 As Object
Set txt2 = CreateObject("ADODB.Stream")
'オブジェクトに保存するデータの種類を文字列型に指定する
txt2.Type = adTypeText
'文字列型のオブジェクトの文字コードを指定する
txt2.Charset = "UTF-8"
'オブジェクトのインスタンスを作成
txt2.Open

'ファイルからデータを読み込む
txt.LoadFromFile (infile)
lineNo& = 0
'最終行までループする
Do While Not txt.EOS
lineNo = lineNo + 1
'1行を読み取る
line = txt.ReadText(adReadLine)
'1行を書き込み用オブジェクトへ書き込み
txt2.WriteText line, adWriteLine
Loop
'書き込みオブジェクトの内容をファイルに保存
txt2.SaveToFile (outFile), adSaveCreateOverWrite
'オブジェクトを閉じる
txt2.Close
txt.Close
'メモリからオブジェクトを削除する
Set txt2 = Nothing
Set txt = Nothing

MsgBox ("lineNo=" & lineNo&)
End Sub
-----------------------------------------------
入力ファイルと出力ファイルがバイナリレベルで同じであることを
コマンドプロンプトで
fc /b 入力ファイル 出力ファイル
上記コマンドで確認済みです。
テストデータ(goo11.txt)は、下記の2行です。
--------------------


--------------------

もし、出力ファイルがBOM無であることを望まれる場合は、ファイルの先頭3バイトを削除する必要があるため、
更に別の処理が必要になります。その場合は、その旨、補足ください。とりあえずは、上記のプログラムで
ファイルが正常にコピーできることを確認していただけますでしょうか。
    • good
    • 0

No6です。


すみません。❶の文字が文字化けのように?で表示され、①はきちんと表示されるということですね。
この理由は、No8の方が言われているとおり、❶はUNICODEにあるが、SHIFT-JISにはないために発生しています。
文字化けが発生しているように見えるのは、メッセージボックス、とかテキストボックスのテキストは、SHIFT-JISで表示しているためです。
VBAは内部の文字をUNICODE16(LE)で保持していますので、内部では文字化けは発生していません。
メッセージボックス、とかテキストボックスに表示したときのみ、?が表示されます。
この文字をexcelのシートに直接出力すれば、きちんと表示されます。
以下のコードを試してください。
---------------------------------------------------
Option Explicit
Public Sub Macro1()
Call myReadFile("D:\goo\excel\goo11.txt")
End Sub
'参照設定でMicrosoft ActiveX Data Objects x.x Library(最新版) にチェックをしておくこと
Public Sub myReadFile(ByVal infile As String)
'読み込み用オブジェクト作成
'ファイルを読み込むための変数
Dim line As String
Dim lineNo As Long
'オブジェクトを作成
Dim txt As Object
Set txt = CreateObject("ADODB.Stream")
'オブジェクトに保存するデータの種類を文字列型に指定する
txt.Type = adTypeText
'文字列型のオブジェクトの文字コードを指定する
txt.Charset = "UTF-8"
'オブジェクトのインスタンスを作成
txt.Open

'ファイルからデータを読み込む
txt.LoadFromFile (infile)
lineNo = 0
'最終行までループする
Do While Not txt.EOS
lineNo = lineNo + 1
'1行を読み取る
line = txt.ReadText(adReadLine)
ThisWorkbook.ActiveSheet.Cells(lineNo, 1).Value = line
Loop

txt.Close
'メモリからオブジェクトを削除する
Set txt = Nothing

MsgBox ("lineNo=" & lineNo)
End Sub
--------------------------------------------------------------------
該当シートのA列の各行に読み込んだ内容が格納され、きちんと表示されます。
この回答への補足あり
    • good
    • 0

小手先だけでやろうとしても、無理が出るものです。


具体的に、どんな化け方しているか、調査しましょう。

「文字化けしている」ということを、どうやって確認しましたか?
 質問にあるコードには、ファイルの読み込みしかありません。
 これをセルに代入したり、MsgBox等で表示したり、ファイルに書き込んだりしたときに、始めて「文字化けしている」と認識できるはずです。

・ ❶ は文字化けする
・ ① は文字化けしない
だと、考えられるのは、 出力までの間に、どこかで「Shift_JIS(正確にはCP932)」を経由していて、Shift_JISに無い「黒地の丸数字」が変換できずに「文字化け」になっている、というものです。


まず、入力が期待通りなのかを調べましょう
・入力ファイルをバイナリエディタで開いて、どんなバイト列になっているか調べる
・それが想像通りか調べる。
・読み込んだテキストがどんな文字列になっているか、1文字1文字ascWでコードを調べる
    • good
    • 0

アップロードしたつもりでしたが、載っていませんので、ちょっと試してみてください。

 [参照設定、Microsoft ActiveX Data Objects 2.8 Library]

以下は、LE BE も、両方とも通ります。
UTF-8 は、.Charset = "UTF-8" にしてみてくたざい。


'//
Sub Test1()
Dim iStream As New ADODB.Stream
Const MYPATH = "C:\Temp\Test1\"
With iStream
 .Open
 .Type = 2
 .Charset = "UNICODE"
 .LoadFromFile MYPATH & "UTF-16LE_09016.txt"
End With
Dim oStream As New ADODB.Stream
With oStream
 .Open
 .Type = 2
 .Charset = "SHIFT-JIS"
 iStream.CopyTo oStream
 .SaveToFile MYPATH & "JIS0916_test.txt", 2
 iStream.Close
End With
Set iStream = Nothing
 oStream.Close
Set oStream = Nothing
End Sub
    • good
    • 0

No5です。


>まだ、文字化け(?)をします。
>ちなみに試しに①は、文字化け(?)をせずにきちんと表示されました。

文字化けを起こすのはデータが原因の可能性がかなり高いです。
文字化けを起こすテキストファイル(test.dat)は、何行程度のデータでしょうか?
私が提供したソースで文字化けを起こすのは、何行目でしょうか。
もし、その行が特定できれば、その行(またはその部分)だけを提示していただければ、こちらでも
参照できるので、何とかなるかも知れません。
以下の何れかの方法が取れれば、進展が望めますが、そうでない場合は、(申し訳ありませんが)
他の回答者(例えば過去に同じような問題に遭遇し、解決したことがある人)の回答を待つ以外に方法はないかと思います。
(1)文字化けを起こすデータをそのファイルのまま公開する。
(2)文字化けを起こす箇所を特定し、その箇所を公開する。
    • good
    • 0

No4です。


あなたの例1のソースをこちらで実行してみました。(適当なUTF-8のテキストファイルを作成し、それを読み込み)
きちんと読み込めています。
こちらの環境は
Windows7 64Bit
Excel2007
Microsoft ActiveX Data Objects 2.8 Library
で、確認しました。
プログラムは正しいように思えます。
データに問題があるように思えますが、もし、(セキュリティ上)可能なら、そのデータを
外部から参照できるようにしていただければ、更に進展があるかもしれません。
もし、それができない場合は、
簡単なUTF-8のファイルを作成し、例1のプログラムでそれを読み込んで確認されてはいかがでしょうか。
そうすれば、すくなくとも、プログラムは正しいということの検証は可能かと思います。
この回答への補足あり
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QLine Inputで文字化け(助けて下さい)

素人な質問ですみません。

Line Input #fpFileNo, strMsgBuffA

上記手法により、txtファイルから1行ずつレコードを
取り出していますが、
先頭が”全角文字”のレコードを取り出すと
先頭文字が”文字化け”します。

正しく全角文字が取り出せる手法を教えてください。

Aベストアンサー

ウィス! 今日は午後出社ダヨ
昨日は用事があって、きちんと最後まで説明できなかったダヨ。

Open strFile For Binary As #intFile
  Get #intFile, , bytBuff
Close #intFile
までは一緒

先頭から1~10バイトがShiftJIS
文字変数 = strconv(MIDB(bytBuff,1,10),vbunicode)

先頭から11~14バイトがバイナリ
redim バイト変数(3) as byte
バイト変数 = MIDB(bytBuff,11,4)
これで先頭の一行の改行コード直前までの値を取得したことになる。

ついでにいうと先頭から15~16バイトが改行コード
strconv(MIDB(bytBuff,15,2),vbunicode) = 改行コード(vbcrlf)
だから17バイト目からXレコードが始まることになる。

Xレコードを取るためには
MIDB(bytBuff,17,文字変数より取得したXレコード長)
とすると取れるはず。

バイナリと言ってもいろいろあるので、どんなデータが入っているのかわからないから、キャストしやすいバイト変数をサンプルに挙げたけど、必要に応じて違う変数を宣言する必要あり。

ウィス! 今日は午後出社ダヨ
昨日は用事があって、きちんと最後まで説明できなかったダヨ。

Open strFile For Binary As #intFile
  Get #intFile, , bytBuff
Close #intFile
までは一緒

先頭から1~10バイトがShiftJIS
文字変数 = strconv(MIDB(bytBuff,1,10),vbunicode)

先頭から11~14バイトがバイナリ
redim バイト変数(3) as byte
バイト変数 = MIDB(bytBuff,11,4)
これで先頭の一行の改行コード直前までの値を取得したことになる。

ついでにいうと先頭から15~16バイ...続きを読む

QエクセルVBAの入力文字(unicode)について

VBA初心者ですが宜しくお願いします。
質問ですが、任意のセルにunicodeにしかない文字(?)を、VBAにて変数に入力した際に、"?"になってしまいます。

例:セルA1に"㎥"(立方メートル)が入った文字列、"固体Bの体積は1㎥です。"と入力

 【VBA】

  dim Ac as string

  Ac=cells(1,1).value


上記の場合、変数Acの結果が"固体Bの体積は1?です。"となります。

"?"にならないようにするにはどうしたらいいでしょうか?

Aベストアンサー

こんばんは。

>  dim Ac as string
>
>  Ac=cells(1,1).value

それは、その表示する媒体の問題で、きちんとUnicode では受け取っています。

あえて、VBA上で、変数 Ac を表示するためには、例えば、UserForm のTextBox や Label を使うなりしなければなりません。

例:
UserForm 上のテキストボックスと、ラベルに表示した。

Private Sub CommandButton1_Click()
Dim Ac As String
  Ac = Cells(1, 1).Value
  TextBox1.Text = Ac
  Label1.Caption = Ac
End Sub

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub

Q中国文字のプログラムでの取り扱い

中国文字のVisual Basic6での取り扱いについて教えてください。
環境 Windows7、Visual Basic6、IE8
秀丸エディタなどでUTF-8モードとして、「书信」などの漢字(左の字が中国簡体字、右の信は日本文字と同じ)をファイルに入れておき、これを読み取って、HTML文で表示できるようにするプログラムを作ろうとしています。
Visual Basic6の変数に入れるとUnicodeとして処理されるので実行中に止めて表示させても、またHTML文書で表示させても”???”と文字化け状態になります。
そこでOKwebにてコード変換を教えていただいたのでUnicodeをUTF-8に変換すると「?信」となります。
何か変ですがこれをさらにUTF-8からUniCodeに変換すると”???”と表示されるようになります。
中国簡体字の部分だけがどうしても表示できません。どうしたら表示できるのでしょうか?

なお本件とは直接の関係はありませんが、HTMLソースを秀丸で表示させて「书信」を張り付けると、ソースでも、またブラウザ・IE8で表示させても正しく「书信」と表示されます。

中国文字のVisual Basic6での取り扱いについて教えてください。
環境 Windows7、Visual Basic6、IE8
秀丸エディタなどでUTF-8モードとして、「书信」などの漢字(左の字が中国簡体字、右の信は日本文字と同じ)をファイルに入れておき、これを読み取って、HTML文で表示できるようにするプログラムを作ろうとしています。
Visual Basic6の変数に入れるとUnicodeとして処理されるので実行中に止めて表示させても、またHTML文書で表示させても”???”と文字化け状態になります。
そこでOKwebにてコード...続きを読む

Aベストアンサー

VB6の標準コントロールに日本語や中国語の混在文を
表示することはできないので、UNICODEに対応した
コントロールに表示するようにします。

二つのコントロールに同時に表示してみます。

準備:
プロジェクトからコンポーネントを選択し、
Microsoft Internet Controls
msrtedit 1.0 Type Library
の二つにチェックを入れて適用、OKとします。

フォームにコマンドボタンを一つ、
WebBrowserコントロールとAMSREditを
フォームに設定します。

以下のコードを設定してください。
なお、test.txtはプロジェクトと同じディレクトリ
においているとしています。他のディレクトリに
おいている場合はフルパスを設定してください。

Private Sub Command1_Click()

'RichEditに表示
With New ADODB.Stream
.Type = 2
.Charset = "UNICODE"
.Open
.LoadFromFile (App.Path & "\test.txt")
AMSREdit1.text = .ReadText(-1)
End With
'WebBrowserに表示
WebBrowser1.Navigate App.Path & "\test.txt"
End Sub

VB6の標準コントロールに日本語や中国語の混在文を
表示することはできないので、UNICODEに対応した
コントロールに表示するようにします。

二つのコントロールに同時に表示してみます。

準備:
プロジェクトからコンポーネントを選択し、
Microsoft Internet Controls
msrtedit 1.0 Type Library
の二つにチェックを入れて適用、OKとします。

フォームにコマンドボタンを一つ、
WebBrowserコントロールとAMSREditを
フォームに設定します。

以下のコードを設定してください。
なお、test.txtはプロジェクト...続きを読む

QEXCEL VBAマクロ作成で、他のEXCELからデータを取り込みたい

メインプログラム(EXCEL VBA)より、
他のフォルダーにあるEXCELの項目の内容を取り込みたいです。
たとえば他のフォルダーのEXCELのRange("A2:A3").ValueをメインプログラムのRange("C2:C3").Valueにセットしたい時です。

・コマンドボタン押したら、どこのEXCELから取り込むかのポップアップ(?)は、表示はできてます。
・作業者が選んだパスとブックもMsgBoxで表示できてるので、もらう相手の場所も取得できてます。

・となると次はOPEN,INPUTですか?
テキストデータの取り込みですと、Inputでそのバッファを定義してるのですが、なんか違うような。。。

よろしくお願いします!

Aベストアンサー

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Cells(2, 2).Value ' 相手シートの B2 の値を自分自身の A1 に書き込む

readBook.Close False ' 相手ブックを閉じる
Set readSheet = Nothing
Set readBook = Nothing

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Ce...続きを読む

QStrConvでUnicodeに変換出来ない文字

エクセルのVBAで、StrConv関数を使用して、文字列をUnicodeに変換しようとしているのですが、特定の文字が変換できません。
解決方法をご存知の方は教えてください。

現象:StrConv("マミムメモ",vbUnicode)で変換すると、ムメモが文字化けしてしまう。

確認方法:
MsgBox StrConv(StrConv(InputBox("入力"), vbUnicode), vbFromUnicode)
で、InputBoxに"マミムメモ"を入力すると、メッセージボックスに"マミ???"と表示されてしまう。

Aベストアンサー

> Outlookで使用しているレジストリに格納して、Outlookでその文字列を
> 使用したいのですが....

最初に言ってもらわないと...^^;

VB(A) の SetSetting/GetSetting ステートメントではアクセスできる場所
に制限がありますので、Outlook のレジストリにアクセスしているとなると
API を使ってますね?

恐らく API の使い方にミスがありそうです。

ヒント:API の宣言部に間違いはありませんか?
ヒント:API に文字列を渡す場合、ByVal キーワードを使って渡します。
ヒント:RegSetValue API の引数 cbData は、Unicode --> Shift-JIS に
    変換したバイト長+1、つまり最後がNullで終わるように渡さないと、
    NT 系 OS では正しく書き込めません。

    Ex) CLng(LenB(StrConv("文字列", vbFromUnicode)) + 1

QEXCEL VBAで計算値を四捨五入、切り上げ、切捨てする方法

ネットで探してみたのですが、計算結果を四捨五入して特定のセルを
返すにはどうしたらいいのでしょうか?

Sub hokangosa()

Dim ZPS As Double
Dim ZPOS As Double
Dim DMN As Double
MsgBox (" >>> 補間誤差自動計算 <<< ")
MsgBox (" >>> 初期値入力します <<< ")
ZPS = InputBox(">>> ステップを入力してください<<<")
ZPOS = Sheet1.Cells(22, 4).Value
DMN = ZPOS / ZPS
Sheet1.Cells(23, 6).Value = DMN
End Sub

ここでDMNの値を四捨五入したいです。

またこれとは別に切上げ、切捨ても教えていただけるとありがたいです。

Aベストアンサー

DMN = Application.WorksheetFunction.Round(ZPOS / ZPS, 0)
で、四捨五入
DMN = Application.RoundDown(ZPOS / ZPS, 0)
で切り捨て
DMN = Application.RoundUp(ZPOS / ZPS, 0)
で切り上げです。

引数で、対象桁を変更できます。

QExcel VBA読み込みで文字化けが

Excel VBAにてメールデータを読み込むプログラムを組んでいます。
データの作り方は、
(1)Mozilla Thunderbirdでメールデータをtext形式で保存
(2)VBAにてtextデータを開く。

しかし読み込みを行うと、文字化けしたデータが表示されてしまいます。

どのように解決したらよいのでしょうか?
文字コード変換を行ってもダメでした。

Sub Read_mail_data()
Const cnsTITLE = "テキストファイル読み込み処理"
Const cnsFILTER = "全てのファイル (*.*),*.*"
Dim xlAPP As Application ' Applicationオブジェクト
Dim intFF As Integer ' FreeFile値
Dim strFileName As String ' OPENするファイル名(フルパス)
Dim vntFileName As Variant ' ファイル名受け取り用
Dim strREC As String ' 読み込んだレコード名
Dim GYO As Long ' 収容するセルの行
Dim lngREC As Long ' レコード件数カウンタ

' Applicationオブジェクト取得
Set xlAPP = Application
' 「ファイルを開く」のダイアログでファイル名の指定を受ける
xlAPP.StatusBar = "読み込むファイル名を指定して下さい。"
vntFileName = xlAPP.GetOpenFilename(FileFilter:=cnsFILTER, Title:=cnsTITLE)
' キャンセルされた場合はFalseが返るので以降の処理は行わない
If VarType(vntFileName) = vbBoolean Then Exit Sub
strFileName = vntFileName

' FreeFile値の取得(以降この値で入出力する)
intFF = FreeFile
' 指定ファイルをOPEN(入力モード)
Open strFileName For Input As #intFF
GYO = 1
' ファイルのEOF(End of File)まで繰り返す
Do Until EOF(intFF)
' レコード件数カウンタの加算
lngREC = lngREC + 1
xlAPP.StatusBar = "読み込み中です....(" & lngREC & "レコード目)"
' 改行までをレコードとして読み込む
Line Input #intFF, strREC
' 行を加算しA列にレコード内容を表示(先頭は2行目)
GYO = GYO + 1
' 文字コードを変換する
'StrConv(strREC, vbFromUnicode) = a
Cells(GYO, 1).Value = StrConv(strREC, vbFromUnicode)
Cells(GYO, 1).Value = StrConv(strREC, vbFromUnicode)
Cells(GYO, 1).Value = StrConv(strREC, vbFromUnicode)
Cells(GYO, 1).Value = StrConv(strREC, vbFromUnicode)
Cells(GYO, 1).Value = StrConv(strREC, vbFromUnicode)
Cells(GYO, 1).Value = StrConv(strREC, vbFromUnicode)
' セルにデータを書き込む
'Cells(GYO, 1).Value = strREC
Loop
' 指定ファイルをCLOSE
Close #intFF
xlAPP.StatusBar = False
' 終了の表示
MsgBox "ファイル読み込みが完了しました。 " & vbCr & "レコード件数=" & lngREC & "件", vbInformation, cnsTITLE

End Sub

Excel VBAにてメールデータを読み込むプログラムを組んでいます。
データの作り方は、
(1)Mozilla Thunderbirdでメールデータをtext形式で保存
(2)VBAにてtextデータを開く。

しかし読み込みを行うと、文字化けしたデータが表示されてしまいます。

どのように解決したらよいのでしょうか?
文字コード変換を行ってもダメでした。

Sub Read_mail_data()
Const cnsTITLE = "テキストファイル読み込み処理"
Const cnsFILTER = "全てのファイル (*.*),*.*"
Dim xlAPP As Application ' Applicationオ...続きを読む

Aベストアンサー

文字化けの原因が文字コードのためだと・・仮定して。
Ado.Stream で読み込んだらどうなりますかね。

Sub testAdoStream()
Dim objStrm As Object
Dim strTmp As String
Dim i As Integer
Const ReadLine As Integer = -2, ReadAll As Integer = -1
Set objStrm = CreateObject("ADODB.Stream")

With objStrm
.Charset = "ISO-2022-JP"
.LineSeparator = -1 'CR=13, LF=10, CRLF=-1
.Open
.LoadFromFile "D:\ThunderbirdMAIL.txt"
End With

Do Until objStrm.EOS
i = i + 1
Cells(i, 1) = objStrm.ReadText(ReadLine)
Loop
objStrm.Close: Set objStrm = Nothing
End Sub

なお、Charset の "ISO-2022-JP" はあてずっぽうです。
Thunderbird は使ったことが有りませんので、ここまで。

文字化けの原因が文字コードのためだと・・仮定して。
Ado.Stream で読み込んだらどうなりますかね。

Sub testAdoStream()
Dim objStrm As Object
Dim strTmp As String
Dim i As Integer
Const ReadLine As Integer = -2, ReadAll As Integer = -1
Set objStrm = CreateObject("ADODB.Stream")

With objStrm
.Charset = "ISO-2022-JP"
.LineSeparator = -1 'CR=13, LF=10, CRLF=-1
.Open
.LoadFromFile "D:\ThunderbirdMAIL.txt"
End Wit...続きを読む

Qエクセル マクロで指定フォルダを開く

エクセルにて
指定フォルダを開く、マクロがあれば教えて頂けないでしょうか。
よろしくお願いいたします。

Aベストアンサー

こんにちは。

こういうものですか?
開くフォルダを変えたいときは targ に与えるパスを変更します。

Sub OpenFolders()
Dim targ As String
targ = "C:\"
Shell "C:\Windows\Explorer.exe " & targ, vbNormalFocus
End Sub


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング