23歳OLです。プログラミング初心者です。
ご質問させていただきます。
▼やりたいこと
・選択したファイルの中身を一行ずつ取り出し、
・選択したファイル名を一つずつシートに書き込んでくれる
ツール
▼困っていること
・選択したファイルの中身を一行ずつ取り出し、(ここで一回)
・選択したファイル名を一つずつシートに書き込んでくれる(ここでもう一回)
合計2回ファイル選択のウィンドウが開いてしまう。
→なんとか、一回の選択ウィンドウで選択したファイルの中身を取り出し、
ファイルの名前を取り出してシートに書き込んでほしい。
▼現在書いているコード
Sub ReadMultiFiles()
' [[ 変数定義 ]]
Dim varFileName As Variant
Dim VWorkSheet As Worksheet
Dim NewWorkSheet As Worksheet
Dim SheetName As String
Dim Filename As Variant
Dim c As Long
Dim a As Variant
Dim s1 As Worksheet
Dim s2 As Worksheet
Dim s3 As Worksheet
Dim s4 As Worksheet
Set s1 = Worksheets("全体RESULT")
Set s2 = Worksheets("部分RESULT")
Set s3 = Worksheets("データ")
Set s4 = Worksheets("chushutu")
' [[ ファイルパスからファイル名を取得 ]]
SheetName = "chushutu"
' [[ ファイル名で新しいシート作成 ]]
Set NewWorkSheet = CreateWorkSheet(SheetName)
' [[ 複数ファイルパス名を取得 ]]
varFileName = Application.GetOpenFilename(FileFilter:="(.),.", _
Title:="ファイルの選択", MultiSelect:=True)
' [[ ファイルパス取得できなかったら ]]
If IsArray(varFileName) = False Then
Exit Sub
End If
' [[ ファイルパス取得できたら ]]
c = 0
For Each Filename In varFileName
' [[ ファイルを開く ]]
Dim buf As String, n As Long
Open Filename For Input As #1
c = c + 1
Do Until EOF(1)
Line Input #1, buf
a = Split(buf, vbLf)
Cells(1, c).Resize(UBound(a), 1) = Application.Transpose(a)
Loop
' [[ ファイルを閉じる(保存無し) ]]
Close #1
Next Filename
s3.Select
'ファイル名取得()
Dim sPath As String, buf2 As String, cnt As Long
With Application.FileDialog(msoFileDialogFolderPicker) ' ▲
If .Show <> True Then Exit Sub ' ▲
sPath = .SelectedItems(1) ' ▲
End With ' ▲
buf2 = Dir(sPath & "*.*")
Do While buf2 <> ""
cnt = cnt + 1
Cells(cnt + 12, 2) = buf2
buf2 = Dir()
Loop
'抽出してきたものを、列にセットする
s4.Select
Columns("A").Copy
s4.Select
Columns("A").Copy
s4.Select
Columns("B").Copy
s5.Select
Columns("A").Copy
s4.Select
Columns("C").Copy
s6.Select
Columns("A").Copy
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
つたない説明で申し訳ございませんが、ご教示よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/03/03 01:13
2015/03/03 13:01
2015/03/05 02:24
2015/03/05 02:45
2015/03/05 03:54
2015/03/06 00:43