No.5ベストアンサー
- 回答日時:
こんにちは。
ひとつだけ、超難易度なリクエストですね。
「ゴミ箱に捨てれるなら捨てたいですが…」
これ以外は、VBAが書けるひとなら、何も言わずに問題なくできるはずです。
VBAを扱う者には、質問者さんが気が付かないところが見えているものなのですね。
私からすると、作成依頼でお金をちょうだいするなら別ですが、掲示板では、無料の有志が行っている関係で、ある程度の知識を持った方にお答えしたいというのが、本音のところですし、また、そうでない場合は、非常にトラブルが多くなります。
あまり凝ったことを考えるよりも、まず、1歩1歩進めるしかありません。私の見た中では、半年間、コードを集めて目的の業務に合うように実行ファイルにした質問者さんがいます。だから、コードはいろんな人による、つぎはぎだらけですが、恐ろしい執念だと思いました。
少なくとも、「マクロ付きエクセル」に転機だけは、辞めさせていただきました。テンプレートという手もありますが、マクロは本体だけで十分です。
>転記後まとめは保存して閉じる。
今は、閉じてはいません。ブロックコメント(' NewBook.Closse)の(')を外してください。また、ファイル名は、日付+時間csv.xlsx というようなスタイルになっていますから、お好きなように変えてください。
'-----------------
Option Explicit
Private Declare Function SHFileOperation Lib "shell32.dll" _
Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long '32bitバージョン
Private Type SHFILEOPSTRUCT
hWnd As Long
wFunc As Long
pFrom As String
pTo As String
fFlags As Integer
fAnyOperationsAborted As Long
hNameMappings As Long
lpszProgressTitle As String
End Type
Private Const FO_DELETE = &H3& '削除
Private Const FOF_NOCONFIRMATION = &H10& '確認なし
Private Const FOF_ALLOWUNDO = &H40& 'ごみ箱へ
Private Const FOF_MULTIDESTFILES = &H1& '複数ファイル指定
Private Const FOF_NOERRORUI = &H400& 'エラーのダイアログを表示しない
Sub ConslidateCSVFiles()
Dim FileNames As Variant
Dim fn As Variant
Dim NewBook As Workbook
Dim cnt As Long
Dim shCnt As Long
Dim i As Long
Dim Fno As Integer
Dim TextLine As String
Dim lngCount As Long
Dim myArray As Variant
Dim myPath
FileNames = Application.GetOpenFilename("CSV Files (*.csv), *.csv", MultiSelect:=True)
If Not IsArray(FileNames) Then
If FileNames = False Then Exit Sub
End If
Set NewBook = Workbooks.Add
shCnt = NewBook.Worksheets.Count '規定のシートの全数
i = 1 'シートのカウント
For Each fn In FileNames
If shCnt < i Then
NewBook.Worksheets.Add After:=NewBook.Worksheets(i - 1)
End If
With Worksheets(i)
.Activate
Application.ScreenUpdating = False
'インポート開始
Fno = FreeFile()
Open fn For Input As #Fno
Do While Not EOF(Fno)
Line Input #Fno, TextLine
If Len(TextLine) > 1 Then
lngCount = lngCount + 1
myArray = Split(TextLine, ",") 'デリミタは、「,」
.Cells(lngCount, 1).Resize(, UBound(myArray) + 1).Value = myArray
End If
Loop
Close #Fno
.Name = "ログ" & i
lngCount = 0
i = i + 1
Application.ScreenUpdating = True
End With
Next fn
myPath = CreateObject("WScript.Shell").SpecialFolders("desktop") & "\"
NewBook.SaveAs myPath & Format$(Now, "yymmdd_hhnn") & "csv", xlOpenXMLWorkbook
If MsgBox("ファイルを削除してよろしいですか?", vbOKCancel) = vbCancel Then Exit Sub
Call sFileDelete(FileNames)
End Sub
Private Sub sFileDelete(ByVal FileNames)
'レスキュー花ちゃん参考(ファイルをゴミ箱に入れるコード)
On Error Resume Next
Dim lpFileOp As SHFILEOPSTRUCT
Dim Result As Long
Dim MyFlag As Long
Dim DelFile As String
MyFlag = FOF_ALLOWUNDO 'ごみ箱へ
MyFlag = MyFlag + FOF_NOCONFIRMATION '確認しない
MyFlag = MyFlag + FOF_MULTIDESTFILES '複数ファイル
MyFlag = MyFlag + FOF_NOERRORUI 'エラーのダイアログを非表示
' ファイル操作に関する情報を指定
If IsArray(FileNames) Then
DelFile = Join(FileNames, vbNullChar)
Else
DelFile = FileNames
End If
With lpFileOp
.hWnd = Application.hWnd
.wFunc = FO_DELETE
.pFrom = DelFile
.fFlags = MyFlag
End With
' ファイル操作を実行
Result = SHFileOperation(lpFileOp)
If Result <> 0 Then
MsgBox "削除に失敗しました。", vbExclamation
Else
MsgBox "削除しました。", vbInformation
End If
End Sub
No.3
- 回答日時:
根本的な話ですがCSVファイルにはマクロを組み込むことは出来ません。
CSVファイルをダブルクリックするとエクセルで開くので勘違いされているのかもしれませんが、CSVファイルはテキストファイルです。次のうちどれをご希望でしょうか?
①「まとめ.csv」を作るためのエクセルファイル(まとめ作成.xlsm)を作成する。
② マクロ付きのエクセルファイル(まとめ.xlsm)にまとめる。
③ その他(詳しく説明してください)
また、デスクトップにはCSVファイルは対象の物のみでしょうか?違うならば名前の規則性のようなものを提示してください。
さらに、処理したCSVファイルはどうするのでしょうか?
No.2
- 回答日時:
(´・ω・`)?
作成依頼ですか。
残念ですが、ここは依頼をする場所ではありません。
自分で対処できるようにアドバイスをもらい自身で解決できるようにする場所です。
・・・本題・・・
そしてマクロを作成するにあたって何が分からないのでしょうか。
CSVファイルの読み込み方法が分からないのか、
読み込んだ次の行からさらに読み込ませる方法が分からないのか、
そもそもそんな事ができるのかどうかを知りたいのか。
そういった具体的な質問をすると良いでしょう。
・・・余談・・・
条件が変わったときに自分で修正できるくらいの理解をしていないと、
目の前にあるその問題を解決できたとはいいません。
代わりにやってもらう事は、疑問の先送りにしかならないのです。
そしてここはそういった疑問を解決するための場所なんですね。
代わりに作成して欲しいという事であれば、ソフトウェアメーカーさんに相談されることをお勧めします。
Excelなどを専門に扱うソフトウェアメーカーさんを探すと良いでしょう。
VBAの勉強のためにサンプルが欲しいという事でしたら、
まずは自身でどこまでできるのかを示すと、より具体的なアドバイスをもらえると思います。
がんばれ。
No.1
- 回答日時:
ファイル名をどう扱うかなどやりたいことが今一つハッキリしませんが、まずはGoogleなどで「VBA 複数CSVファイル 取り込み」とか「VBA 複数CSVファイル 読み込み」といったキーワードで検索してみてください。
サンプルコードを示した説明ページが幾つも見つかるかと思います。それを呼んでどのようなコードを書くとどんな動作となるのかを理解されるとよいかと思います。
そうすでばご自身なりのアレンジも可能になるはずです。
参考まで。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) CSVファイルの「0落ち」にVBA 6 2023/02/02 15:27
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Excel(エクセル) CSVファイルでVBAを動かす方法 3 2023/04/04 10:22
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) VBAで特定の場所にあるCSVファイル(複数)から特定場所を抜き出してExcelに転記したいです。 11 2023/05/23 16:29
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- その他(プログラミング・Web制作) データ解析ソフトRでのファイル入力read.csvがエラーになります 7 2022/03/27 22:11
- Excel(エクセル) VBA ふたつの同じ様式シートのセルをコピーしたい 2 2023/03/08 15:28
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAでセルに入力したパ...
-
excelに貼り付けた数値が勝手に...
-
【マクロ】シート名を取得する...
-
ハイパーリンクで前回値をひき...
-
ファイルを並び替えるときの「...
-
EXCELのVBAで画像を選んだ順に...
-
CSVで文字化けしてしまうのを直...
-
エディタで効率的な切り出し方法
-
Excelのマクロを実行しても、エ...
-
Excelでリンクを使用すると#N/A...
-
パス名を参照するコードのファ...
-
エクセル 一括リンクの解除
-
VLOOKUP関数とネットワークに置...
-
PDF ファイルが開けません。
-
エクセルVBAで複数のファイ...
-
ローマ字→カタカナへ変換(エク...
-
Excel VBA のdebug(F8キー) が...
-
スクロールしてもボタンを常に...
-
押したボタンの位置取得(共通の...
-
EXCELのセルへ、デジタル時計を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAでセルに入力したパ...
-
excelに貼り付けた数値が勝手に...
-
EXCELのVBAで画像を選んだ順に...
-
Teraマクロで日付ディレクトリ...
-
ファイルを並び替えるときの「...
-
VLOOKUP関数とネットワークに置...
-
エクセル 一括リンクの解除
-
excel INDIRECT 他ファイル参照
-
エクセルファイルから指定した...
-
エディタで効率的な切り出し方法
-
PDF ファイルが開けません。
-
EXCELのマクロを使って、テキス...
-
ハイパーリンクで前回値をひき...
-
エクセルからスキャナVBAで連動...
-
EXCEL VBA ー 同一フォルダ内の...
-
CSVで文字化けしてしまうのを直...
-
エクセルマクロでファイルオー...
-
ミュージックファイルのファイ...
-
エクセルVBAでファイルを連...
-
エクセルVBA+ADOで特定のCSVフ...
おすすめ情報
②のマクロ付きエクセルに転記です。あらかじめマクロ付きのエクセルを用意しておきます。それからCSVを取り込みます。デスクトップにはCSVは対象の1〜6(可変)ファイルのみです。名称はログ1.CSVからログ6.CSVの名称です。転記後まとめは保存して閉じる。CSVはそのままでも構いません。ゴミ箱に捨てれるなら捨てたいですが…