• 締切済み

この動作のコードを教えてください。ExcelVBA

以下の動作をするためのコードを教えてください。 ExcelVBAでお願いします。 フォルダ1、2に入っているファイルが以下のようになっていた場合 フォルダ1 A.xlsx,B.xlsx,C.xlsx フォルダ2 A.xlsx,C.xlsx,E.xlsx B.xlsxはフォルダ2に存在しない E.xlsxはフォルダ1に存在しない とmsgboxを出したい。 ヒント:フォルダ1を指定したときにフォルダ内にあるExcelのファイル名を配列にいれる処理が必要

みんなの回答

  • SI299792
  • ベストアンサー率48% (719/1487)
回答No.2

すみません。前プログラムはバクあり、差し替えです。 Option Explicit ' Sub Macro1()   Dim RInp As Long   Dim ROut As Long   Dim FileName As String   Dim OutData As String   Dim Delemeter As String '   Range("C2:D" & Rows.Count).ClearContents   Application.ScreenUpdating = False '   For RInp = 1 To 2     FileName = Cells(RInp, "B")     FileName = Dir(FileName & "\*.*") '     While FileName > ""       ROut = Cells(Rows.Count, "C").End(xlUp).Row + 1       On Error Resume Next       ROut = [C:C].Find(FileName, LookAt:=xlWhole).Row       On Error GoTo 0       Cells(ROut, "C") = FileName       Cells(ROut, "D") = Cells(ROut, "D") + RInp       FileName = Dir     Wend   Next RInp '   For RInp = 1 To 2 '     For ROut = 2 To Cells(Rows.Count, "C").End(xlUp).Row '       If Cells(ROut, "D") = RInp Then         OutData = OutData & Delemeter & Cells(ROut, "C")         Delemeter = ","       End If     Next ROut     OutData = OutData & "は" & Cells(3 - RInp, "A") & "に存在しない"     Delemeter = vbCrLf   Next RInp   MsgBox OutData End Sub

全文を見る
すると、全ての回答が全文表示されます。
  • SI299792
  • ベストアンサー率48% (719/1487)
回答No.1

