人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

●質問者: satsuman
●カテゴリ:コンピュータ インターネット
✍キーワード:A1 txt VBA エクセル セル
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● SALINGER
●27ポイント

その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に入っていました。


2 ● Mook
●27ポイント

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

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

ファイルは 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というデータが欲しいところ何も表示されませんでした。

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


3 ● SALINGER
●70ポイント ベストアンサー

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

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さん

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