|
まいさん、ちくたくさん、こんにちわ。
ちくたくさんではありませんが、レスついてないようですので
Sub フォルダをひらいて()
Dim myFo As String
Dim fileStr As String
Dim myWb As Workbook, newWb As Workbook
Dim myData As Variant
Dim i As Integer, j As Integer, k As Integer
'ここから追加
Dim wData(1 To 23) As Variant
Dim l As Long
'ここまで追加
myFo = "C:\Test" 'フォルダのパス
fileStr = Dir(myFo & "\", vbNormal)
Set newWb = Workbooks.Add
k = 1
Do While fileStr <> ""
Set myWb = Workbooks.Open(myFo & "\" & fileStr)
myData = _
Range("A1:W" & myWb.ActiveSheet.Range("A65536").End(xlUp).Row)
For i = 1 To UBound(myData, 1)
For j = 1 To 23
If myData(i, j) = "検索文字列" Then '検索文字列を入力
'ここから追加
For l = 1 To 23
wData(l) = myData(i, l)
Next
'ここまで追加
'ここは変更
newWb.ActiveSheet.Range("A" & k & ":W" & k).Value = wData
'newWb.ActiveSheet.Rows(k) = myData
k = k + 1
End If
Next j
Next i
myWb.Close
fileStr = Dir
Loop
End Sub
で、どうでしょうか?
>> myData = Range("A1:W" & myWb.ActiveSheet.Range("A65536").End(xlUp).Row)
>この命令はA1の行にある1行を取得ということでしょうか?
>A65536はA列〜どこまでの列を指定するかによって変わるのでしょうか?
myWb.ActiveSheet.Range("A65536").End(xlUp).Row
これは、キー操作で言うと
A65536のセルを選択しCtrl+カーソルキーの上を押す操作と同じです。
A列の最後の行を取得します。
仮にA50まで入力があったとした場合、A1:W50の範囲をmyDataにセットしています。
>
>> For i = 1 To UBound(myData, 1)
>> For j = 1 To 23
>> If myData(i, j) = "検索文字列" Then '検索文字列を入力
>> newWb.ActiveSheet.Rows(k) = myData
>> k = k + 1
>> End If
>> Next j
>> Next i
>上記は検索文字列を引っ張るということですよね?
こちらは、その意図で組まれているようですが、
ちくたくさん余程急いでいたようですね。
このコードはA列からW列まで総当りで検索されていますので、
仮に"あ"と言う値を検索しようとした場合で、B15とD30に
"あ"という値が入力されていた場合は、両方とも抽出されます。
|
|