質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

466閲覧

txtの読み込み⇒置換⇒txtの保存をExcelでできないか教えてください。

HuransowaRuiz

総合スコア14

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/05/11 11:02

①複数ある.txtデータをエクセルで開いて
一つのブックにそれぞれシートとして展開するVBAを教えていただきたいです。
②Sub A()
Dim mySheet As Worksheet
Set mySheet = Activesheet
Dim wb As Workbook, ws As Worksheet, rng As Range, c As Range

' Set wb = Workbooks.Open("別ブック.xlsx")
Set wb = Workbooks("別ブック.xlsx")
Set ws = wb.Worksheets(1)
Set rng = ws.UsedRange.Columns(1).Cells
For Each c In rng
mySheet.Cells.Replace what:=c.Value, replacement:=c.Offset(, 1).Value
Next

End Sub
を読み込んだすべてのシートに実施するやり方を教えてほしいです。
③置換が終了したシートをそれぞれ、txtファイルとして保存する方法を教えていただきたいです。
手動でExcelファイルを保存すると、ダブルクォーテーションが値を括ってしまって、内容が変化してしまいます。
メモ帳に貼って保存しなおせば内容は相違なく保存できますが、手間がかかってしまうのでVBAのマクロで簡略化できないでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

itagagaki

2021/05/11 11:06

複数ファイルを一括で置換するツールはいろいろあると思いますけど、そういうのは使わないでExcel VBAでやりたいのですか?
HuransowaRuiz

2021/05/11 11:08

VBAでやりたいです。ほかにNotepad、eclipseもありましたが、マクロが組みにくくてVBAで編集しようと考えています。
jinoji

2021/05/11 11:09

話をまとめると、 「複数のtxtファイルを、一定の規則に従って文字列を置換したうえで、別名のtxtファイルとして保存する 」という処理を、Excelマクロを使ってやりたい、ということでしょうか。
HuransowaRuiz

2021/05/11 11:11

はい、またExcelで編集した状態で保存するとダブルクォーテーションがついて、内容が変化してしまうのを防ぎたいです。
jinoji

2021/05/11 11:14

変換したtxtファイルが得られれば、①②のExcelファイルはなくてもかまわない?
jinoji

2021/05/11 11:18

文字列を置換する対照表と、1つのコマンドボタンを持ち、 そのボタンを押すと「複数のtxtファイルを読み込んで対照表に基づいて置換してtxtファイルを書き出す」というマクロが動く、そういうExcelマクロが欲しい、ということですか?
HuransowaRuiz

2021/05/11 11:22

はい、また①②のExcelは必要になります。
jinoji

2021/05/11 11:27

複数のtxtファイルというのは、Excelに取り込んだ時に、複数行、複数列の、いわゆる表のような形になるものですか? それとも、普通の文章が書かれたようなものですか?
HuransowaRuiz

2021/05/11 11:29

普通の文章がかかれたものです。
jinoji

2021/05/11 11:31

改行コードで何行かに改行された文章ですか? もしそうなら、Excelに読み込んだ時には、txtの1行がExcelの1セルに対応するような感じで読み込みたいですか?それとも、全行のtxtが1セル内に入るような形でしょうか。
jinoji

2021/05/11 11:39 編集

txtファイルは日本語が使われていますか? その場合、文字コードが Shift-JISか、UTF-8かによっても、作るべき処理が変わってきます。 また、改行コードが Lf か CrLf か、というのも考慮が必要な場合があります。
HuransowaRuiz

2021/05/11 11:34

改行カードで改行された文章です。txtの1行が1セルに対応する形で読み込みたいです。
HuransowaRuiz

2021/05/11 12:15

txt ファイルは日本語英語混在です。
guest

回答2

0

改行コードCRLF
文字コードShift-jisでした。
また作成したtxtの中身が空白になります。
シートには置換できています。

投稿2021/05/12 01:27

HuransowaRuiz

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

HuransowaRuiz

2021/05/12 04:27

シートに固定長フィールドのデータとして読み込まれりため、タブ区切りで設定したいのですが、 splitの部分をどう変えればいいでしょうか
kaina

2021/05/12 04:35

自分で自分に質問してもダメじゃないですかね? jinojiさんへのコメントであれば、jinojiさんの回答に書き込まないとダメでしょ。 後、したいことだけで多少なりとも自分で調べないんですか? 例えば、「vba Split」というキーワードで検索してみるとか。
退会済みユーザー

退会済みユーザー

2021/05/12 04:37 編集

回答ではなく質問の追加情報なら、質問を編集して追記してください。 だれかの回答に対するコメントであれば、その回答のコメント欄に記入してください。 回答は削除依頼してください。
guest

0

ベストアンサー

知らんけど。

VBA

1Sub sample() 2 3 '変換表はこのブックの1シート目に用意されているものとする 4 Dim mySheet As Worksheet, rng As Range 5 Set mySheet = ThisWorkbook.Worksheets(1) 6 Set rng = mySheet.UsedRange.Columns(1) 7 8 9 'txtファイルはこのマクロと同じ場所にあるものとする 10 Dim fileName As String 11 fileName = Dir(ThisWorkbook.Path & "*.txt") 12 13 14 'ループ 15 Do While fileName <> "" 16 17 '読み込み(ファイルはすべてUTF-8であるものとする) 18 Dim buf, arr 19 buf = ADOFileLoad(ThisWorkbook.Path & "\" & fileName) 20 21 '変換表に従い置換 22 Dim c As Range 23 For Each c In rng.Cells 24 buf = Replace(buf, c.Value, c.Offset(, 1).Value) 25 DoEvents 26 Next 27 '別名でtxt書き出し 28 ADOFileSave buf, ThisWorkbook.Path & "\New_" & fileName 29 30 'シートにも書き出し 31 Dim ws As Worksheet 32 Set ws = ThisWorkbook.Worksheets.Add(After:=mySheet) 33 34 arr = Split(buf, vbNewLine) 35 ws.Cells.Resize(UBound(arr) + 1, 1).Value = WorksheetFunction.Transpose(arr) 36 37 '次へ 38 fileName = Dir() 39 Loop 40 41 42End Sub 43 44 45Function ADOFileLoad(myPath) 46 47 With CreateObject("ADODB.Stream") 48 .Open 49 .Type = 2 50 .Charset = "UTF-8" 51 .LoadFromFile myPath 52 ADOFileLoad = .ReadText 53 .Close 54 End With 55 56End Function 57 58 59Sub ADOFileSave(buf, myPath) 60 61 With CreateObject("ADODB.Stream") 62 .Open 63 .Type = 2 64 .Charset = "UTF-8" 65 .WriteText buf 66 .SaveToFile myPath, 2 67 .Close 68 End With 69 70End Sub

投稿2021/05/11 14:27

jinoji

総合スコア4592

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問