[[20220620104638]] 『フォルダ内のエクセルデータのシート5のみをタブ求x(nasu) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『フォルダ内のエクセルデータのシート5のみをタブ区切りテキストに変換』(nasu)

フォルダ内のエクセルデータをタブ区切りテキストに変換したいです。
フォルダわけなくても大丈夫です。
フォルダ内に
A.xls
B.xls
C.xls
というファイルがあるとすると、保存するテキスト名が全てA.txtになってしまいます。

Sub シート5をタブ区切りテキスト保存()

    Dim Path As String
    Dim FName As String
    Dim msg As String

    Path = "C:\Users\ユーザー名\Desktop\変換前\"
    FName = Dir(Path & "*.xls") 
    txtFileName = "C:\Users\ ユーザー名 \Desktop\変換後\" & Replace(FName, ".xls", ".txt")

    Do While FName <> ""
       Workbooks.Open Path & FName
       Worksheets(5).Activate

      ActiveWorkbook.SaveAs FileName:=txtFileName, _
        FileFormat:=xlText, CreateBackup:=False

       ActiveWorkbook.Close SaveChanges:=False

       msg = msg & txtFileName & vbCrLf

       FName = Dir()
    Loop
    MsgBox msg
End Sub

< 使用 Excel:unknown、使用 OS:Windows10 >


 >保存するテキスト名が全てA.txtになってしまいます。
 読み込むファイル名から保存するファイル名への変換をループの前での回しか行っていないため。
 >txtFileName = "C:\Users\ ユーザー名 \Desktop\変換後\" & Replace(FName, ".xls", ".txt")
 を
 >Do While FName <> ""
 の次の行に移動させては?
 あとtxtFileNameの定義がないようだが。
(ねむねむ) 2022/06/20(月) 11:01

 おっと文字抜け。
 >読み込むファイル名から保存するファイル名への変換をループの前での回しか行っていないため。
           ↓
 読み込むファイル名から保存するファイル名への変換をループの前での1回しか行っていないため。
(ねむねむ) 2022/06/20(月) 11:13

ねむねむ 様

ご回答くださりありがとうございます。
希望の動作ができました!
見ての通りの初心者なので大変助かりました。
定義も抜けていました…
ありがとうございました。
(nasu) 2022/06/20(月) 11:23


表題解決済みですが、もう一つお聞かせ願えないでしょうか?

初心者の浅はかな考えで申し訳ないですが、
https://www.239-programing.com/excel-vba/basic/basic072.html
こちらを使用させていただいて、全シートにしようと試みました。

Dim i As Integer
を追加

Worksheets(i).Activate

For i = 1 To Worksheets.Count
を追加

テキスト名を & i
を追加しましたが、動きませんでした…

考え方から全然違うのでしょうか?

Sub フォルダ内全シートタブ区切りテキスト保存()

    Dim Path As String
    Dim FName As String
    Dim txtFileName As String
    Dim msg As String
    Dim i As Integer

    Path = "C:\Users\ ユーザー名 \Desktop\変換前\"
    FName = Dir(Path & "*.xls") 

    Do While FName <> ""
    txtFileName = "C:\Users\ ユーザー名 \変換後\" & Replace(FName, ".xls", ".txt")
    For i = 1 To Worksheets.Count
       Workbooks.Open Path & FName
       Worksheets(i).Activate

      ActiveWorkbook.SaveAs FileName:=txtFileName & i, _
        FileFormat:=xlText, CreateBackup:=False

       ActiveWorkbook.Close SaveChanges:=False

       msg = msg & txtFileName & vbCrLf

       FName = Dir()

    Loop
    MsgBox msg
End Sub

