• ベストアンサー

エクセルVBA:取得したファイル情報を別シートに貼るには・・・

いつもお世話になっています。 今エクセル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 です。 長くて申し訳ありません。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

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) でよいでしょう。

yukikocchi
質問者

お礼

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

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

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

yukikocchi
質問者

お礼

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

  • jindon
  • ベストアンサー率43% (50/116)
回答No.1

私も同じような経験がありますが、 Cell()はSheetを指定すれば大丈夫でしょう。 Sheets("Sheet2").Cells(i+1,1)とか

yukikocchi
質問者

お礼

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

関連するQ&A

  • エクセルVBAでセル選択するコードが変

    エクセルのワークシートでVBAでセル選択するコードで理解に苦しむことがあります。 通常、Cells(2, 1)はセル番地で言えばA2セル Cells(4, 1)はセル番地で言えばA4セルです。 しかし、 With .Range("B5:B15")でくくれば  .Cells(2, 1)はセル番地で言えばB6セルだと思います。 .Cells(4, 1) はセル番地で言えばB8セルだと思います。 ところが下記のコードを動かすと、なぜかC10:C12が選択されてしまいます。 この理屈がわかりません。 Sub test02()   With Sheets("Sheet1")     With .Range("B5:B15")       .Range(.Cells(2, 1), .Cells(4, 1)).Select     End With   End With End Sub なお、 .Range(.Cells(2, 1), .Cells(4, 1)).Selectを .Range(“A2:A4”).Selectに書きかえると、希望のB6:B8が選択されます。

  • excel vbaについてです

    VBA初心者で、暇な時にいろいろためしています。 以下のマクロを組んだのですが、エラーがでてうまくいきません。 どこがいけないのかご指摘願います。 Sub ather() Dim A As Range Dim B As Range Dim i As Integer With ThisWorkbook.Worksheets("Sheet1") For i = 1 To 30 Set A = Cells(i, 1) Set B = Cells(1, i) If Not .Range(A).Interior.ColorIndex = vbYellow Then GoTo port10 If Not .Range(B).Interior.ColorIndex = vbRed Then GoTo port10 .Range(B).Offset(, 1).Value = "○" port10: Next i End With End Sub イメージとしてはセルの塗りつぶしが黄色で、かつ右隣のセルの塗りつぶしが赤の時に、 赤色セルの右隣のセルに○を表示させようとしているのですが。。。 こうしたらいいんじゃない?といったアドバイスもお願いします(-人-)

  • シートのイベント VBA

    シートをクリックしたらシートをクリアしたいのですが クリックするセルがA1の場合は、マクロを実行させたくないのですが 下記のコードだとエラーになってしまいます。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Not Target.Range = Range("a1") Then Cells.Clear End If End Sub ”Range("a1")でなければ、Cells.Clearする” にはどうすればいいですか?

  • EXCEL-VBAで、別ファイルのシートをコピーしてくることはできますか

    先日TTACさんに組んでいただいたプログラムに、追加したい項目があります。 追記していただきたいのは、同じディレクトリ内に入っている「A」というファイル内の「BL」「M2」「まとめ」という3つのシートを、現在のファイルにコピーするという命令です。ファイル「A」はこの3シートで構成されています。 前回は、ファイル内にこの「BL」というシートが存在するという前提で組んでいただきましたが、今回は、別ファイルからこの3つのシートをコピーしてきた後、処理をするという形にしたいのですが、できますでしょうか? 前回作って頂いたプログラムは下記通りです。 Sub Macro1() Dim datCol As Integer Dim i As Integer Set sheetBL = ThisWorkbook.Sheets("BL") With sheetBL datCol = .Range(.Cells(14, .Columns.Count). _ End(xlToLeft).Address).Column If datCol > 248 Then MsgBox "これ以上データ追加できません。" Exit Sub End If For i = 4 To 248 Step 4 If .Cells(14, i).Value = "" Then .Range(.Cells(14, i), .Cells(22, i + 2)).Value _ = Sheets("測定結果").Range("G14:I22").Value Exit For End If Next i End With Set sheetBL = Nothing End Sub また、このプログラムを元にして、今度はG14:I14に入った値を、シート「まとめ」のC6を開始位置とし、C7、C8と今度は行ごとに値のみコピーをするプログラムに変更は可能でしょうか? よろしくお願いします。

  • セルが何行なのかをVBAで取得したい

    セルが何行なのかをVBAで取得したいのですが どういうコードにすればいいですか? 例えば、A1セルに a b c と入ってる場合、3行ですが それをVBAで取得するにはどうすればいいですか? Sub test() Dim r As Range Set r = Cells(1, 1) If r.Value Like "*" & Chr(10) & "*" Then MsgBox "改行があります" End If End Sub というコードで改行が有ることは取得できたのですが 何行かまでは取得する方法がわかりません。

  • Excel VBAのFileSearch機能

    初めて投稿します。助けてください。 以下のVBAを使用して業務を行っているのですが このマクロが動かなくなってしまいました。 ネット等で調べてわかったのですが XP問題で社内PCがすべて変わりExcelも2013になってしまい 2013では、下記に記載されているFileSearch機能が使用できないようです。 出来れば下記の分をExcel2013でも 動くようにどの部分を変更すればいいいか教えていただけないでしょうか? ---------------------<VBA文>------------------------- Sub 作成() Dim i, j, no As Integer Dim Mpath, Mname, Mfull As String Mpath = ActiveWorkbook.Path Mname = ActiveWorkbook.Name Mfull = Mpath & "\" & Mname Worksheets("一覧").Select Range("A2:A200").Clear With Application.FileSearch .NewSearch .LookIn = Mpath .Filename = "*.xls" .FileType = msoFileTypeExcelWorkbooks If .Execute > 0 Then For i = 1 To .Execute If .FoundFiles(i) <> Mfull Then Cells(i + 1, 1).Value = .FoundFiles(i) j = Len(Cells(i + 1, 1)) If j > 218 Then MsgBox ("218文字を超えてます。") Exit Sub End If End If Next i Else MsgBox ("見つかりませんでした。") End If End With   Range("A2").Select Range("A2:A1000").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal End Sub

  • エクセル VBA 特定文字がある行を別シートに移動

    ソフト excel2003 o列に文字列が入力された表があります。 マクロ実行時下記のようにするには、VBAのコードをどのように記入すればよろしいでしょうか? 赤枠で囲んだボタンをクリックすると シート1のO列に 中 が入力されている行を切り取りし中シートに貼り付け (下の行は上方向にシフト) ※ シート1の内容は日毎に更新されますので、更新後、赤枠で囲んだボタンをクリックするとその時点で 中 が入力されているものは中シートのリストへ追加されるようにしたいのです。 以前ここで教えていただいたものを参考に作成してみたの(以下に記載)ですがうまくいきません。 お助けいただけないでしょうか。 宜しくお願い致します。 Sub ボタン中シート_Click() 'Sheet2の挿入位置(C列は結合セルではなく、必ず何か入っている事) nMax2 = Sheets("中シート").Cells(Rows.Count, 3).End(xlUp).Row + 1 With Sheets("sheet1") nMax1 = .Cells(Rows.Count, 9).End(xlUp).Row For i = nMax1 To 2 Step -2 If .Cells(o, 15) = "中" Then .Range(.Cells(o, 1), .Cells(o + 1, 10)).Copy Sheets("中シート").Cells(nMax2, 1).Insert Shift:=xlDown .Range(.Cells(o, 1), .Cells(o + 1, 10)).Delete Shift:=xlUp End If Next i End With End Sub

  • エクセルVBA  どうしても動きません。

    お世話になります。 なかなか上達しない超初心者です。 ↓↓ですが、Activesheetにすると動くのに、シート名を元々存在するシート”実験"に指定すると動きません(データ内容はまったく同じで、A列に色んな名前が入っていて、重複しているとC列に重複と入力します)。 2日間試行錯誤したのですが、やっぱり動かず・・・ ちなみに、Activateにするとアクティブになるし、CurrentRegionも選択できるのに なんでうごかないんでしょうか・・・ 何卒ご指導くださいませ。よろしくお願いいたします!!!!!! Sub Test2() With Sheets("実験").Range("A1").CurrentRegion Dim i As Long Dim LastRow As Long LastRow = Range("A" & Rows.Count).End(xlUp).Row For i = 1 To LastRow If WorksheetFunction.CountIf(Range("A:A"), Cells(i, 1)) > 1 Then Cells(i, 3) = "重複" End If Next i End With End Sub Sheets("実験")をActivesheetに変えると別のシートがしっかり動いてくれます・・・が、なんとしてでも”実験”シートに動いていただきたいです・・・。

  • VBAの記述で、あるシートを別ファイルにした場合

    エクセル2002で、商品を管理しています。 1列目に品番をいれると、2列目に品名が表示するようにし、 新規の品番は品名を入れると、追加登録されるようにVBAを組みました。 今度、このシート"商品"を別ファイル(商品.xls)にしたいと思うのですが、 どうしても、やり方が分かりません。 よろしくお願いします。 Public Sub Worksheet_Change(ByVal Target As Excel.Range) Dim 品番 As String Dim 品名 As String Dim i As Long With Target If .Column = 1 Then 品番 = .Text For i = 1 To 65536 If Sheets("商品").Cells(i, 1) = "" Then ActiveSheet.Cells(.Row, 2) = "" Exit For ElseIf 品番 = Sheets("商品").Cells(i, 1) Then ActiveSheet.Cells(.Row, 2) = Sheets("商品").Cells(i, 2) Exit For End If Next i End If If .Column = 2 Then 品名 = .Text 品番 = ActiveSheet.Cells(.Row, 1) If 品名 = "" Or 品番 = "" Then Else For i = 1 To 65536 If Sheets("商品").Cells(i, 1) = "" Then Sheets("商品").Cells(i, 1) = 品番 Sheets("商品").Cells(i, 2) = 品名 Exit For ElseIf 品番 = Sheets("商品").Cells(i, 1) Then Exit For End If Next i End If End If End With End Sub

  • エクセル(VBA)でファイル名(サブフォルダ含む)、更新日時を表示させたい

    エクセルのVBAであるフォルダ以下の全てのファイル名と更新時間をエクセルシート上に表示させたく、以下のプログラムを作成したのですが 、サブフォルダ内のファイルを表示させることができません。何か良い方法がありましたら教えていただけないでしょうか?宜しくお願いいたします。 Sub SAMPLE() Dim serchPass As String j = 1 Mypath = "C:\My Documents\" MyName = Dir(Mypath, vbDirectory) Do While MyName <> "" ' ループを開始します。 ' 現在のフォルダと親フォルダは無視します。 If MyName <> "." And MyName <> ".." Then ' ビット単位の比較を行い、MyName がフォルダかどうかを調べます。 If (GetAttr(Mypath & MyName) And vbDirectory) = vbDirectory Then Debug.Print MyName ' フォルダであれば、それを表示します。 Else: GoTo 10 End If serchPass = Mypath & MyName With Application.FileSearch .NewSearch .LookIn = serchPass If .Execute() > 0 Then For i = 1 To .FoundFiles.Count Cells(i + j, 1).Value = .FoundFiles(i) Cells(i + j, 3) = FileDateTime(.FoundFiles(i)) Next i j = i + j End If End With 10 End If    MyName = Dir ' 次のフォルダ名を返します。 Loop End Sub

専門家に質問してみよう