エクセルについて教えてください。


各セルに入力されているデーター(数字・文字等)を逐一手作業で行わずに関数、VBA等で一気にデーター数分のテキストデーターファイル
に出力(変換)する方法を教えてください。
例 A1セルデーターが100、B1セルデーターが200、B3セルデータが300と入力されているエクセルシートの場合なら、
其々の値とファイル名が同じ100.txt、 200.txt、 300.txtの三つのテキストファイルを作成する。
数的には最大5000データー程度になります。

以上よろしくお願いいたします。

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2011/03/06 15:57:07
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:SALINGER No.3

回答回数3454ベストアンサー獲得回数969

ポイント70pt

わかりやすいようにできるだけ無駄な機能を省きシンプルにしました。

Sub Macro()
    Const dirAddress As String = "C:\Users\hogehoge\Desktop\test"
    Dim FSO As Object
    Dim myTxt As Object
    Dim r As Range
    
    Set FSO = CreateObject("Scripting.FileSystemObject")
    
    For Each r In ActiveSheet.Range("A1:A5000")
        Set myTxt = FSO.CreateTextFile(dirAddress & "\" & r.Value & ".txt")
        myTxt.writeline r.Value
        myTxt.Close
    Next
    
    Set myTxt = Nothing
    Set FSO = Nothing
End Sub
id:satsuman

SALINGERさん

追加のご回答いただきありがとうございました。

実現できました!助かりました。

2011/03/06 15:54:53

その他の回答2件)

id:SALINGER No.1

回答回数3454ベストアンサー獲得回数969

ポイント27pt

その5000データがどのようになっているのかはわかりませんが、

とりあえず上記の3つのテキストファイルを作るマクロです。

最初のところを作成するフォルダのアドレスに変えてください。

既にファイルがある場合はメッセージボックスを出すようにしていますが、

5000ファイルの場合はまとめてログに出したりしたほうがいいです。

Sub Macro()
    Const dirAddress As String = "C:\Users\hogehoge\Desktop\test"
    Dim FSO As Object
    Dim myTxt As Object
    
    Set FSO = CreateObject("Scripting.FileSystemObject")

    Dim r As Range
    
    For Each r In ActiveSheet.Range("A1,B1,B3")
        If FSO.fileExists(dirAddress & "\" & r.Value & ".txt") Then
            MsgBox r.Value & ".txt" & "は既に存在します"
        Else
            Set myTxt = FSO.CreateTextFile(dirAddress & "\" & r.Value & ".txt", False)
        End If
    Next
    
    Set FSO = Nothing
End Sub
id:satsuman

SALINGERさん

詳細な回答ありがとうございます。

テキストデーターファイルは作成されましたが、データーが入っていませんでした。

例/1000というデーターの場合、1000.txtというファイルは作成されましたがファイルを開くと1000というデータが欲しいところ何も表示されませんでした。

私の説明不足及び勘違いなどありましたらすみません。

また、データーはA1~A5000に入っていました。

2011/03/03 23:49:13
id:Mook No.2

回答回数1314ベストアンサー獲得回数393

ポイント27pt

データはシート上に散在していると思われましたので、対象をアクティブシート

のすべてのデータとして処理する例です。

ファイルは EXCEL ファイルと同じパスに作成するので、ファイルを適切な場所

に保存して実行してください。


Sub MakeTxtFile()
    Const dMode = False '//★ True にすると同じファイル名は(番号)をつけて作成

    Dim objFso As Object
    Set objFso = CreateObject("Scripting.FileSystemObject")
    
    Dim filePath As String
    Dim dNum As Long
    Dim r As Range
    For Each r In ActiveSheet.UsedRange
        If r.Value <> "" Then
            filePath = ThisWorkbook.Path & "\" & r.Value & ".txt"
            If objFso.FileExists(filePath) = False Then
                With objFso.CreateTextFile(filePath)
                    .Close
                End With
            Else
                If dMode = True Then
                    filePath = ThisWorkbook.Path & "\" & r.Value & "(1).txt"
                    dNum = 2
                    Do While objFso.FileExists(filePath) = True
                        filePath = ThisWorkbook.Path & "\" & r.Value & "(" & dNum & ").txt"
                        dNum = dNum + 1
                    Loop
                    With objFso.CreateTextFile(filePath)
                        .Close
                    End With
                End If
            End If
        End If
    Next
End Sub

重複の取り扱いをどうするか提示が無かったので、適当にオプションを用意しました。

最初の行を

    Const dMode = True '//★ True にすると同じファイル名を(番号)をつ

とするとおなじデータ、たとえば100が3つあった場合、

100.txt, 100(1).txt,100(2).txt

というように番号をつけて作成します。

提示のコードは重なった場合は作成しないようになっています。

(2回実行するとファイルが倍になりますのでご注意下さい。)


単純に重複を把握するのであれば、先頭に作業用に1行挿入してA1にでも

=COUNTA(2:65536)

で求まりますので、作成されたファイル数と比較すればわかるとは思います。


先の回答で目的を既に達成されていたら、こちらはポイント不要です。

id:satsuman

Mookさん

詳細かつご親切な回答ありがとうございます。

テキストデーターファイルは必要な数が作成されましたが、データーが入っていませんでした。

例/1000というデーターの場合、1000.txtというファイルは作成されましたがファイルを開くと1000というデータが欲しいところ何も表示されませんでした。

私の説明不足及び勘違いなどありましたらすみません。

2011/03/03 23:51:50
id:SALINGER No.3

回答回数3454ベストアンサー獲得回数969ここでベストアンサー

ポイント70pt

わかりやすいようにできるだけ無駄な機能を省きシンプルにしました。

Sub Macro()
    Const dirAddress As String = "C:\Users\hogehoge\Desktop\test"
    Dim FSO As Object
    Dim myTxt As Object
    Dim r As Range
    
    Set FSO = CreateObject("Scripting.FileSystemObject")
    
    For Each r In ActiveSheet.Range("A1:A5000")
        Set myTxt = FSO.CreateTextFile(dirAddress & "\" & r.Value & ".txt")
        myTxt.writeline r.Value
        myTxt.Close
    Next
    
    Set myTxt = Nothing
    Set FSO = Nothing
End Sub
id:satsuman

SALINGERさん

追加のご回答いただきありがとうございました。

実現できました!助かりました。

2011/03/06 15:54:53

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません