アプリ版:「スタンプのみでお礼する」機能のリリースについて

お願いします!!

デスクトップに日々、最大6つのcsvファイルが他の端末から落ちてきます(落ちる数は1~5の変数)
同じくデスクトップに、まとめ.csvファイルを作り(シート2)にマクロを登録したボタンを作成し1から6(ファイル数可変)のscvファイルの中身をシート1に順番にコピー(取り込み)したいです。

以上、よろしくです。

「複数のcsvファイルの結合」の質問画像

質問者からの補足コメント

  • ②のマクロ付きエクセルに転記です。あらかじめマクロ付きのエクセルを用意しておきます。それからCSVを取り込みます。デスクトップにはCSVは対象の1〜6(可変)ファイルのみです。名称はログ1.CSVからログ6.CSVの名称です。転記後まとめは保存して閉じる。CSVはそのままでも構いません。ゴミ箱に捨てれるなら捨てたいですが…

    No.3の回答に寄せられた補足コメントです。 補足日時:2018/04/14 19:44

A 回答 (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
    • good
    • 0

CSVファイルはテキストファイルです。


コマンドで読み込めば、一つのファイルに連結できます。
お試しください。
    • good
    • 0

根本的な話ですがCSVファイルにはマクロを組み込むことは出来ません。


CSVファイルをダブルクリックするとエクセルで開くので勘違いされているのかもしれませんが、CSVファイルはテキストファイルです。次のうちどれをご希望でしょうか?
①「まとめ.csv」を作るためのエクセルファイル(まとめ作成.xlsm)を作成する。
② マクロ付きのエクセルファイル(まとめ.xlsm)にまとめる。
③ その他(詳しく説明してください)

また、デスクトップにはCSVファイルは対象の物のみでしょうか?違うならば名前の規則性のようなものを提示してください。

さらに、処理したCSVファイルはどうするのでしょうか?
この回答への補足あり
    • good
    • 0

(´・ω・`)?


作成依頼ですか。

残念ですが、ここは依頼をする場所ではありません。
自分で対処できるようにアドバイスをもらい自身で解決できるようにする場所です。

・・・本題・・・

そしてマクロを作成するにあたって何が分からないのでしょうか。
CSVファイルの読み込み方法が分からないのか、
読み込んだ次の行からさらに読み込ませる方法が分からないのか、
そもそもそんな事ができるのかどうかを知りたいのか。

そういった具体的な質問をすると良いでしょう。

・・・余談・・・

条件が変わったときに自分で修正できるくらいの理解をしていないと、
目の前にあるその問題を解決できたとはいいません。
代わりにやってもらう事は、疑問の先送りにしかならないのです。

そしてここはそういった疑問を解決するための場所なんですね。
代わりに作成して欲しいという事であれば、ソフトウェアメーカーさんに相談されることをお勧めします。
Excelなどを専門に扱うソフトウェアメーカーさんを探すと良いでしょう。

VBAの勉強のためにサンプルが欲しいという事でしたら、
まずは自身でどこまでできるのかを示すと、より具体的なアドバイスをもらえると思います。
がんばれ。
    • good
    • 0

ファイル名をどう扱うかなどやりたいことが今一つハッキリしませんが、まずはGoogleなどで「VBA 複数CSVファイル 取り込み」とか「VBA 複数CSVファイル 読み込み」といったキーワードで検索してみてください。

サンプルコードを示した説明ページが幾つも見つかるかと思います。
それを呼んでどのようなコードを書くとどんな動作となるのかを理解されるとよいかと思います。
そうすでばご自身なりのアレンジも可能になるはずです。

参考まで。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!