画像の様に、 B1にフォルダ1を B2にフォルダ2をフルパスで入力して下さい。 Option Explicit ' Sub Macro1()   Dim RInp As Long   Dim ROut As Long   Dim FileName As String   Dim OutData As String   Dim Delemeter As String '   Range("C2:D" & Rows.Count).ClearContents '   For RInp = 1 To 2     FileName = Cells(RInp, "B")     FileName = Dir(FileName & "\*.*") '     While FileName > ""       ROut = Cells(Rows.Count, "C").End(xlUp).Row + 1       On Error Resume Next       ROut = [C:C].Find(FileName, LookAt:=xlWhole).Row       On Error GoTo 0       Cells(ROut, "C") = FileName       Cells(ROut, "D") = Cells(ROut, "D") + RInp       FileName = Dir     Wend   Next RInp '   For RInp = 2 To 1 Step -1 '     For ROut = 2 To Cells(Rows.Count, "C").End(xlUp).Row '       If Cells(ROut, "D") = RInp Then         OutData = OutData & Delemeter & Cells(ROut, "C")         Delemeter = ","       End If     Next ROut     OutData = OutData & "は" & Cells(RInp, "A") & "に存在しない"     Delemeter = vbCrLf   Next RInp   MsgBox OutData End Sub

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ExcelVBAマクロでファイル検索してコピー方

    ExcelVBAマクロについて確認させてください。 C:\test\フォルダ内で指定のファイル名(例えばAAA.xlsx)を検索して それをC:\test2\フォルダ下にコピーする方法をご教授くださいm(_ _)m

  • EXCEL VBA 複数ファイルの値を1つのファイ

    おせわになります。yakkunnと申します。 当方EXCEL VBAは素人なのですが、下記の処理を実現したく、恐れ入りますが、どなたかVBAコードをご教授いただけないでしょうか? ■やりたいこと デスクトップに集計.xlsxというファイルを作り、このファイルに「集計」というボタンを作成します。H4セルに4月とか入力させて(出来ればプルダウンで選択)、「集計ボタン」をクリックしたら以下の集計処理が動くVBAコードをご教授いただきたく思います。 ■実現したい処理 Cドライブ配下に[実績]というフォルダがあります。このフォルダにはA.xlsx~Z.xlsxという複数のファイルが存在します。(フォーマットは全て同じ) このファイルを1つずつ開き、B4セルに記入されている「月」が集計.xlsxのH3セルで指定された「月」と同じであれば、B7列より「コード」を読み込んでそれに対応したE列の金額も読み込みます。このコードを集計.xlsxのH7セルに転記、金額をK7列に転記、これをA.xlsxのB列のコードが存在するまで読み込んで、集計.xlsxのHセル、K列にどんどん転機したいのです。 この処理を[実績]フォルダの中の全ファイルに対して実施したいです。 最後に集計.xlsxのK列の最後に金額合計が出ると最高です。 分かりづらい説明で申し訳ございませんが、何卒よろしくお願いいたします。 イメージ図を添付いたします。 明日には動かさないといけなくなり困っております。。何とぞよろしくお願いいたします。 環境 windows10 Excel2019

  • フォルダアクションが動作しません

    macminiserver:SnoLeopard(OS X 10.6)使用 Automatorにてフォルダアクションのワークフロー(下記)を 作成しました。 1)次の場所に追加された… :NAS上のフォルダA 2)指定されたFinder項目を取得:フォルダAに生成されるファイルB(csvファイル) 3)シェルスクリプトを実行   シェル:/bin/bash 入力の引き渡し方法:引数として   mv /Volumes/フォルダA/ファイルB.csv /Liblary/フォルダC(移行先) (実施したい内容) ファイルBがフォルダA上に作成されたらフォルダCに移動させる(上書き) なお、ファイルBは元々Windowsのソフトで作成されたcsvファイルを Macに対応できるようExcelVBAを使用して文字コードをUTF-8に変換したものです。 このフォルダアクションですが、Autometorの設定画面から実行すると 正常に動作するのですが、フォルダAにファイルBが作成されても フォルダアクションの動作をしてくれません。 NASのフォルダAはマウント済です。 フォルダAに対しての関連付けもしております。 他に設定などが必要なのでしょうか。 解決策を教えて頂けると嬉しいです。 よろしくお願い致します。 ※当方、Mac初心者で知識があまりありません… 噛み砕いた回答を頂けると助かります。

    • ベストアンサー
    • Mac
  • ExcelVBAマクロでの文字コード出力について確

    ExcelVBAマクロでの文字コード出力について確認させてください。 ExcelでA列から行方向に漢字、記号(環境依存文字も含む)のデータが1文字ずつ入力されてあります。これをExcelVBAマクロにより、B列にShift_JISの文字コード、C列にJIS X 0213の文字コードに変換して表示することは可能でしょうか。 例えばIMEパッドで「亜」の文字コードはShift_JISでは"889F"、JIS X 0213では"1-16-1"ですがこの文字コードをB列、C列にそれぞれ表示させたいです。 またその他のいい方法があればご教授いただけますでしょうか。 以上、よろしくお願いいたします。

  • ExcelVBA変数等でのファイルのOpen方法

    ExcelVBAで、変数でのファイルのOpen方法を教えてください。 以下のフォルダ構造とします。 '////////////////////////////////////////////////////// マクロファイル.xls 1フォルダA  ∟1999ファイルA.xls  ∟2000ファイルA.xls  ∟2001ファイルA.xls  ∟2002ファイルA.xls  ∟2003ファイルA.xls  ∟2004ファイルA.xls ・・・ 2フォルダB  ∟1999ファイルB.xls  ∟2000ファイルB.xls  ∟2001ファイルB.xls  ∟2002ファイルB.xls  ∟2003ファイルB.xls  ∟2004ファイルB.xls ・・・ 3フォルダC  ∟結果ファイルC.xls '////////////////////////////////////////////////////// マクロファイル.xlsのシートにコンボボックスとボタンを配置します。 コンボボックスで【2001】を選択した場合は、 前後1年…合わせて合計3年分のファイルの「A5~A25」の値が、 「結果ファイルC.xls」にコピーされるようにしたいのです。 コピー内容や範囲が多く1つのプロシージャーに収まり切りませんでした。 そこで「結果ファイルC.xls」ファイルを1つめのプロシージャで開き、 2つめのプロシージャで残りの処理を実行しようとしたのですが、 変数、コンボボックスの値でのファイルを開く方法がわからず困っており、 どなたかお知恵をお貸し下さい。 以下のようなコードを書いてみましたがエラーとなりました。 '////////////////////////////////////////////////////// Dim vTgYear As Variant Dim myFLName1 As String, sWbkSubName1 As String Dim myFLName2 As String, sWbkSubName2 As String, SubName As String, vTgYear = ComboBox1.Value For i = -1 To 1 sWbkSubName1 = "3_フォルダC\結果ファイルC.xls" myFLName1 = ThisWorkbook.Path & sWbkSubName1 Workbooks.Open Filename:=myFLName1 SubName = "vTgYear + i & _ファイルA.xls" sWbkSubName2 = "1_フォルダA & SubName" myFLName2 = ThisWorkbook.Path & sWbkSubName1 Workbooks.Open Filename:=myFLName2 (実行コード中略) Next i '////////////////////////////////////////////////////// 今回はファイルの開き方だけなので、実行コードを省略させていただきました。 初歩的な質問かと思いますが、何卒お力をお貸しいただけますと幸いです。 よろしくお願い致します。

  • ExcelVBAについて

    ExcelVBAについて Excel VBA初心者です。 やりたいことを説明しますと、 フォームA上に、テキストボックスBとコマンドボタンCがあるとします。 テキストボックスBにはMPGファイルのフルパスが既に入力されており、コマンドボタンCを押すとテキストボックスBのファイルを開けるようにしたいのです。 お手数ですが、よろしくお願いします。

  • エクセルVBA ファイル名操作

    エクセルマクロのコードにおきまして 「フォルダの選択」ダイアログから エクセルファイル 123.xlsxを例えば 開くときに それをa.xlsxという名前に変えて 以下のそれに続くVBAコードにおいて a.xlsxを操作したいのですが、 a = Application.GetOpenFilename() Workbooks.Open a これを実行すると求めるダイアログが表示されて 使いたい123.xlsxを開くをクリックしますが これでは123.xlsxがa.xlsxにはなりません このa.xlsxのファイル名で別途ファイル作成する方法を 御教示いただけると助かります よろしくお願いします win10 office365 コードは以下 部分ですが こういう流れで作成したい所存です Sub あいう() a = Application.GetOpenFilename() Workbooks.Open a 'b.xlsxファイルを新規作成 Workbooks.Add ActiveWorkbook.SaveAs Filename:="C:\Users\USER\Desktop\あいう\b.xlsx", FileFormat:=xlXMLSpreadsheet 'a.xlsxファイルの1行目のA1~AG1のセルの値をコピー Workbooks("a.xlsx").Worksheets("Sheet1").Range("A1:AG1").Copy 'b.xlsxファイルのA3~AG3のセルに貼り付け Workbooks("b.xlsx").Worksheets("Sheet1").Range("A3:AG3").PasteSpecial xlPasteValues 以下省略 よろしくお願いします

  • ソースコードでファイル名のみ変更したい

    A.csv から B.xlsx に必要個所をコピペするマクロを作成しました。 同じことを C.csv と D.xlsx のファイルで行いたいです。 ソースコード中のファイル名を、A→C、B→Dに変える方法(手直し以外で)ってあるのでしょうか?? 今のところ手で書き換えてますが、面倒&つまらなくて困ってます。 良い方法を教えて下さい。 

  • ExcelVBA複数のシートへのコピーの方法

    以下の質問の補足質問です。よろしくお願い致します。 「ExcelVBAコードの編集方法を教えてください」 http://okwave.jp/qa/q8503466.html 「ExcelVBA別フォルダにあるブックのコピー方法」 http://okwave.jp/qa/q8488933.html で教えていただいたコードを元に自分なりに編集したのですがうまくいきません。 結果先のシートは複数なのですが、複数のシートにコピーする編集方法がうまくいきません。 '////////////////////////////////////////////////////// yyyy = 1999~2012 yyyy2 = 2000~2012 Sheet名:A広域、B広域 1_フォルダA  ∟yyyy_ファイルA.xls 2_フォルダB  ∟yyyy_ファイルB.xls 3_フォルダC  ∟yyyy2_ファイルC.xls 4_フォルダD  ∟yyyy_ファイルD.xls 5_フォルダE  ∟ファイルE_結果.xls 例えばコンボボックスで「2007」を選択した場合、 '地域A男性 「2006_ファイルA.xls」のC5~C23を「ファイルE_結果.xls」の(A広域)D7~D25にコピー 「2007_ファイルA.xls」のC5~C23を「ファイルE_結果.xls」の(A広域)E7~E25にコピー 「2008_ファイルA.xls」のC5~C23を「ファイルE_結果.xls」の(A広域)F7~F25にコピー '地域A女性 「2006_ファイルA.xls」のD5~D23を「ファイルE_結果.xls」の(A広域)D26~D44にコピー 「2007_ファイルA.xls」のD5~D23を「ファイルE_結果.xls」の(A広域)E26~E44にコピー 「2008_ファイルA.xls」のD5~D23を「ファイルE_結果.xls」の(A広域)F26~F44にコピー '地域B男性 「2006_ファイルA.xls」のF5~F23を「ファイルE_結果.xls」の(A広域)D51~D69にコピー 「2007_ファイルA.xls」のF5~F23を「ファイルE_結果.xls」の(A広域)E51~E69にコピー 「2008_ファイルA.xls」のF5~F23を「ファイルE_結果.xls」の(A広域)F51~F69にコピー '地域B女性 「2006_ファイルA.xls」のG5~G23を「ファイルE_結果.xls」の(A広域)D70~D88にコピー 「2007_ファイルA.xls」のG5~G23を「ファイルE_結果.xls」の(A広域)E70~E88にコピー 「2008_ファイルA.xls」のG5~G23を「ファイルE_結果.xls」の(A広域)F70~F88にコピー '地域C男性 「2006_ファイルA.xls」のC5~C23を「ファイルE_結果.xls」の(B広域)D7~D25にコピー 「2007_ファイルA.xls」のC5~C23を「ファイルE_結果.xls」の(B広域)E7~E25にコピー 「2008_ファイルA.xls」のC5~C23を「ファイルE_結果.xls」の(B広域)F7~F25にコピー '地域C女性 「2006_ファイルA.xls」のD5~D23を「ファイルE_結果.xls」の(B広域)D26~D44にコピー 「2007_ファイルA.xls」のD5~D23を「ファイルE_結果.xls」の(B広域)E26~E44にコピー 「2008_ファイルA.xls」のD5~D23を「ファイルE_結果.xls」の(B広域)F26~F44にコピー '地域A男性 「2006_ファイルB.xls」のC5~C23を「ファイルE_結果.xls」の(A広域)H7~H25にコピー 「2007_ファイルB.xls」のC5~C23を「ファイルE_結果.xls」の(A広域)I7~I25にコピー 「2008_ファイルB.xls」のC5~C23を「ファイルE_結果.xls」の(A広域)J7~J25にコピー '地域A女性 「2006_ファイルB.xls」のC25~C43を「ファイルE_結果.xls」の(A広域)H26~H44にコピー 「2007_ファイルB.xls」のC25~C43を「ファイルE_結果.xls」の(A広域)I26~I44にコピー 「2008_ファイルB.xls」のC25~C43を「ファイルE_結果.xls」の(A広域)J26~J44にコピー '地域B男性 「2006_ファイルB.xls」のD5~D23を「ファイルE_結果.xls」の(A広域)H51~H69にコピー 「2007_ファイルB.xls」のD5~D23を「ファイルE_結果.xls」の(A広域)I51~I69にコピー 「2008_ファイルB.xls」のD5~D23を「ファイルE_結果.xls」の(A広域)J51~J69にコピー '地域B女性 「2006_ファイルB.xls」のD25~D43を「ファイルE_結果.xls」の(A広域)H70~H88にコピー 「2007_ファイルB.xls」のD25~D43を「ファイルE_結果.xls」の(A広域)I70~I88にコピー 「2008_ファイルB.xls」のD25~D43を「ファイルE_結果.xls」の(A広域)J70~J88にコピー '地域C男性 「2006_ファイルB.xls」のC5~C23を「ファイルE_結果.xls」の(B広域)H7~H25にコピー 「2007_ファイルB.xls」のC5~C23を「ファイルE_結果.xls」の(B広域)I7~I25にコピー 「2008_ファイルB.xls」のC5~C23を「ファイルE_結果.xls」の(B広域)J7~J25にコピー '地域C女性 「2006_ファイルB.xls」のC25~C43を「ファイルE_結果.xls」の(B広域)H26~H44にコピー 「2007_ファイルB.xls」のC25~C43を「ファイルE_結果.xls」の(B広域)I26~I44にコピー 「2008_ファイルB.xls」のC25~C43を「ファイルE_結果.xls」の(B広域)J26~J44にコピー '地域A男性 「2007_ファイルC.xls」のC4~C22を「ファイルE_結果.xls」の(A広域)L7~L25にコピー '地域A女性 「2007_ファイルC.xls」のC24~C42を「ファイルE_結果.xls」の(A広域)L26~L44にコピー '地域B男性 「2007_ファイルC.xls」のD4~D22を「ファイルE_結果.xls」の(A広域)L51~L69にコピー '地域B女性 「2007_ファイルC.xls」のD24~D42を「ファイルE_結果.xls」の(A広域)L70~L88にコピー '地域C男性 「2007_ファイルC.xls」のC4~C22を「ファイルE_結果.xls」の(B広域)L7~L25にコピー '地域C女性 「2007_ファイルC.xls」のC24~C42を「ファイルE_結果.xls」の(B広域)L26~L44にコピー '地域A男性 「2007_ファイルD.xls」のE8~E26を「ファイルE_結果.xls」の(A広域)N7~N25にコピー '地域A女性 「2007_ファイルD.xls」のE8~E26を「ファイルE_結果.xls」の(A広域)N26~N44にコピー '地域B男性 「2007_ファイルD.xls」のE8~E26を「ファイルE_結果.xls」の(A広域)N51~N69にコピー '地域B女性 「2007_ファイルD.xls」のE8~E26を「ファイルE_結果.xls」の(A広域)N70~N88にコピー '地域C男性 「2007_ファイルD.xls」のE8~E26を「ファイルE_結果.xls」の(B広域)N7~N25にコピー '地域C女性 「2007_ファイルD.xls」のE8~E26を「ファイルE_結果.xls」の(B広域)N26~N44にコピー '////////////////////////////////////////////////////// コピー先は複数あるのですが、文字数の関係で割愛させていただきます。 この内容で伝わると良いのですが。 何卒よろしくお願いします。

  • ExcelVBA別フォルダにあるブックのコピー方法

    ExcelVBAでデータを条件に応じてコピーしたいと思っています。 同一階層に「VBAファイル.xls」「1_フォルダA」「2_フォルダB」「3_フォルダC」があります。 「1_フォルダA」と「2_フォルダB」には年代別に分かれたファイルがあります。 ファイルとフォルダの構造は以下の通りです。 VBAファイル.xls 1_フォルダA  ∟1999_ファイルA.xls  ∟2000_ファイルA.xls  ∟2001_ファイルA.xls  ∟2002_ファイルA.xls  ∟2003_ファイルA.xls  ∟2004_ファイルA.xls  ∟2005_ファイルA.xls  ∟2006_ファイルA.xls  ∟2007_ファイルA.xls  ∟2008_ファイルA.xls  ∟2009_ファイルA.xls  ∟2010_ファイルA.xls  ∟2011_ファイルA.xls  ∟2012_ファイルA.xls 2_フォルダB  ∟1999_ファイルB.xls  ∟2000_ファイルB.xls  ∟2001_ファイルB.xls  ∟2002_ファイルB.xls  ∟2003_ファイルB.xls  ∟2004_ファイルB.xls  ∟2005_ファイルB.xls  ∟2006_ファイルB.xls  ∟2007_ファイルB.xls  ∟2008_ファイルB.xls  ∟2009_ファイルB.xls  ∟2010_ファイルB.xls  ∟2011_ファイルB.xls  ∟2012_ファイルB.xls 3_フォルダC  ∟ファイルC_結果.xls 「VBAファイル.xls」では添付の画像のような「ActiveXコントロール」を設定しました。 コンボボックスで西暦を選択すると、選択した年を中心年として、 前後1年を合わせて合計3年がラベルに表示されます。 その年のファイルのデータが「ファイルC_結果.xls」にコピーされるようにしたいです。 例えば画像のように「2007」を選択した場合、 ・「2006_ファイルA.xls」のC7~C25を「ファイルC_結果.xls」のD7~D25にコピー ・「2007_ファイルA.xls」のC7~C25を「ファイルC_結果.xls」のE7~E25にコピー ・「2008_ファイルA.xls」のC7~C25を「ファイルC_結果.xls」のF7~F25にコピー ・「2006_ファイルB.xls」のC6~C24を「ファイルC_結果.xls」のH7~H25にコピー ・「2007_ファイルB.xls」のC6~C24を「ファイルC_結果.xls」のI7~I25にコピー ・「2008_ファイルB.xls」のC6~C24を「ファイルC_結果.xls」のJ7~J25にコピー というようにしたいです。 「ファイルC_結果.xls」のD/E/F列はファイルAのデータで、 D列は前年、E列は当年、F列は翌年 H/I/J列はファイルBのデータで、 H列は前年、I列は当年、J列は翌年の値をコピーして貼り付けたいです。 また、可能であれば「ファイルC_結果.xls」は原本なので、 値をコピーする際にファイル名が変更できればよりよいです。 いろいろ書いてしまい、うまく伝わっているか不安なのですが 処理するデータが多くとても困っています。 お知恵のある方、どなたか助けていただけますと幸いです。 よろしくお願いいたします。