秘密基地、どこに作った?

大変お世話になっております。

VBAの超初心者です。皆さまどうかご教示ください。

あろせまるさんのご質問(https://oshiete.goo.ne.jp/qa/12768182.html)にて、
tatsumaru77さんがご回答されていた下記のマクロを使いたいと考えておりますが、
その際読み込んだ文字列のうち日本語が化けてしまいます。
https://ideone.com/0G7Zo0

読み込み元のテキストファイルはUTF-16形式なのですが、Excelファイルに書き込んだ結果、日本語が文字化けしないようにするにはどこに何を、どのようにいれたらいいのでしょうか。

どうぞご教示の程よろしくお願いいたします。

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

  • いんちょさん、ありがとう御座います!ご提示の方法でマクロ完成しました!ありがとう御座います!

      補足日時:2024/09/10 18:47

A 回答 (10件)

No5です。


https://ideone.com/LnFeNz
へアップしました。
修正したのはPrivate Function set_sheetの関数のみですが、
全体をアップしておきます。

Const TextFolder As String = "D:\goo\data5" 'テキスト格納フォルダ
Const BookFolder As String = "D:\goo\data7" 'excel Book格納フォルダ
は、あなたの環境に合わせて、適切に設定してください。
    • good
    • 3
この回答へのお礼

大変お世話になっております。
誠にありがとうございます。
ご呈示のマクロによって無事に解決に至りました。
ありがとうございました!!!

お礼日時:2024/09/07 18:02

>そうしましたら、For Each line In linesの行で


lineはtextに、linesはtextsにしてもらったんですよね。
もう解決したみたいなので不要かもしれませんが
    • good
    • 2
この回答へのお礼

ありがとうございます。いんちょさんバージョンも完成させたいので、明日チャレンジしますね!

お礼日時:2024/09/07 23:22

No.7です。

No.4に書いた
set_sheetプロシジャに変数の定義 Dim texts() As String を追加します。
が必要です。
    • good
    • 1
この回答へのお礼

ありがとうございます。いんちょさんバージョンも完成させたいので、明日チャレンジしますね!

お礼日時:2024/09/07 23:23

> 修正後のマクロは以下にアップしました。

ご確認いただけますと幸いです

Function LoadText(Filename, Optional Encoding = "UTF-8") As String
の行を追加されていますが、これは削除してください。
「関数LoadTextの定義をモジュールに追加してください。」で関数の定義というのは<https://gist.github.com/nanbu/1183755>にある上記の行からEnd Functionまでの塊です。まとめて元のマクロの最後のEnd Functionの後ろに貼り付けてください。
    • good
    • 1
この回答へのお礼

大変お忙しい中本当に何度もありがとうございます。

lineはtextに、linesはtextsに変換しました
そうしたところ、linesが変数に設定されていないと出ましたため
Dim texts As String を追加しました

そうしましたら、For Each line In linesの行で
「コンパイルエラー :for eachは、コレクションオブジェクトまたは配列でのみ繰り返しを実行します」が出て困っております

申し訳ございませんが引き続きご支援の程どうぞよろしくお願いいたします。

お礼日時:2024/09/07 16:08

No.4です。

すみません。lineはtextに、linesはtextsにしてください。
    • good
    • 1

https://ideone.com/0G7Zo0
へ回答したtatsumaru77です。
念のために、以下の点確認させてください。
1.テキストファイルがUTF-16形式であることをどのようにして確認されましたでしょうか。
2.そのテキストファイルは、BOM付きのUTF-16形式で間違いないでしょうか。
3.現行の仕様では、空行(なにも書かれていない行)があると、そこで、そのテキストファイルの読み込みを打ち切っていますが、それでよろしいでしょうか。
4.参考までにお伺いしたいのですが、テキストファイルの文字コードは、シフトJISかUTF-8が一般的です。今まで、何回かここで回答していますが、UTF-16形式は初めてです。このテキストファイルは、どのようにして作成されたものなのでしょうか。
    • good
    • 2
この回答へのお礼

お忙しい中を本当にありがとうございます!
以下の通り回答いたします

1.BOMなしで Little-endian の「UTF-16LE」であることを確認しております。
確認はLinuxサーバで取得したリストをWindows 10 のnotepadで開いたとき
画面の右下欄に「UTF-16LE」という文字列を確認しました

2.すみません。BOMなし Little-endian の「UTF-16LE」でした

3.できましたら、空行があっても読み込みを打ち切らないほうがありがたいです(今のところは支障ありませんが)

4.Linux (Ubuntu)サーバで作成されたものとなります

お礼日時:2024/09/07 15:55

No.2です。

ファイルを読むときに文字化けするのだから、修正するのは読み込むところです。それはset_sheetプロシジャのOpen fnameとかLine Inputのところです。
まず、関数LoadTextの定義をモジュールに追加してください。
set_sheetプロシジャに変数の定義 Dim texts() As String を追加します。
Open fname...をやめて lines = Split(LoadText(fname, "utf-16"), vbCrLf) にします。
Doループをやめて下記Forループにします。
For Each line In lines
lno = lno + 1
owb.Worksheets(sheet_no).Cells(lno, "A").Value = text
Next line
下記2行は不要です。
fileNo = FreeFile
Close #fileNo
これで動くと思いますが、いまMacしかなくて確認できません。
駄目だったらまた聞いて下さい。
    • good
    • 1
この回答へのお礼

ありがとうございます
以下の個所で「コンパイルエラー 変数が定義されていません」と出ます
Lines = Split(LoadText(fname, "utf-16"), vbCrLf)

修正後のマクロは以下にアップしました。ご確認いただけますと幸いです
https://aoibasho.wixsite.com/aoibasho/excel
どうぞよろしくお願いいたします。

お礼日時:2024/09/07 07:14

うーん、質問に書かれているVBAコードではテキストをLine Inputで読み込んでいますが、これだとUTF-16の文字列をテキストとして正しく読み込めません。


FileSystemObjectのOpenTextFileメソッドならUnicodeを指定してファイルを開けるので、そうすればテキストを読み込めるでしょう。
下記サイトのコードでは一度ファイルを開いて最初2バイトを読み込んでUnicodeかどうか確認し、それに合わせてUnicodeかASCIIで開き直しています。
読むテキストがUTF-16と確定しているなら最初からUnicodeで開いても良いかもしれません。
https://blog.goo.ne.jp/hgc1021/e/5be9ed3d4089488 …
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。
ただ、私「超」初心者なもので、これをこのまま実行しようとするのですが
全く反応がありません。
申し訳ございませんが引き続きご教示の程よろしくお願いいたします。

お礼日時:2024/09/06 19:02

すみません、ダウンロードしたファイルが文字化けするのかと勘違いしました。


下記URLのLoadTextを利用すればいいと思います。
https://gist.github.com/nanbu/1183755
元のマクロではOpenしてLine Inputで1行ずつ読み込んでいます。
LoadTextではまとめていっぺんに読み込むので、結果をsplit関数で行毎に分割しループでワークシートに埋め込んで行けばいいでしょう。
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。
ただ、私「超」初心者なもので、どこにどう入れるかが分からないのでございます。

以下の間に、"使用例"を入れてみましたが、「コンパイルエラー End subが必要です。」と出ます。split関数もどこに入れたらいいか、困っております

file_count = 0
'拡張子が.txtのファイルのみ取得し、array_fileに格納する

申し訳ございませんが引き続きご教示の程よろしくお願いいたします。

お礼日時:2024/09/06 18:56

ページ右上のcopyボタンでコピーして貼り付ければいいかも。

    • good
    • 0
この回答へのお礼

ご回答ありがとうございます

マクロの書き方をお聞きしたいと考えております。
コピー&ペーストの仕方の質問ではございません。質問の仕方が悪く申し訳ございません。

https://ideone.com/0G7Zo0のコードをそのまま使っただけでは、EXCELのデフォルト設定がSHIT-JISのようでして、UTF-16がSHIFT-JISに変換されるために文字化けするようです。

ですので、https://ideone.com/0G7Zo0のマクロについて、コピーペーストの仕方を聞いているわけではございません。

あくまで、どのようにマクロを追記すればいいかをお聞きしたい次第です。
どうぞ引き続きよろしくお願いいたします。

お礼日時:2024/09/06 17:08

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

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


おすすめ情報

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