• 締切済み

とあるシートの複数のセルの範囲の値と、とあるフォル

とあるシートの複数のセルの範囲の値と、とあるフォルダにあるファイル名が部分一致していたら、そのファイルを別の指定のフォルダに入れるVBAを大まかでいいので教えてください。 (1)アクティブになっているブック内にあるシートのとあるセル範囲のそれぞれの値(例:1111、2222、3333...) (2)開いていないフォルダ内にあるファイル名(例:1111-H8-32.xlsなど) が部分一致したとき、そのファイルを別のフォルダ内に移動させたいのですが、いまいちわかりません、教えていただけないでしょうか?

みんなの回答

  • masnoske
  • ベストアンサー率35% (67/190)
回答No.2

(1.1)アクティブになっているブック  ActiveWorkbook で捕まえる. (1.2)ブック内にあるシートのとあるセル範囲のそれぞれの値  For Each Next ループでセルの値を取得する.  以下の処理は全てこのループの中で処理する. (2.1)開いていないフォルダ内にあるファイル名  Dir関数でフォルダ内のファイル名を順次取得して部分一致判定する. (2.2)部分一致判定  Instr関数で 1以上なら部分一致.  比較するファイル名と比較する値は LCase関数か UCase関数で小文字か大文字に変換してから比較すること. (2.2)ファイルを別フォルダ内に移動  FileCopyでコピーしてからコピー元を Killで削除する.

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

(1)使っていないシートのA列のセルに、その「開いていないフォルダ内」のファイル名を、すべて、書き出す。 またエクセルファイル以外は除くなど、「拡張子指定で除外が可能なら」、それもたやすい。 (2)そして「アクティブになっているブック内にあるシートのとあるセル範囲」の各セルをFor Each Nextで捉え、その文字列が、上述したファイル名の中に見つかるかどうか、ワイルドカード機能で、チェックする。 (3)該当なら、きまった別ホルダに移動する。 === ・Sheet2に書き出し例。 ・"C:\Users\xx\Documents\  は指定ホルダに変えること。 http://officetanaka.net/excel/vba/filesystemobject/sample07.htm より借用。 指定ホルダのファイル名をシートに書き出し例。 Sub test01() Dim FSO As Object, f As Variant, BaseNames() As String, cnt As Long, i As Long Set FSO = CreateObject("Scripting.FileSystemObject") ReDim BaseNames(FSO.GetFolder("C:\Users\xx\Documents\").Files.Count) For Each f In FSO.GetFolder("C:\Users\xx\Documents\").Files If LCase(FSO.GetExtensionName(f.Name)) = "xlsx" Then cnt = cnt + 1 BaseNames(cnt) = FSO.GetBaseName(f.Name) End If Next f If cnt = 0 Then MsgBox "xlsxファイルはありません", vbExclamation Else For i = 1 To cnt Worksheets("Sheet2").Cells(i, 1) = BaseNames(i) Next i End If Set FSO = Nothing End Sub ーーー 参考 https://excelwork.info/excel/findwildcard/ Sheet1のrange("b2:D3")(勝手例)にある文字列がSheet2のA列に見つかるか? Sub test02() k = 1 For Each cl In Worksheets("Sheet1").Range("b2:D3") If cl <> "" Then MsgBox cl Set myrng = Worksheets("Sheet2").Range("A2:A500").Find(what:=cl & "*", LookAt:=xlWhole) '--- If myrng Is Nothing Then MsgBox "見つからず" GoTo p1 Else Worksheets("Sheet3").Cells(k, "A") = cl Worksheets("Sheet3").Cells(k, "B") = myrng.Row k = k + 1 End If End If p1: Next End Sub (3)は略。WEB照会したら記事VBAコードが見つかります。 http://officetanaka.net/excel/vba/filesystemobject/filesystemobject23.htm など。 == 質問者は、総体に、WEB照会をして、生かしきれてないようだ。 検索語さえ決められれば、普通の課題のコードなど、重要部分は、必ず見つかる。

