
A 回答 (9件)
- 最新から表示
- 回答順に表示
No.9
- 回答日時:
No.1のham_kamoです。
いろいろご指摘やフォローが入ってますが、まずは他の回答者様に感謝です。
Openステートメントに#が入ってないのは単純ミスですが、これで動いてしまっていたので全く気づきませんでした。と言うか、なくても動くということをはじめて知りました。(今までもやってしまってるかもしれない…)
テキスト保存するのにブックを開いて、という方法についても、この場合あまり適切ではないと思ったのですが、それも書き出すとNo.2での回答がさらに長くなるので、その後の追加の回答でフォローしようと思っていました。
それで、質問者様に改めて確認したいのですが、「出力できませんでした」というのは具体的にどうなったのでしょうか。
(1)エラーが出て途中でマクロがエラーで止まった
(2)実行したがフォルダにファイルが1つもできなかった
(3)ファイルはできたが開くと内容が違っていた
など、補足をお願いいたします。
No.8
- 回答日時:
#6のKenKen_SP さんへ
こんばんは。Wendy02です。お久しぶりです。せっかくなので、この質問で、こちらの考えていることを少し詳しく書かせていただきます。
なお、
>やはり、Wendy02 ご指摘の不適切なファイル名が原因かと....
(私の場合は、英語のほうで慣れていますのでかまわないです。こういう敬称の習慣は、日本語だけです。)
#Fnum の部分は気がついていたのですが、結局のところ、ファイル名として、いくつか不適切な可能性はあるので、そのエラー処理はしたほうがよいのか、と思っているのです。
私としては、回答者さんたちが多くなれば、そのどれかにあたるから良いとしても、最初は、お一人だけだったので、それで、救援のつもりで書いたのです。だけど、私自身が、#1のコードのパターンから大きく外れることはありません。
ご質問者さんへ
もし、どのようなエラーだったか、返事を書いてください。それによって、どんな状況かは、ある程度の想定、目安にはなります。
それと、#4のimogasi さんのご指摘が、ある意味、出発点のようで、こちらも、いろんなパターンが予想されて、ご質問者さんが、考えていることは明確にならないのです。
また、たとえば、ファイル名が、同名になったらどうするとか、拡張子のある・なしが混じっているとか、空白値が含まれている場合はどうするとか、VBAプログラマだったら、一通りの思いつくようなパターンを、ある程度、予測可能なエラーは押さえ込まなくてはならないのです。出力データ側も、Value プロパティでよいのか、Text プロパティ(時間や日付が含まれる場合)にする必要があるのか、とか、そういうレベルまで、読んでから、コードを作るのですね。
データの不可抗力な問題を、人間のエラー対処による防ぎ方と、プログラムによって防ぐ方法と二種類あるのです。人間がエラーを対処する場合にも、それが理解していれば良いけれど、そうでないと、やはり、「動かない」ということだけに終わってしまい、再び、質問ということになってしまいます。
また、出力データとしては、どんな方法がよいのか、私などでも、ある程度は想像の範囲なのですが、ユーザーのイメージになるべく合わせて書いていくのです。テキストファイルといっても、種類がありますからね。この前の方は、単独のSQLファイルでした。
>論外とはどのような意味でしょうか?
そのコード自体は、一定のレベル以上の人には、参考にはならないということです。ループで、ブックを作っていくのは、ファイル数(行数)が予想出来ない状況では、そういう方法は良くないです。また、スピード自体が遅すぎます。少なくとも、私は、そのようなコードは、お勧めしません。場合によって、数を重ねると、メモリも消費していくのではないかと思います。
テキストデータ自体を出力する場合と、ブックをテキスト出力するのとは、まったく目的が違います。
>普通こういうケースが少ないというのは、本などを見ても乗っておらずこまっているところです
Open ステートメントは、ある程度のレベルの人なら、ごく一般的な方法です。ご自身で勉強されたいのでしたら、「Open ステートメント」の使い方を調べてみてください。本にも載っています。(例:『かんたんプログラミング VBA 応用編』技術評論社-ブックを開かずにテキストファイルの入出力を行う)
Open pathname For mode [Access access] [lock] As [#]filenumber [Len=reclength]
また、それとセットに、Close ステートメントと、Write/Print ステートメントが出てきます。
まあ、私としては、こんなところです。
No.7
- 回答日時:
またまた、失礼しました。
#6 で Wendy02 さんを呼び捨てにして誠にすみません(汗)
最近書き込みしてないので、緊張してました。
重ね重ねお騒がせして、本当にすみません。
No.5
- 回答日時:
こんにちは。
> 出力できませんでした
#1 ham_kamo さんのコードで
> Open .Cells(i, 1).Value For Output As fnum
↓
Open .Cells(i, 1).Value For Output As #fnum
にしたら動かないかな? # が抜けてるみたいです。
また、同じようなコードで恐縮ですが、エラートラップを含めた簡単な例
をご紹介しておきます。ご参考までに。
Sub SampleProc()
Dim lLastRow As Long ' 最終行
Dim i As Long ' 行
Dim j As Long ' 列
Dim n As Integer ' ファイル番号
Dim sFilename As String ' ファイル名
lLastRow = Cells(Rows.Count, "A").End(xlUp).Row
For i = 2 To lLastRow
' ファイル名(A列)
sFilename = Cells(i, "A").Value
n = FreeFile()
On Error Resume Next
Open sFilename For Output As #n
If Err Then
' ファイル作成(オープン)失敗時の処理
MsgBox CStr(i) & "行:" & sFilename & vbLf _
& "ファイル名として不適切", _
vbCritical, "処理スキップ"
Else
' ファイル作成(オープン)成功時の処理
' 出力データ(B~D列)
For j = 2 To 4
Print #n, Cells(i, j).Text
Next j
End If
Close #n
On Error GoTo 0
Next i
End Sub
No.4
- 回答日時:
(1)ファイル名
>A2=テキストファイル名
B2:D2=テキスト内容
__________
A3=テキストファイル名
B3:D3=テキスト内容
のA2のA3は同じファイル名なのか
もし同じなら、別ファイルにする必要あるのですか?
普通こういうケースは少ない。
(2)テキストファイルにも
・CSV(数種あるよう)
・PRN(項目の開始桁ぞろえする)
・その他(HTMLなど)
がある。
どれなのか認識してないのでしょうが、一度勉強してください。
本来明記すべです。
この回答への補足
出力したいのは、テキストファイルです(.txt)です
別ファイルにする必要があります
普通こういうケースが少ないというのは、本などを見ても乗っておらずこまっているところです
No.3
- 回答日時:
こんばんは。
割り込み失礼します。
今の段階では、#1 さんのコードで、出力ファイル名に、".txt" をつけるぐらいで、良いとは思いますが、ひとつの問題は、A列のセルデータが、ファイル名として扱えるかどうか、ということがあります。
それから、出力のテキスト・イメージをどのように考えているのか、分かりません。補足でつけたような、タグを入れるのとか。
単に、
「出力できませんでした」
では、分からないのですね。回答者は、万能ではありませんから、どういうエラーが表示したのかとか、まっく動かせなかったのか、とか、それはさまざまな反応の中で、次につなげるのです。そのままの回答ですと、回答者さんたちが振り回されてしまいます。
出来れば、サンプルデータを出していただいて、それを、このように出力したいのだ、というようにしてくれると分かりやすいかと思います。
それと、補足でつけたマクロのコードは、一応、一般の回答者のレベルとしては論外だと思います。
この回答への補足
>補足でつけたマクロのコードは、一応、一般の回答者のレベルとしては論外だと思います。
論外とはどのような意味でしょうか?
サンプルデータは、質問や補足にあるとおりです
A列のデーターはファイル名として使えるものにしてあります
No.2
- 回答日時:
No.1です。
質問内容と書かれたVBAがいろいろと食い違っているみたいなので、補足質問です。
Range("B1").Select
で最初にB1を選択されているので、
ActiveCell.Offset(1, 0).Activate
を実行すると、ActiveCellはB2に移動します。
Filename = ActiveCell.Value & ".txt"
で、そのセルの内容をFilenameに代入していますが、質問文では
A行=ファイル名
と書かれています。ファイル名はA2でなくB2より下に入っているのでしょうか。
それから、
B~D行=テキスト内容
とありますが、マクロでは
ActiveCell.Offset(0, 1).Activate
タイトル = ActiveCell.Value
となっているので、この時点でActiveCellは右に1つ移動してC2になります。
なので「タイトル」にはC2の内容が入ります。
そして続いて
題名 = ActiveCell.Value
がありますが、これはタイトルと同じセル(C2)の内容が入ります。
そして次の
ActiveCell.Offset(0, 4).Activate
記事 = ActiveCell.Value
ですが、ActiveCellがC2なので、その4つ右のG2がActiveCellとなり、そのセルの値が「記事」に代入されます。
その後
ActiveCell.Offset(0, 5).Activate
が実行されて、ActiveCellは5つ右のL2となります。
まとめると、
ファイル名=B2
タイトル=C2
題名=C2
記事=G2
となっています。
その後の新しいブックを追加して、内容を転記してテキスト保存し、閉じるところはとりあえず飛ばして、
GoTo Top
でTopに戻ったとき(このようなGoToの使い方は推奨されませんが)、上記に説明した通りにこの時点でActiveCellはL2となっており、その後の
ActiveCell.Offset(1, 0).Activate
では、L3が選択され、
Filename = ActiveCell.Value & ".txt"
でL3セルがファイル名となってしまいます。
もしここで、次のファイル名をB3から取得したいのであれば、
Goto文の前で
ActiveCell.Offset(0,-11)
としてActiveCellをB列に戻してやる必要があります。
しかし、上記のマクロの内容では
____________
A2=テキストファイル名
B2:D2=テキスト内容
____________
とはだいぶ異なるようなのですが、ファイルに出力したいセルは本当に上記のようにB~D列なのでしょうか?
それからもう一つ大きなミスがあります。
FileName = ActiveCell.Value & ".txt"
とファイル名に".txt"という拡張子をつけているので、たとえセルの内容が空でも、FileNameには".txt"という文字列が入り、
If FileName = "" Then
このIf文は成立することはありません。
If FileName = ".txt" Then
とするか、もしくは、順序を変えて
If ActiveCell.Value = "" Then
GoTo owari
End If
FileName = ActiveCell.Value & ".txt"
とした方がよいでしょう。
しかし、実際にこういう処理をループで回すときは、GoTo文は使わず、
Do While ActiveCell.Value <> ""
処理
Loop
とする方がよいです。
No.1
- 回答日時:
B~D行=テキスト内容 というのは、B,C,Dのセル内容をそれぞれ一行ずつ、ということでしょうか?
とりあえずそのようにマクロを書いてみました。実行する方法は以下の通りです。
・Alt+F11でVBAの画面を開く
・「挿入」>「標準モジュール」を選択
・右の画面に以下のマクロをコピーして貼り付ける
・その画面でF5キーを押すか、Alt+F11でExcelの画面に戻ってAlt+F8でマクロを実行
思った通りの動作でなかったら補足をお願いします。
Sub Macro1()
Dim i As Integer, j As Integer
Dim fnum As Integer
fnum = FreeFile
With ActiveSheet
For i = 1 To Range("A65536").End(xlUp).Row
Open .Cells(i, 1).Value For Output As fnum
For j = 2 To 4
Print #fnum, .Cells(i, j)
Next j
Close #fnum
Next
End With
End Sub
この回答への補足
わかりずらくてすいません
____________
A2=テキストファイル名
B2:D2=テキスト内容
____________
____________
A3=テキストファイル名
B3:D3=テキスト内容
____________
このような感じでファイルが終了するまでテキストに出力したいのですが・・・
出力できませんでした
内容は少し違いますが、
Sub Macro1()
Range("B1").Select
Top:
ActiveCell.Offset(1, 0).Activate
Filename = ActiveCell.Value & ".txt"
If Filename = "" Then
GoTo owari
End If
ActiveCell.Offset(0, 1).Activate
タイトル = ActiveCell.Value
題名 = ActiveCell.Value
ActiveCell.Offset(0, 4).Activate
記事 = ActiveCell.Value
ActiveCell.Offset(0, 5).Activate
Workbooks.Add
Range("A1").Formula = "<T>" & タイトル & "</T>"
Range("A2").Formula = "<D>" & 題名 & "</D>"
Range("A3").Formula = "<K>" & 記事 & "</K>"
ActiveWorkbook.SaveAs Filename:= _
Filename, FileFormat:=xlText, _
CreateBackup:=False
ActiveWindow.Close
GoTo Top
owari:
End Sub
このようなイメージで作ってましたが、最初のファイルしかテキスト出力できなくてその後はエラーで止まってしまい困ってます^^;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/21 09:42
- PDF PDF作成ファイルの不具合の件 5 2022/08/15 15:00
- Excel(エクセル) VBA 特定の列に入っているテキストをコピペ 2 2023/06/14 11:24
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
- Visual Basic(VBA) VBAで出力したCSVファイルの先頭にカンマを挿入したい 5 2022/10/14 12:20
- Access(アクセス) Accessで予定表を作成しようとしてます。 テーブル フィールド名 連番 オートナンバー型 年月日 2 2023/07/23 11:40
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/03 13:18
- PDF PDFの出力時のファイル名を消したい 3 2022/09/05 01:16
- Excel(エクセル) vba フォーム軽量化 1 2022/09/07 18:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定フォルダ内のテキストファ...
-
RandomとBinaryモードの違い
-
VBAでPowerPointからExcelにデ...
-
unicode文字列(日本語)のファイ...
-
Excel.VBA テキストファイルを...
-
ある文字列を含む行の抽出
-
VBSを用いてIPアドレスを取得し...
-
ファイル検索&出力
-
VBAで新しい日付順にファイルを...
-
ソースコードの差分がある行番...
-
テキストファイルを直接置換す...
-
access vbaでCSVファイルを文...
-
【DOSコマンド】一致した文字列...
-
大量のフォルダからひとつのフ...
-
コマンドプロンプトの「%1」と...
-
コマンドプロンプトのエラーに...
-
バッチでテキストファイルから...
-
バッチ処理でファイルの中身を...
-
特定フォルダ内のファイルを自...
-
バッチファイルでサーバーのフ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ある文字列を含む行の抽出
-
特定フォルダ内のテキストファ...
-
VBAでPowerPointからExcelにデ...
-
複数行の文字列を変数として使...
-
VB6側からテキストファイルをク...
-
Excel.VBA テキストファイルを...
-
access vbaでCSVファイルを文...
-
テキストファイルの行頭に文字...
-
BCPユーティリティの使用法_...
-
VBAで新しい日付順にファイルを...
-
時間短縮のために、テキストフ...
-
VB.NETでテキストファイルからH...
-
バッチでiniファイルの編集
-
テキストファイルを直接置換す...
-
ソースコードの差分がある行番...
-
RandomとBinaryモードの違い
-
fortranでのcsvファイルを出力...
-
excelにテキストファイルの指定...
-
unicode文字列(日本語)のファイ...
-
C#でのファイル編集と上書き保...
おすすめ情報