|
はじめまして、VBA初心者のマスクと申します。
現在、標記の通りの
1、CSVファイルを読み込む
2、日付を入力し、その日付を含む行を抽出
3、別シートの空白列に貼り付けたい
4、また別のCSVファイルを開く
5、日付を入力し、その日付を含む行を抽出(2と同じ日付です)
6、別シートの空白列に貼り付けたい
(3でA1〜B4まで埋まっていたら、次はC1から貼り付けたい)
と続く感じのVBAマクロを作りたいと考えています。
色々と試行錯誤したのですが、上手く動かず、こちらに質問させていただきました。
まず、上記をADOやFSOを使い動かそうとやってみたのですが知識不足で上手く動きませんでした。
あと空白行を取得する事例は見つけることが出来るのですが、空白列を取得しそこに貼り付けるという動きをするような事例を見つけることが出来ず、そこがまったくの手つかずとなっています。
このようなプログラムを作るにはどういった関数を使えば良いかなどヒントでも良いので、教えてください。宜しくお願いします。
<考えた例>
Option Explicit
' テキストファイル読み込みサンプル3(FSO)
' 参照設定:Microsoft Scripting Runtime
Sub READ_TextFile3()
' 読み込むファイル名(固定)
Const cnsFILENAME = "C:\TEMP\HOGE.txt"
Dim FSO As New FileSystemObject' FileSystemObject
Dim TS As TextStream ' TextStream
Dim strREC As String ' 読み込んだレコード内容
Dim GYO As Long ' 収容するセルの行
' 指定ファイルをOPEN(入力モード)
Set TS = FSO.OpenTextFile(cnsFILENAME, ForReading)
GYO = 1
' ファイルのEOF(End of File)まで繰り返す
Do Until TS.AtEndOfStream
' 改行までをレコードとして読み込む
strREC = TS.ReadLine
' 行を加算しA列にレコード内容を表示(先頭は2行目)
GYO = GYO + 1
Cells(GYO, 1).Value = strREC
Loop
' 指定ファイルをCLOSE
TS.Close
Set TS = Nothing
Set FSO = Nothing
End Sub
' ファイルのEOF(End of File)まで繰り返す
の所に特定の文字列を検索し、抽出、別シートにコピーするようなコードを入れることが出来れば動くのではないかなーと色々試してみたのですが、上手くいきません。
<考えた例2>
Sub Sample()
Dim Cn As Object
Dim Rs As Object
Dim c As Object
Dim SQL As String
Dim Path As String
Dim key As String
With Application.FileDialog(msoFileDialogFilePicker)
.Filters.Clear
.Filters.Add "CSVファイル", "*.csv", 1
.Filters.Add "全ファイル", "*.*", 2
.FilterIndex = 1
.Title = "ファイル選択"
.AllowMultiSelect = False
If .Show Then
Path = .SelectedItems(1)
Else
MsgBox "処理を中止します", 48
Exit Sub
End If
End With
Application.ScreenUpdating = False
On Error Resume Next
On Error GoTo 0
key = Inputbox("日付を入力してください")
Sheets.Add , Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = Choose(1, key)
Set Cn = CreateObject("ADODB.Connection")
Set Rs = CreateObject("ADODB.Recordset")
With CreateObject("Scripting.FileSystemObject")
SQL = "Select * From " & .GetBaseName(Path) & "." & .GetExtensionName(Path) & _
" Where A1 Like '%" & Choose(1, Key) & "%' "
If Val(Application.Version) >= 12 Then
Cn.Provider = "Microsoft.Ace.OLEDB.12.0"
Else
Cn.Provider = "Microsoft.Jet.OLEDB.4.0"
End If
Cn.Properties("Extended Properties") = "Text;Hdr=No"
Cn.Open .GetParentFolderName(Path)
End With
Set Rs = Cn.Execute(SQL)
Range("空白列の一行目から").CopyFromRecordset Rs
Cn.Close
Set Cn = Nothing
Set Rs = Nothing
MsgBox "Finish", 64
End Sub
元のCSVファイルも、まとめる予定の別シートにも項目がないので
SQLのwhereの所に何を指定すればいいのか、A列でも可能なのか調べても
出てこなくて困っています。
インターネットで類似ソースを見つけ、改造するという手法で今まで簡単なツールは作成してきたので、知識不足だとは思いますが
助言を頂けたら助かります。
宜しくお願いします。
|
|