各セルに入力されているデーター(数字・文字等)を逐一手作業で行わずに関数、VBA等で一気にデーター数分のテキストデーターファイル
に出力(変換)する方法を教えてください。
例 A1セルデーターが100、B1セルデーターが200、B3セルデータが300と入力されているエクセルシートの場合なら、
其々の値とファイル名が同じ100.txt、 200.txt、 300.txtの三つのテキストファイルを作成する。
数的には最大5000データー程度になります。
以上よろしくお願いいたします。
わかりやすいようにできるだけ無駄な機能を省きシンプルにしました。
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
その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
SALINGERさん
詳細な回答ありがとうございます。
テキストデーターファイルは作成されましたが、データーが入っていませんでした。
例/1000というデーターの場合、1000.txtというファイルは作成されましたがファイルを開くと1000というデータが欲しいところ何も表示されませんでした。
私の説明不足及び勘違いなどありましたらすみません。
また、データーはA1~A5000に入っていました。
データはシート上に散在していると思われましたので、対象をアクティブシート
のすべてのデータとして処理する例です。
ファイルは 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)
で求まりますので、作成されたファイル数と比較すればわかるとは思います。
先の回答で目的を既に達成されていたら、こちらはポイント不要です。
Mookさん
詳細かつご親切な回答ありがとうございます。
テキストデーターファイルは必要な数が作成されましたが、データーが入っていませんでした。
例/1000というデーターの場合、1000.txtというファイルは作成されましたがファイルを開くと1000というデータが欲しいところ何も表示されませんでした。
私の説明不足及び勘違いなどありましたらすみません。
わかりやすいようにできるだけ無駄な機能を省きシンプルにしました。
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
SALINGERさん
追加のご回答いただきありがとうございました。
実現できました!助かりました。
SALINGERさん
追加のご回答いただきありがとうございました。
実現できました!助かりました。