dポイントプレゼントキャンペーン実施中!

いつもお世話になっています。
今エクセルVBAで指定したフォルダ内のファイル情報を取得し、sheet2に貼り付けるものを作っています。
指定したフォルダ内のファイル情報を取得するまでは分かったのですが、作ったVBAを実行するとsheet1のA2セルから自動的に貼り付けられてしまいます。
sheet2のA1セルから貼り付けるにはどうすれば良いのでしょうか??

作ったVBAはこんな感じです。

まず、フォルダのパスを取得しA2セルへ表示します。
Sub test2() 
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = 0 Then Exit Sub
Range("A2").Value = .SelectedItems(1)
End With
End Sub

次に、A2セルの値を使ってファイル名を取得しました。
Sub Test()
Dim i As Long
Dim pass As String

pass = Range("A2").Value

With Application.FileSearch
.NewSearch
.LookIn = pass
.FileType = msoFileTypeAllFiles
.SearchSubFolders = True

If .Execute() > 0 Then
For i = 1 To .FoundFiles.Count
Cells(i + 1, 1) = .FoundFiles(i)
Cells(i + 1, 3) = FileDateTime(.FoundFiles(i))
Next i
End If
End With
End Sub

です。

長くて申し訳ありません。よろしくお願いします。

A 回答 (3件)

sheet1から起動(おそらく)して、別のシートを指定してあげないと、アクティブなシートを使って作業を行う事になります。



sheet("sheet2").select

のように、記入したい(アクティブなシートを移動する)などしてください。

また、sheet("sheet2").Range("A2") = 値 のようにすることも可能です。
実行時には、シート名を指定するようにしてください。
実験が終わったら、確実に動作させるために、Sub test2()でも、シート名を指定しましょう。

Sub Test()
sheet("sheet1").select
pass = Range("A2").Value

sheet("sheet2").select
For i = 1 To .FoundFiles.Count
Cells(i , 1) = .FoundFiles(i)

のように、実行範囲が明確になるように心がけてください。

>実行するとsheet1のA2セルから

Cells(i + 1, 1)
iは1から始まって、そこに1を加算しているので、A2から記入されます。
Cells(i , 1) でよいでしょう。
    • good
    • 0
この回答へのお礼

どうもありがとうございます。
基本的な構成も良く分からず、試行錯誤してました。
実行範囲が明確になるように、セルやシートの指定をするようにすればよかったんですね。
早速、自分で作ったVBを修正してみたら、うまくできました。
本当にありがとうございました。

お礼日時:2004/12/05 20:04

>別シートに貼るには


「別シート」の「別」という考えかた、表現・書き方がおかしいのです。ただ質問者が「シート名を指定して、そのシートに書きこむVBAのやり方を知らない・経験してない」だけです。「何と何が別なの」と聞かれても、何もないでしょう。Sheet2をアクチブにして実行すればSheet2に書き出しされるでしょう。Sheet1を普通は、アクチブにして実行するからSheet1に書かれるのでしょう。
ですからご丁寧なコード例などは本件では関係ないのです。
また「貼りつける」と言う言葉が出てきますが、CopyPasteを連想しますが、それではなくて、値代入(=)で良いのですから、表現が適当でない。
またどこかの本に載っていた例なのでしょうが(コードの中身は最新式(FileSearchほか)ですが)簡単にDir関数でも出来るのではと思いました。
本題のシートを指定してセルを表現するのは
(A)Worksheets(”Sheet2”).Cells( )
(B)Set Sh2=Worksheets(”Sheet2”)
Sh2.cells( )
などがありますので、エクセルVBA解説書(中級以上)を見てください。 
    • good
    • 0
この回答へのお礼

エクセルVBA、何も分かっていない状態で質問をして申し訳ありません。
解説書を買って勉強をしてはいますが、まだまださっぱりわからず・・・。とりあえず、上司に言われたことをこなすために似たようなプログラムを探して私用しているような状態です。
失礼しました。

お礼日時:2004/12/05 19:51

私も同じような経験がありますが、



Cell()はSheetを指定すれば大丈夫でしょう。

Sheets("Sheet2").Cells(i+1,1)とか
    • good
    • 0
この回答へのお礼

どうもありがとうございます。
セルとシートを指定するという初歩的なことも分からず・・・申し訳ありません。
教えていただいたように、作業範囲を明確に指定したらうまくいきました。
ありがとうございました。

お礼日時:2004/12/05 20:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!