関連するQ&A

  • 複数のエクセルブックから特定シートの特定セル抽出

    同一フォルダ内にある複数のExcelブックから特定シートの特定セル値を抽出して一覧表にまとめるExcel マクロ(VBA)を教えてください。 よく似ている質問、回答を読んだのですが、私のレベルではとても応用できず質問させていただきます。 【前提】 ・実行する端末のOSはWindows XP(SP3)、Excelは2003 ・対象フォルダはネットワーク接続フォルダ「\データ解析\データ」  この中に、複数のExcelブックがあります。 ・抽出したい対象は、各ブック内のシート(シート名はファイル名と同じ)の「BO6からBW16までの□の範囲」で統一されています。 【抽出一覧作成イメージ】 ・「集計.xls」ブックの「Sheet1」の2行目から抽出した結果を一覧表示する。 ・表示はA列に抽出元ブック名(=ファイル名)、B列に抽出元BO6セルの値。以降,C列・D列と 順に値を入れていきたい。 ・BO6~BW16までのセル値を「集計.xls」ブックの「Sheet1」に貼り付ける際には「値で貼り付ける」が望ましい。 というようなイメージです。 とても勝手なお願いではありますが、宜しくお願いいたします。

  • 複数あるブックの特定シートの特定範囲を1つにしたい

    EXCEL2010を使用しています。 あるフォルダに格納されている複数のブックの、特定シートを、1つのシートにまとめたいです。 複数のブックの作りは同じです。 1つのブックに、複数シートがあり、"(配置)"というシートだけを、新規のシートにまとめたいです。 <今ある各ブック> ファイル名は、2014年度特定措置_●●.xlsで、●●だけ、ブック名が違います。 シート名が"(配置)"です。 c3セルに部署名が入っています。 b4セルからe10セルまで数式が入っています。 <行いたいこと> 新規のシートのa列に、各ブックにあるc3セルの部署名を持ってきたい。 b列からe列に、各ブックにあるb4セルからe10セルまでの数式を値張りし、取り込みたい。 以上です。 つたない説明で恐縮ですが、大変困っております。 どうか、ご回答の程、どうぞよろしくお願いいたします。

  • ブックを開かずに、フォルダ内にある複数ブックの、特定セルの値を抽出した

    ブックを開かずに、フォルダ内にある複数ブックの、特定セルの値を抽出したいのですが、やり方をご存じの方がいらっしゃったら教えてください。 フォルダ内には150個ほどエクセルファイルがあり、中身のシート名・フォーマットは同じなのですが、すべてファイル名が違います。 ファイルを開くことなく、これらのファイルの特定のシートの特定のセルにある値を、全て1枚の表にまとめることは可能でしょうか? フォルダ名 →"AGENDA_RIREKI" 参照したいファイル名 →ファイルによって異なる "#1111 AAA.xls"など 参照したいシート名→ "AGENDA" 参照したいセル→ "A7" と "E20~E70(E列のみ) データをまとめたいファイル名→ "AGENDA_matome.xls" データをまとめる時の形↓ (A列)          (B列)            (C列)        (D列) ファイル1のA7の値 ファイル1のE20の値  ファイル2のA7の値  ファイル2のE20の値                     E21の値                    E21の値                     ・                     ・                     ・     VBAは初心者です。。できればコードをそのまま拝借したいです。 お知恵を貸してください。よろしくお願いします。

  • 複数のExcelブックから特定シートのセル範囲抽出

    同一フォルダ内にある複数のExcelブックから特定シートの特定セル範囲を抽出して一覧表にまとめるExcel マクロ(VBA)を教えてください。 このサイトで殆どよく似た回答を読んだのですがうまくいきません。VBA初心者です。 よろしくお願いします。 【前提】 ・実行する端末のOSはWindows 10 ExcelはOffice365 ProPlus ・対象フォルダはネットワーク接続フォルダ  この中に、複数のExcelブック(xlsx、xlsm)があります。 ・抽出したい対象は、各ブック内の「台帳」シートの「A3:Cの最終行」で  複数のブックの中には「台帳」シートが含まれていないブックも混在しています。 【抽出一覧作成イメージ】 ・「集約.xlsm」ブックの「集計」シートの2行目から抽出した結果を一覧表示する。 ・「集約.xlsm」ブックにマクロは登録する ・表示はA列に抽出元ブック名(=ファイル名)、B列からD列に抽出元「A3:Cの最終行」セルの値。 ・「A3:Cの最終行」セルの値を「集約.xlsm」ブックの「集計」に貼り付ける際には「値で貼り付ける」が望ましい。

  • 複数のシートの同じセル範囲を一つのシートにまとめたいです。

    Excelで複数シート上の同じセルにある表を一つにまとめたいです。 表はBQ6:CS6で、A:BPにある表の集計が入ってます。 多数のシート上のBQ6:SC6の表を一つのシートに値で貼り付けていきたいのですが、 シート名が固定でないこと、シート数が20~30と複数あり、数も決まってないこと、 そんなブックがいくつもあり非常に困っております。 VBAの貼り付け、マクロの自動登録くらいのスキルしかありません。 どなたかお知恵を貸して下さい。お願い致します。

  • 複数のExcelブックから特定シートの特定セル抽出

    同一フォルダ内にある複数のExcelブックから特定シートの特定セル値を抽出して一覧表にまとめるExcel マクロ(VBA)を教えてください。 よく似ている質問、回答を読んだのですが、私のレベルではとても応用できず質問させていただきます。 全く同じものがあれば、そのアドレスを回答いただくだけでも助かります。 【前提】 ・実行する端末のOSはWindows XP(SP3)、Excelは2003 ・対象フォルダはネットワーク接続フォルダ「\\share\target」  この中に、複数のExcelブックがあります。 ・抽出したい対象は、各ブック内の「概要」シートの「C3」セルで統一されています。 【抽出一覧作成イメージ】 ・「集約.xls」ブックの「Sheet1」の2行目から抽出した結果を一覧表示する。 ・表示はA列に抽出元ブック名(=ファイル名)、B列に抽出元C3セルの値。 ・C3セル値を「集約.xls」ブックの「Sheet1」に貼り付ける際には「値で貼り付ける」が望ましい。 というようなイメージです。 とても勝手なお願いではありますが、宜しくお願いいたします。

  • エクセル関数VLOOKUPの範囲の一部をセルで指定

    ファイル名2103.XLSあるとして、その2103.XLSファイルとは別のファイル名集計.XLSに、その2103.XLSファイルから関数VLOOKUPでデータの値を返したい場合、式の範囲には普通は [2103.xls]Sheet1!$A$1:$B$10 と入力されますが、この範囲の一部分をセルで指定できないでしょうか。例えば、ファイル名集計.XLSのA1セルに文字列で"2103"と入力されているとしまして、式の範囲 [2103.xls]Sheet1!$A$1:$B$10 の2103部分を[A1.xls]Sheet1!$A$1:$B$10のような式は出来ないでしょうか。

  • シート1のセルの値がシート2の範囲にあったら

    度々お世話になっております。 またVBAについてご教授願いたく思い、質問させて頂きます。 ざっと状況を説明しますと、 シート「メニュー」には保存先のフルパスを入力する「保存先」というセルと、 コードを入力する「検索コード」というセルがあります。 シート「リスト」には今まで「検索コード」セルに入力されたものが転記されていきます。 今回教えていただきたいVBA(マクロ)は、 シート「メニュー」のセル名「検索コード」にコードを入力してエンターを押すと実行します。 (1)その時、シート「メニュー」のセル「検索コード」のコードが、 シート「リスト」の(A2:A65536)範囲名「リスト」にあった場合は、 シート「メニュー」のセル「保存先」のフルパス&セル「検索コード」&".xls"でファイルを開く。 以上の処理を、以下のVBAの☆の部分に入れたいのです。 Sub Test1() Dim pt Dim Fn If Range("検索コード") = "" Then Exit Sub End If   If ☆(Then)   Eles Worksheets("メニュー").Range("検索コード").Copy Worksheets("リスト").Range("A60000").End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False With Sheets("メニュー") pt = Range("保存先").Value Fn = Range("検索コード").Value End With Sheets(Array("フォーマット")).Copy ActiveWorkbook.SaveAs Filename:=pt & Fn & ".xls" End If End Sub 当方で試行錯誤してみましたものの、シートを超えてのRangeや範囲からの検索、セル参照からのファイルを開くなど、上手くいきませんでした。 また、上記以外の方法として『「保存先」パスに「検索コード」のxlsファイルがあったら開く』という条件文でも構いません。 こちらもやってみたのですが、上手くいきませんでした。 不明瞭なところがあれば補足致します。 初心者故知識が少ないのですが、ご教授宜しくお願い致します。

  • 参照先をセルに入力して、他のブックのセルを参照する方法

    Excelで、他のブックのセルを参照したいです。 たとえば、あるExcel(test.xls)上から、別のフォルダにある複数のブック C:\AAA.xls D:\BBB.xls の値を参照する場合ですが(AAA.xlsとBBB.xlsは、値の内容は違うが、同じシート名の同じセルに値が入っている)、 test.xlsのSheet1のA1に「C:\」、A2に「AAA.xls」を入力すると、test.xlsのSheet2にはAAA.xlsの値を表示し、 test.xlsのSheet1のA1に「D:\」、A2に「BBB.xls」を入力すると、test.xlsのSheet2にはBBB.xlsの値を表示するような方法です。 参照先が固定であれば、='C:\[AAA.xls]Sheet名'!D5・・・のような指定ができるのですが、参照するファイル名とパス名が都度変わるので、入力したセルの値で参照先を変えたいのです。 ちなみに、INDIRECTを使うやり方も考えましたが、参照先のブックを開いていないと値が表示されないようなので、却下されました。 (参照先のブックは開かなくても値を参照させたいです) どなたかご存知の方がいらっしゃったら、教えてください。 よろしくお願いします。

  • エクセルVBAをつかってフォルダ内のファイルの特定シートのデータを1つのシートにまとめる

    はじめまして。 過去ログ検索しましたが、載っていないようなので投稿させていただきます。 ブックAがあるフォルダ内にある「○年*.xls」のさらに「○月(○月以外のシートもあり)」のシート内の特定のセル(範囲は固定されてます)の文字列を、全てブックAの1つのシートにまとめたいのですが、VBAにてこれは可能ですか? フォルダ内のファイルが複数だったり、またそのファイル内の該当シートが1つだったり複数だったりで、かなり行き詰ってます。 どなたかご存知の方いらっしゃいましたらご教授願います。 エクセル2000を使用しております。

専門家に質問してみよう