A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
VBカテゴリにありましたね。
ちょっと曖昧な質問でしたので、お答えしにくい部分がありました。それは、1つのCSVファイルを、1つのシートに入れるというこということができるとも読めます。そして、3つのCSVファイルを、一気に3つのシートに入れるということが、うまく行きません、ということですと、一体、どこまで出来ているのだろうか、疑問が生じてしまいます。確かに、3つを一気にシートにインポートすることは難しいにしても、1つずつ入れるなら、それでも良いような気がします。
本来、3つを一気にいれるということは、4つや5つもあるとも取れます。シートの制約やシートを加えること、データを入れるシートは左端シートから右隣に移っていくことなど、様々な約束事が必要になってしまいます。それらをこちらで勝手に決めてしまいました。シートにはデータが何もないことを条件にしています。
以下はサンプルです。
'//
Sub OpenCSVimport()
Dim Fnames As Variant
Dim fNum As Integer
Dim shCnt As Integer, cnt As Integer
Dim fn As Variant
Dim lngCnt As Long
Dim TextLine As String
Dim myArray
ThisWorkbook.Activate
Dim myPath As String
Dim dif As Integer
myPath = "C:\Users\Test1\" 末尾は、¥で締めてください。
ChDir myPath
Fnames = Application.GetOpenFilename("CSVファイル,*.csv", , "CSV_Select", , True) 'MultiSelect OK
If VarType(Fnames) = vbBoolean Then MsgBox "キャンセルされました。": Exit Sub
shCnt = UBound(Fnames) 'ファイルを選んだ数
cnt = 1
Worksheets(1).Select '左端に移動
dif = shCnt - Worksheets.Count
Do
With ActiveSheet
If Application.CountA(.UsedRange.Cells) > 0 Then
MsgBox "シートにデータがあるように思われます。" & vbCrLf & _
"データのないシートを使ってください。", vbExclamation
Exit Sub
End If
If cnt >= shCnt Then
Exit Do
Else
On Error Resume Next
.Next.Select
If Err.Number = 91 Then
If MsgBox("シートが不足していますから" & dif & "枚加えます。", vbOKCancel) = vbCancel Then Exit Sub
Worksheets.Add After:=ActiveSheet, Count:=dif
End If
On Error GoTo 0
End If
cnt = cnt + 1
End With
Loop
cnt = 0
Worksheets(1).Select '左端に移動
For Each fn In Fnames
With ActiveSheet
fNum = FreeFile()
Open fn For Input As #fNum
Application.ScreenUpdating = False
Do While Not EOF(fNum)
Line Input #fNum, TextLine
If Len(TextLine) > 1 Then
lngCnt = lngCnt + 1
myArray = Split(TextLine, ",") 'デリミタは、「,」
.Cells(lngCnt, 1).Resize(, UBound(myArray) + 1).Value = myArray
End If
Loop
Close #fNum
Application.ScreenUpdating = True
lngCnt = 1
cnt = cnt + 1
If cnt >= shCnt Then Exit For
.Next.Select
End With
Next fn
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Visual Basic(VBA) VBA初心者です。電話番号の数字の前に0を表示させたいです。 2 2022/12/14 03:58
- Excel(エクセル) 【マクロ】webアドレスにて指定されたCSVファイル【excelソフト表示】を印刷する件 1 2023/02/15 01:52
- Excel(エクセル) CSVファイルでVBAを動かす方法 3 2023/04/04 10:22
- Excel(エクセル) エクセルでcsvファイルを開いてVBAを使いたい 7 2022/04/28 11:12
- Visual Basic(VBA) エクセルのマクロについて教えてください マクロを実行して 作業フォルダの中にある PDFファイル名を 3 2023/07/01 15:16
- Access(アクセス) CSVファイルの「0落ち」にVBA 6 2023/02/02 15:27
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Excel(エクセル) エクセルのファイルを複数のPCで同期する方法は? 7 2022/11/23 17:35
- Access(アクセス) Access VBA を利用して、フォルダ内のファイルの名称を変更したい 1 2023/08/03 08:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
ハイパーリンクでジャンプした...
-
エクセルでブック内の倍率がバ...
-
【ExcelVBA】マクロの入ったシ...
-
エクセルで複数のシートに画像...
-
エクセルのシート連番の振り直し
-
特定のシートのみ再計算させな...
-
ワークシートそのものの色を変...
-
Wordで差し込み印刷時に表示す...
-
エクセルの2つのシートを並び...
-
指定したシート名以外を非表示...
-
エクセル、特定のシートにパス...
-
エクセル、別のシートの表をポ...
-
特定の複数のシートに同じ処理...
-
エクセルでリンク貼り付けした...
-
InputBoxに入力した言葉をシー...
-
Excelで条件に一致したものだけ...
-
Accessのテーブルを既存のExcel...
-
Excel VBAで、複数のシートの...
-
エクセルで開くページを指定したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
エクセルで複数のシートに画像...
-
特定のシートのみ再計算させな...
-
エクセルでブック内の倍率がバ...
-
ワークシートそのものの色を変...
-
【ExcelVBA】マクロの入ったシ...
-
エクセルの2つのシートを並び...
-
EXCELの図形(テキストボックス)...
-
ハイパーリンクでジャンプした...
-
エクセルのシート連番の振り直し
-
特定の複数のシートに同じ処理...
-
エクセルのシー名を二段表示に...
-
Wordで差し込み印刷時に表示す...
-
エクセルで、シートの名前を変...
-
エクセルでリンク貼り付けした...
-
エクセル、特定のシートにパス...
-
accessへエクセルの複数のシー...
-
Accessのテーブルを既存のExcel...
-
【Excel VBA】データ貼り付け先...
-
EXCELの「シートの見出し」のフ...
おすすめ情報