いつもお世話になっております。
複数(4個)のUSBから名前の違う複数のCSVデータを、同一のBookにある、それぞれ準備したCSV名のシートを選択するマクロを組みたいと考えております。
エクセルは2010です。
テスト.xlsm に
シート名【Date1】【Date2】【Date3】【Date4】がすでに準備されており、
それぞれのUSBの中のCSVファイルは、Date1~Date4 までの、どれかのファイルが1つずつ入っており読み込みボタンを押して同名のシートへインポートを行い、USBのCSVファイルもすべて削除をしたいと考えております。
シートの有無などをチェックを行いながら、処理出来れば理想的です。
CSVファイル名をシート名に処理するという、他のすばらしいコードを参考してみましたが解読・変更が出来ません。ご教示よろしくお願い致します。
Sub ReadMultiCSVFiles()
' [[ 変数定義 ]]
Dim varFileName As Variant
Dim CSVWorkSheet As Worksheet
Dim NewWorkSheet As Worksheet
Dim SheetName As String
' [[ コピー範囲の変数 ]]
Dim R1 As Integer
Dim R2 As Integer
Dim C1 As Integer
Dim C2 As Integer
' [[ 複数ファイルパス名を取得 ]]
varFileName = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", _
Title:="CSVファイルの選択", MultiSelect:=True)
' [[ ファイルパス取得できなかったら ]]
If IsArray(varFileName) = False Then
Exit Sub
End If
' [[ ファイルパス取得できたら ]]
For Each Filename In varFileName
' [[ ファイルパスからファイル名を取得 ]]
SheetName = Dir(Filename)
' [[ ファイル名で新しいシート作成 ]]
Set NewWorkSheet = CreateWorkSheet(SheetName)
' [[ CSVファイルを開く ]]
Workbooks.Open Filename:=Filename
Set CSVWorkSheet = ActiveSheet
' [[ 有効セルの範囲取得 ]]
R1 = CSVWorkSheet.UsedRange.Row
C1 = CSVWorkSheet.UsedRange.Column
R2 = CSVWorkSheet.UsedRange.End(xlDown).Row
C2 = CSVWorkSheet.UsedRange.End(xlToRight).Column
' [[ 有効セルの範囲のコピー ]]
CSVWorkSheet.UsedRange.Copy Destination:=NewWorkSheet.Range(NewWorkSheet.Cells(R1, C1), NewWorkSheet.Cells(R2, C2))
' [[ CSVファイルを閉じる(保存無し) ]]
ActiveWorkbook.Close SaveChanges:=False
Next
End Sub
' ワークシート名を指定したワークシートの作成
Function CreateWorkSheet(WorkSheetName As String) As Worksheet
' 変数定義
Dim NewWorkSheet As Worksheet
Dim iCheckSameName As Integer
' ワークシートの作成
' ※一番最後に挿入
Set NewWorkSheet = Worksheets.Add(After:=Worksheets(Worksheets.Count))
' 同じ名前ワークシートが無いか確認
iCheckSameName = 0
For Each ws In Sheets
If ws.Name = WorkSheetName Then
MsgBox "ワークシート名:" + WorkSheetName + " この名前は既に使われています。"
iCheckSameName = 1
End If
Next
'同じ名前のワークシートがなければ
If iCheckSameName = 0 Then
NewWorkSheet.Name = WorkSheetName
Set CreateWorkSheet = NewWorkSheet
End If
End Function
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
①.csvは消しています。
②そのように変更しました。
Sub ReadMultiCSVFiles()
' [[ 変数定義 ]]
Dim varFileName As Variant
Dim CsvWs As Worksheet
Dim SheetName As String
Dim myFileName
Dim Ws As Worksheet
' [[ 複数ファイルパス名を取得 ]]
varFileName = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", _
Title:="CSVファイルの選択", MultiSelect:=True)
' [[ ファイルパス取得できなかったら ]]
If IsArray(varFileName) = False Then
Exit Sub
End If
' [[ ファイルパス取得できたら ]]
For Each myFileName In varFileName
' [[ ファイルパスからファイル名を取得 ]]
SheetName = Dir(myFileName)
' 同じ名前ワークシートが無いか確認
Set Ws = Nothing
On Error Resume Next
Set Ws = Worksheets(Left(SheetName, Len(SheetName) - 4))
On Error GoTo 0
If Ws Is Nothing Then
' 無い時の処理
MsgBox "シートが見当たりません"
Exit Sub
Else
' ワークシートのClear
Ws.Cells.ClearContents
End If
' [[ CSVファイルを開く ]]
Workbooks.Open Filename:=myFileName
Set CsvWs = ActiveSheet
' [[ 有効セルの範囲のコピー ]]
CsvWs.UsedRange.Copy Destination:=Ws.Range("A1")
' [[ CSVファイルを閉じる(保存無し) ]]
ActiveWorkbook.Close SaveChanges:=False
' [[ CSVファイルをKill(保存無し) ]]
'Kill (myFileName) ' テストファイルを作り、テストを十分してからコメントマークを消してください。
' 私個人はファイルの消去は自動で行わない方が良いと思います。
Next
End Sub
No.1
- 回答日時:
これでどうかな
Sub ReadMultiCSVFiles()
' [[ 変数定義 ]]
Dim varFileName As Variant
Dim CsvWs As Worksheet
Dim NewWs As Worksheet
Dim SheetName As String
Dim myFileName
' [[ コピー範囲の変数 ]]
Dim Row1 As Long
Dim Row2 As Long
Dim Col1 As Long
Dim Col2 As Long
' [[ 複数ファイルパス名を取得 ]]
varFileName = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", _
Title:="CSVファイルの選択", MultiSelect:=True)
' [[ ファイルパス取得できなかったら ]]
If IsArray(varFileName) = False Then
Exit Sub
End If
' [[ ファイルパス取得できたら ]]
For Each myFileName In varFileName
' [[ ファイルパスからファイル名を取得 ]]
SheetName = Dir(myFileName)
' [[ ファイル名で新しいシート作成 ]]
Set NewWs = CreateWorkSheet(SheetName)
' [[ CSVファイルを開く ]]
Workbooks.Open Filename:=myFileName
Set CsvWs = ActiveSheet
' [[ 有効セルの範囲取得 ]]
Row1 = CsvWs.UsedRange.Row
Col1 = CsvWs.UsedRange.Column
Row2 = CsvWs.UsedRange.End(xlDown).Row
Col2 = CsvWs.UsedRange.End(xlToRight).Column
' [[ 有効セルの範囲のコピー ]]
CsvWs.UsedRange.Copy Destination:=NewWs.Range(NewWs.Cells(Row1, Col1), NewWs.Cells(Row2, Col2))
' [[ CSVファイルを閉じる(保存無し) ]]
ActiveWorkbook.Close SaveChanges:=False
' [[ CSVファイルをKill]]
'Kill (myFileName) ' テストファイルを作り、テストを十分してからコメントマークを消してください。
' 私個人はファイルの消去は自動で行わない方が良いと思います。
Next
End Sub
' ワークシート名を指定したワークシートの作成
Function CreateWorkSheet(WsName As String) As Worksheet
Dim Ws As Worksheet
' 同じ名前ワークシートが有るか確認
On Error Resume Next
Set Ws = Worksheets(WsName)
On Error GoTo 0
If Ws Is Nothing Then
' ワークシートの作成
' ※一番最後に挿入
Set Ws = Worksheets.Add(After:=Worksheets(Worksheets.Count))
Ws.Name = WsName
Else
' ワークシートのClear
Ws.Cells.Clear
End If
Set CreateWorkSheet = Ws
End Function
'Kill (myFileName)はコメントになっていますので、自己責任で実行できるようにしてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【Excel VBA】取り込んだファイ...
-
0バイトのテキストファイル
-
HTMLテキストリンクでExcelファ...
-
VBS ファイルマージ処理
-
RPGでメッセージファイル利用
-
includeで別サイトを読み込む
-
includeした外部ページがリンク...
-
CSV名と同じシートを選択して取...
-
Eclipseで検索ができなくなった
-
VBAでフォルダ内の全てのcsv...
-
ファイル作成日時と更新日時を...
-
C#で壁紙の変更を行いたい。。
-
ディレクトリのサイズの取得
-
HTMLまたはJavaScriptでフ...
-
Javaで名前付きパイプ
-
<input type="file" で初期値...
-
ActiveXとそれに代わるもの
-
サイトマップにサブドメインを...
-
ファイル名を任意の名前に作成...
-
VB6.0のメモリリークについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Eclipseで検索ができなくなった
-
【Excel VBA】取り込んだファイ...
-
0バイトのテキストファイル
-
VBAで、JPG写真の撮影日時を読...
-
main関数のコマンドライン引数...
-
ディレクトリのサイズの取得
-
VB6.0のメモリリークについて
-
サイトマップにサブドメインを...
-
HTMLテキストリンクでExcelファ...
-
ファイル作成日時と更新日時を...
-
C++.NET 2003 「空のドキュメ...
-
JavaでPDFファイルに変換するに...
-
<input type="file" で初期値...
-
VB2008 iniファイルの全セクシ...
-
リンク先がjspファイルなのです...
-
【VBA】複数CSVの特定範囲を1つ...
-
msgget()で指定するkey値について
-
Javaのファイルダウンロードに...
-
BASP21のファイルアップロード...
-
vbaの構文の修正相談(xmlファ...
おすすめ情報
ki-aaa さん
早速にありがとうございます。思った通りの動きが出来ました!
2点ありまして、
①取り込んだ csvのシート名が【Date1.csv】に名前がついてしまい、すべて新規のワークシートとして追加されてしまいます。
②同名のシートが無ければ処理を抜けて、Mg "シートが見当たりません”と処理を抜けたいのですが、記述はどのようになりますでしょうか?
いろいろと触ってみましたが、よろしくお願い致します。
ki-aaa 様、ありがとうございます!思ったとおりとなりました。
度々申し訳ございません。取り込んだCSVデータを別の名前でデスクトップ¥実績フォルダに保存する処理はどのように記述すればよろしかったでしょうか?バックグランドで処理を走らせたいと考えております。
Dim Fn, As String, re As Long
Sheets(Ws).Copy
Fn = Format(Range("A2"), "yyyy" & "_" & "mm") & "Date"
ActiveWorkbook.SaveAs Filename:="C:\Desktop\実績フォルダ\" & Fn, FileFormat:=xlCSV, Local:=True
ActiveWindow.Close
などど、他の処理で使用しております。
【Sheets(Ws).Copy】などはあっておりますでしょうか?