(nasu) 2022/06/23(木) 14:46


 まずシート数は対象のブックを開いてからでないと確認できない。
 よって
 >For i = 1 To Worksheets.Count
 は
 >Workbooks.Open Path & FName
 の後になる。
 またこのForに対応するNextがない。

 次に、
 >txtFileName & i
 としているがtxtFileNameの中は
 パス名\ファイル名.txt
 なのでそのままでは拡張子のほうに数値がついてしまう。

 あとどのブックのシートなのかを明示したほうがいいので次ではどうだろうか?
 Sub フォルダ内全シートタブ区切りテキスト保存()
    Dim Path        As String
    Dim FName       As String
    Dim txtFileName As String
    Dim msg         As String
    Dim WK_BOOK     As Workbook
    Dim i           As Integer

    Path = "C:\Users\ ユーザー名 \Desktop\変換前\"
    FName = Dir(Path & "*.xls")
    Do While FName <> ""
        txtFileName = "C:\Users\ ユーザー名 \変換後\" & Left(FName, InStrRev(FName, ".") - 1)
        Set WK_BOOK = Workbooks.Open(Path & FName)
        For i = 1 To Worksheets.Count
            WK_BOOK.Worksheets(i).Activate
                WK_BOOK.SaveAs Filename:=txtFileName & i & ".txt", _
                FileFormat:=xlText, CreateBackup:=False
            msg = msg & txtFileName & i & "txt" & vbCrLf
        Next
        WK_BOOK.Close SaveChanges:=False
        FName = Dir()
    Loop
    MsgBox msg
 End Sub
(ねむねむ) 2022/06/23(木) 15:26

 すまない、最後に表示されるメッセージボックスだけの問題になるが
 >msg = msg & txtFileName & i & "txt" & vbCrLf
 を
 msg = msg & txtFileName & i & ".txt" & vbCrLf
 としてくれ。
(ねむねむ) 2022/06/23(木) 15:53

ねむねむ 様

この度もご親切にご回答くださり、そしてソースコードまで教えていただきありがとうございます!
こちらを実行すると、デスクトップの変換前フォルダから.xlsのデータをひろってくれず、
マクロを記録してる.xlsmのデータのテキストデータになり、保存先も、.xlsmが入っているフォルダになってしまいます。テキスト名もSheet1.txtとなり、ファイル名が入っていません。
素人にはどうしてそうなるかがわかりません。
問題点を丸投げしてしまい申し訳ありませんが、お時間可能でしたら、引き続きご教示いただければ幸いです。
(nasu) 2022/06/23(木) 16:14


 新しいブックにマクロを入れて実行しても同じ状況だろうか?
 私のほうではきちんとデスクトップ上の変換前フォルダのブックから変換後フォルダにTXTファイルが作成されているが。

(ねむねむ) 2022/06/23(木) 16:24


ねむねむ 様

検証いただきありがとうございます。
こちらのPCでは変換前フォルダ内に.xlsmのデータを入れても先ほどの結果と変わりありませんでした。
そういえば、Sheet1.txtができるのにメッセージボックスの表示がありませんでした…
どこでどうなっているのやら…
せっかく教えていただいたのに申し訳ありません…。
(nasu) 2022/06/23(木) 16:39


 >こちらのPCでは変換前フォルダ内に.xlsmのデータを入れても先ほどの結果と変わりありませんでした。
 そういうことでなく、新しいブックを作りそこに上記マクロだけを入れて実行してみてくれ。
 ちがうマクロを実行しているようにしか思えない。
(ねむねむ) 2022/06/23(木) 16:46

ねむねむ 様

大変申し訳ありません!
おっしゃられた通り別のマクロを動作させていました…
PCの調子が悪いからとみてもらったら電源が抜けていたような恥ずかしさです。
一番下の行に追加したので、一番下のマクロを動作させていました…
ソートされるの事が知れてまた一つ勉強になりました(超絶初心者)。
また、見当違いな返答をしてしまい申し訳ありませんでした。

改めて実行させていただいたところ、

ファイル名1.txtにアクセスできません。
ファイルが破損しているか、応答しないサーバーにあるか、
読み取り専用に設定されています。

とエラーが出てしまいました。

新規Bookを作成してa1セルにあああと入力しただけのデータでした。
Sheetも追加しておらず、Sheet1しかないデータです。

もしよろしければ、引き続きお付き合いいただければ幸いです。
(nasu) 2022/06/24(金) 09:19


自己解決いたしました!
ただ単に保存先のアドレスを間違っておりました…
失礼いたしました…
問題なく動作いたしました!
お時間さいていただき本当にありがとうございました!
(nasu) 2022/06/24(金) 09:32

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.