ここから本文です

VBAによるCSV出力についてご質問です。 下記のような入力内容のエクセルシート...

アバター

ID非公開さん

2020/6/2823:31:03

VBAによるCSV出力についてご質問です。

下記のような入力内容のエクセルシート(sheet1)があります。

※数字、カナは半角
※行によって使用する列が異なる

1行目(先頭行)使用列:A列~L列
A1「1」、B1「10」、C1「0」、D1「1234567890」、E1「テストタロウ」、F1「0629」、G1「0112」、H1「テストデータ」、I1「101」、J1「テスト1」、K1「1」、L1「0012345」

2行目~50行目(最終行は可変)使用列:A列~J列
A2~A50「1」、B2~B50「0123」、C2~C50「テストチイキ」、D2~D50「0011」、E2~E50「シュツリョクテスト」、F2~F50「1」、G2~G50「0012345~0012393」※次の行は前の行の1ずつカウントアップ、H2~H50「テストハナコ」、I2~I50「0000123456~0000123504」※次の行は前の行の1ずつカウントアップ、J2~J50「1」

51行目(最終行から上に2行目)使用列:A列~C列
A51「1」、B52「11」、C52「10,000,000」

52行目(最終行)使用列:A列のみ
A52「5」


これらを別シートにその日の日付例えば「20200629.csv」という名前でCSVファイルとして出力するためのVBAのソースをどなたか教えてください。
なお、下記の減少を回避したいです。

・頭に「0123」や「000123」が付いている数字セルの場合、
CSV出力した際に「0落ち」しない。
・それぞれの末尾のカンマが付与されない。
(「○,」や「○,,」ではなく「○,○」→ 次の行という形)

知識がなく、まったく実装できません。よろしくお願いいたします。

閲覧数:
55
回答数:
1
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

kin********さん

2020/6/2907:53:54

Sheet1にコマンドボタン(ActiveX)を配置してClickイベントに以下を。
CSVファイルのファイル名は「その日の日付.csv」(ex.20200629.csv)
ブックと同じフォルダにセーブされます。
それと行・列とも制限はありません。

Dim RNG As Range, MaxRow, MaxCol, TempData(), SData(), R, C
Dim CSVPath, DateData

Set RNG = Worksheets("Sheet1").UsedRange
MaxRow = RNG.Row + RNG.Rows.Count - 1
MaxCol = RNG.Column + RNG.Columns.Count - 1
ReDim SData(1 To MaxRow)
ReDim TempData(1 To MaxCol)

For R = 1 To MaxRow
For C = 1 To MaxCol
TempData(C) = Cells(R, C).Text
Next C
SData(R) = Join(TempData, ",")
Next R

DateData = Format(Date, "yyyymmdd")
CSVPath = ThisWorkbook.Path & "\" & DateData & ".csv"
Open CSVPath For Output As #1
For R = 1 To MaxRow
Print #1, SData(R)
Next R
Close #1
Set RNG = Nothing



ついでに読み込み。
読み込み元フォルダはブックと同じフォルダ。
Sheet1にもう1つコマンドボタン(ActiveX)を配置してClickイベントに以下を。
読み込み先はSheet2にしてますから、同一ブックにSheet2を用意して下さい。
それと、読込先のシートは表示設定を文字列にしておいて下さい。
そうしないと、「0001」が「1」になっちゃいます。
読込先のシートは(<-)の行を適当に変更して下さい。

Dim F_Name, Ret
Dim CSVPath, temp, TempData As Variant, R

F_Name = InputBox("年月日を入力")
If F_Name = "" Then Exit Sub

CSVPath = ThisWorkbook.Path & "\" & F_Name & ".csv"
temp = Dir(CSVPath)
If temp = "" Then
MsgBox F_Name & ".csv が存在しません。"
Exit Sub
End If

R = 1
Open CSVPath For Input As #1
Do While Not EOF(1)
Line Input #1, temp
TempData = Split(temp, ",")
With Worksheets("Sheet2") '(<-)
.Range(.Cells(R, 1), .Cells(R, UBound(TempData) + 1)) = TempData
End With
'
R = R + 1
DoEvents: Loop
Close #1

  • アバター

    質問者

    ID非公開さん

    2020/6/2909:39:20

    早速ありがとうございます。
    前段のプログラムで同一フォルダにまずカンマ付きのcsvファイルが作成されました。

    後段で作成するsheet2はマクロボタンを設定している元の.xlsmファイル上にあるという想定でしょうか。

    すでに元ファイルには「出力用」というシートに、質問本文に記載しているような入力済みのデータがあり、これをシート上に作ったボタン押下で特に新たなシートを手動で作成するなどの作業なく「カンマなし」のcsvファイル出力まで一気に処理したいのですが、可能でしょうか。

  • その他の返信(3件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる