VBAでタブ区切りテキストの保存のプログラムを書くためには
Application.DisplayAlerts = False
Sheets("sheet01").Copy
ActiveWorkbook.SaveAs Filename:="D:\test.txt", FileFormat:=xlText
ActiveWindow.Close
Application.DisplayAlerts = True
という記述が一般的に使われます。
いま、あるプログラムでexcelシート上に
title
subtitle
001 002 003
333 444 555
666 777 888
ような内容が書き込まれたものをタブ区切りで出力したいのですが、
上記の方法で出力すると、
titleやsubtitleと書かれた行の右側にも空白のタブ区切りが一緒に保存されてしまいます。
あるプログラムで読み込ませるためには、
この二つの行のタブ区切りをいちいち消す必要があり、毎回手作業でするのは面倒です。
VBAでこのようなタブ区切りの有無を行ごとに指定して保存するようなことは可能でしょうか?
No.1ベストアンサー
- 回答日時:
データが、1行目2行目は1列、3行目以降に3列のみあるなら
以下のような感じで書けます。
3行目以降の行を最大10列目まで見ながらファイル出力します。
Dim row As Integer
Dim col As Integer
Dim mySht As Worksheet
Set mySht = Sheets("sheet01")
Open "D:\test.txt" For Output As #1
print #1,mySht.Cell(1,1).Text
print #1,mySht.Cell(2,1).Text
row = 3
Do
If mySht.Cell(row,1).Text = "" Then Exit Do '1列目が空欄ならループを抜ける
For col=1 To 10 '最大10列目まで見る
If mySht.Cell(row,col).Text = "" Then Exit For 'col列目が空欄なら次の行へ
If 1 < col Then '2列目以降ならタブを入れる
print #1,vbTab;
End If
print #1,mySht.Cell(row,col).Text;
Next col
print #1,""
row = row + 1
Loop
Close #1
No.2
- 回答日時:
>あるプログラムで読み込ませるためには、
>この二つの行のタブ区切りをいちいち消す必要があり、
>毎回手作業でするのは面倒です。
お疲れさまです。
「D:\test.txt」に対しての書き込みの方法もさることながら、「一緒に保存されてしま」う「右側にも空白のタブ区切り」を削除する方法が、いろいろとあろうかと存じます。
お示しのコードは、シートごとテキストファイルに保存する方法ですが、下記は、
1)セル範囲をクリップボードに格納し、
2)クリップボードに格納されたデータの中から「タブ+改行」の文字列を「改行」に置換して、
3)「D:\test.txt」を開いて、ペーストして保存する。
という方法です。
「vbTab」・「vbNewLine」は「タブ」・「改行」の意味ですので「Chr(9)」・「Chr(13)」でも構いません。
Sub Macro1()
Dim objCB As Object 'IDataAutoWrapper
Dim objFso As Variant 'FileSystemObject
Const ForWriting As Integer = 2
Dim objFile As Variant 'TextStream
Set objCB = GetObject("new:" & "1C3B4210-F441-11CE-B9EA-00AA006B1A69")
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objFile = objFso.OpenTextFile("D:\test.txt", ForWriting, True)
ActiveSheet.UsedRange.Copy
With objCB
.GetFromClipboard
Do
.SetText Replace(.GetText, vbTab & vbNewLine, vbNewLine)
.PutInClipboard
Loop Until InStr(.GetText, vbTab & vbNewLine) = 0
objFile.Write .GetText
End With
objFile.Close
Application.CutCopyMode = False
ActiveWindow.Close SaveChanges:=False
Set objFile = Nothing
Set objFso = Nothing
Set objCB = Nothing
End Sub
No.3
- 回答日時:
#2 DOUGLAS_ です。
Sheets("sheet01").Copy
が抜けておりましたので、
ActiveSheet.UsedRange.Copy
の前にでも入れてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAでエクセルをtxtに変換するとエクセルでカンマを含む文字数字がtxtでは「""」付にならないよ 1 2022/08/27 12:17
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/03/07 14:05
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/06/04 09:39
- Word(ワード) Word2013で、複数の表を同時に解除したい 1 2023/01/24 11:37
- Visual Basic(VBA) エクセルのマクロについて教えてください。 5 2023/06/02 08:44
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/11 12:55
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/03/02 08:40
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/06/01 14:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C++でファイルから複数行のデー...
-
文字列をカウントする方法
-
ファイル全てを .xlsm に変更し...
-
一定時間が経過したフォルダの削除
-
csvファイルの横方向への改行に...
-
while(<ハンドラ>) {} で行数を...
-
画像アップロード機能を追加し...
-
batファイルでrenameができませ...
-
while文がうまく動かない
-
VBAでCSVファイルの特定行を書...
-
MATLABのm-fileについて
-
配列のサイズを動的に拡張
-
ディレクトリのファイル作成を...
-
ANSI Cでファイル名、ディレク...
-
VB6.0でDB接続する際に切断時の...
-
Pythonの再帰関数の動作の流れ...
-
AutoCADのスクリプト
-
オープンしたファイルで行の連結
-
Perlで特定行から特定行までを...
-
連番のファイルを何個も開きたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチファイルの作り方(CSV→...
-
C言語で特定の行を抽出する方法...
-
【エクセル】改行無しテキスト...
-
タブの色を変更する方法
-
Edge スクレイピング
-
全角と半角文字が混在している...
-
空白文字 \\f と\\v の違いに...
-
htaccessで特定のディレクトリ...
-
デルファイ TabControl タブの...
-
Arduino Excel
-
VBAでタブ区切りテキストの保存...
-
VBAのFileFormatで悩んでいるこ...
-
【Access2003】VBAでタブ区切り...
-
C++でファイルから複数行のデー...
-
テキストファイル(tsv)を改行...
-
PHPで掲示板を作りたいです
-
awkスクリプトでダブルクォーテ...
-
VBAでCSVファイルの特定行を書...
-
DOSコマンドで、標準出力を出力...
-
ExcelをCSV書き出す場合のシー...
おすすめ情報