• 締切済み

VBAが上手く起動しません。

やりたいことは 『日付欄の名前で新規ファイルを作りたい』 『フォルダ内にすでに同じ名前のファイルがあるなら、ファイルを開く』 『フォルダ内にすでに同じ名前のファイルがあり、すでにファイルが開かれていれば何もしない』 なのですがどうしても上手く起動しません。 試したことは、(添付画像を参照しながら読んでください。) 1.「新規ファイルを保存したいフォルダ」の中の既存ファイル名を取得。 2.次にそれを検索用の名前に変換。 3.元データの値を上から順に検索用リスト内に存在するか検索。 4.見つからなければブック作成、「検索値」を名前に付けて保存。 5.見つかれば、開いているか閉じているかを調べる。 6.閉じていたら、ファイルを開く。 7.開いていたら、アクティブにして終了。 打ち込んだコード→追記へ

みんなの回答

回答No.2

質問の趣旨を次の様に理解し、回答します。 <質問の趣旨> a.作りたいファイル名をZZZ(仮称-日付ファイル作成機)とします。 b.ZZZで行いたいことは、特定のセルA1に任意の日付を入力し(データYYY)、特定のマクロXXXを実行させると、 (1)YYYと同名のファイルが開かれていると、ファイルYYYをアクティブにし、ZZZを保存しないで閉じる。 (2)YYYと同名のファイルが開かれていないときは、特定のフォルダWWW(セルA2に記述)内にファイルYYYが存在するかどうかを調べ、 (3)存在すればファイルYYYを開き、アクティブにし、、ZZZを保存しないで閉じる。 (4)存在しなければ、ファイルZZZをファイルYYYに変身させる。 c.ファイルZZZに(1)~(4)を実行させるマクロを記述する。 <(1)~(4)を実行させるマクロ> Sub XXX() Dim A,B Dim AA,BB,CC Dim AAA,BBB,CCC,DDD AA=Range("A1").Value BB = ActiveWorkbook.Name A= Workbooks.Count For B=1 To A If Workbooks(A - B).Name = AA Then Workbooks(AA).Activate Workbooks(BB).Close False Exit Sub End If Next B CC=Range("A2").Value Set AAA = CreateObject("Scripting.FileSystemObject") Set BBB = AAA.GetFolder(CC) Set CCC = BBB.Files For Each DDD In CCC If DDD.Name= AA Then Workbooks.Open Filename:=DDD.Path Workbooks(BB).Close False Exit Sub End If Next ThisWorkbook.SaveAs Filename:=CC & "\" & AA End Sub AAのデータの型には、注意が必要です。 また、アクティブにしたファイルのどのシートを選択し、どのセルを選択させるか等々については、 ご自身で決めて下さい。

  • ki-aaa
  • ベストアンサー率49% (105/213)
回答No.1

試してみて Sub test()   Dim w_book As Workbook   Dim yyyymmdd As String   Dim i As Long      '新しいブックは、このマクロが書いてあるブックと同じフォルダに作る      'マクロの書いてあるブックのA1に日付があるとする   yyyymmdd = Format(ThisWorkbook.Sheets("Sheet1").Range("A1"), "yyyymmdd")      yyyymmdd = yyyymmdd & ".xls" 'xlsはバージョンに合わせる   On Error Resume Next     'すでにファイルが開かれていればアクティブにする     Set w_book = Workbooks(yyyymmdd)     If Err.Number = 0 Then       Workbooks(yyyymmdd).Activate       Exit Sub     End If     Err.Number = 0          'フォルダ内にすでに同じ名前のファイルがあるなら、ファイルを開く     Workbooks.Open Filename:=ThisWorkbook.Path & "\" & yyyymmdd     If Err.Number = 0 Then       Exit Sub     End If     Err.Number = 0          '日付欄の名前で新規ファイルを作りたい     Set w_book = Workbooks.Add     w_book.SaveAs Filename:=ThisWorkbook.Path & "\" & yyyymmdd     i = ThisWorkbook.Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row     ThisWorkbook.Sheets("Sheet1").Range("A" & i + 1) = yyyymmdd   On Error GoTo 0    End Sub

関連するQ&A

  • EXCEL2000でのVBAについて

    お世話になります。 EXCEL2000のVBで下記のことをしたいのですが、うまく出来ないところがあり対処方法を教えて頂きたいです。 (1)アクティブブックの名前を取得   (2)ブックのセルA1の値を取得 (3)保存ダイアログでA1の値をファイル名にし保存 (4)保存したファイルを閉じる (5)基のアクティブブックを再度開く 以上です。 今できていないのは(1)と(5)です。 基のアクティブブックの名前をプログラム上に直接入力する分には出来るのですが、 ファイル名が変更になった時に、いちいちVBを書き換えるのが面倒なだけです… コードを提示しますので、ご教授願えればと思います。 Sub 保存() Dim ファイル名 As String, フォルダ名 As Object, フォルダ選択 As Object, ファイル名2 As Workbook Set ファイル名2 = ActiveWorkbook ファイル名 = Range("A1").Value Set フォルダ選択 = CreateObject("Shell.Application") Set フォルダ名 = フォルダ選択.BrowseForFolder(0, "保存フォルダを選んでください", 1) ActiveWorkbook.SaveAs Filename:=フォルダ名.items.Item.Path & "\" & ファイル名 & ".xls" MsgBox ファイル名 & ".xls", vbOKOnly, フォルダ名 & "に保存しました" Workbooks.Open "C:\test\" & ファイル名2 Workbooks(ファイル名 & ".xls").Close End sub ファイル名の取得が間違っていると思うのですが、ネットなどで調べてみましたが、よくわかりませんでした。

  • EXCEL VBAについて

    VBAでCSVファイルをテンプレートのBBOKに読込むコードを 作り、CSVファイルから読込んだBOOK1データを集計する BOOK2を作成しています。 BOOK1・11/21・・・11/21・・・11/22・・・11/23と続きます      A     B     C      D 1  ID     店名   売上    日付 2 1104567   渋谷店  190,809   11/21 3 1102031   新宿店  209,808   11/21 4 1103450   横浜店  108,765   11/21 BOOK2・集計      A    B    C       D       E 1  ID   店名   11/21    11/22     11/23 2 1104567  渋谷店  190,809   203,487 3 1102031  新宿店  209,808   340,876 4 1103450  横浜店  108,765   547,627 ※BOOK1とBOOK2のIDの並び順は一致していません。 上記のBOOK1のデータをBOOK2に読込ませたいと考えています。 VLOOKUPやINDEX関数を使用しようかと考えたのですが、日付毎に ファイル名が違うのと、集計のファイルには外部参照をさせたくないと 考えています。 VBAで作成したいコードはBOOK1からBOOK2の日付のセルにIDを検索条件として日付毎のファイルを読込ませたいです。 フォームで日付を入力し、コピーするBOOK2のセルを指定後、BOOK1を選択するためにダイアログボックスを出したいです。 BOOK2のIDを検索条件としてBOOK1から一致する売上セルを抽出するコードだけでもわかれば何とか作成できそうなのですが、 ご教授いただけませんでしょうか?

  • ファイルとフォルダの日付変更について

    アルバムを作っているのですがフォルダの名前順や日付順でソートがしたいので任意の日付をフォルダに付けたいのとファイル名やフォルダ名のリストをプリントアウトしたいのですがよろしく。

  • フォルダ名だけを取得するVBA

    VBAを使ったエクセルテンプレート適用ツールを作成しているのですが そのVBAのことで教えてください。 現在自作のフォーム上にあるテキストボックスにフルパスが入っているとします(添付図参照)。 *この前提は必須と考えてください。 次に作成ボタンをクリックすると Step1 新しいブックが開かれ行幅や書式などが自動で調整されます。 Step2 ブックの保存ダイアログが自動で開きます。     ただし、保存ダイアログが開いた時点で自作フォーム中の     テキストボックスで指定したフルパスに移動しており、     且つ移動先のフォルダ名(<-注意!!フルパス名ではありません!!)と     同じ文字列をファイル名入力欄に自動で入力されるようにします。    ex) D:\MyProject\Project01\TaskA\にブックを作成し保存する場合、      保存ダイアログのファイル名欄にTaskAとだけ書く。 マクロ自体はここでストップし、これ以降はユーザーがそのファイルメモで 保存してよいかどうかを判断し、問題なければ手動でダイアログ上の「保存」ボタンを押します。 問題はStep2で、保存先のフォルダ名と同じ文字列を保存ダイアログのファイル名に記入するには どのようなコードを書いたらよいでしょうか。 私自身としては下記の二案を考えているのですがそれぞれについて疑問があるので教えてください。 案1 作成ボタンを押した時点でテキストボックスに書かれているフルパスの文字列から   末尾にあるフォルダ名だけを取得して変数に代入し、これを保存ダイアログの   ファイル名欄に反映させる。   疑問:テキストボックスのValue値に書かれているフルパスを示す文字列から      末尾のフォルダ名だけを取得するためのコードは何と書けばよいのでしょうか? 案2 ブックの保存ダイアログが開いて保存先のパスに移動してから今保存ダイアログで    開いているフォルダ名を取得する。    疑問:今アクティブになっているブックが保存されているフォルダ名だけを取得する    方法なら確かあったような気がしています。    しかし今保存ダイアログで表示されているフォルダ名を取得するコードは何と    書けばよいのでしょうか?    そもそもそういったコードや操作自体VBAにあるのでしょうか?

  • excel VBAについて

    コードの書き方が分からないのですが、 一つもともとあるexcelファイル(file1)にマクロを保存しておいて それを使うときに新しく必要な情報が入った上のとは別のexcelファイル(file2)を作ります そしてfile1を開いた状態でfile2から値を参照するにはどうすればよいのでしょうか? つまり今file2はありません しかしfile2を作りそこから参照したいときににコードをさわらなくてもいいように書きたいのです file2は毎回同じように作るので値は変わっても場所は毎回同じセルに入ります 説明が下手で質問が分かりづらいとは思うのですがどうかよろしくお願いいたしますm(__)m

  • VBA 複数ブックへ書き込み

    VBA初心者です。 1つのフォルダ内にある100(ファイル名001から100)個のエクセルファイル(ブック)の特定の場所(すべてのエクセル ファイルはファイル名は違うが、同一のシート名で同一のセルの構造になっている。 以上に対して、1つのもとになるファイルA(ブック、シート)の特定のセル(同一列の行を上から順次下る)セルの値を先の同一フォルダ内のエクセルファイル100(001~100)個に対して、ブックオープン、特定セルのデリート、特定セルへの書き込み、ブック保存という一連の作業を行いたいです。 多数のファイルから1つの集計ファイルに値を読み込んできて書き込むサンプルはあるようですが、逆に1つのファイルから同一フォルダ内の多数のファイル(ブック)の特定場所に書き込むためのサンプルコードを教えていただけると大変助かります。 以上よろしくお願いいたします。

  • Excel VBA 複数ブックのシート結合方法

    複数ブックの特定のシート(都度指定)のみを結合するマクロを組みたいです。 例えば、「ファイルマージ前」というフォルダがあって、その中には数値のみ違う同フォーマットのアンケート集計結果が保存されています。 このフォルダ内には50ほどのブックが保存されていて、そのブック内の「N表」というシート(50あるブック内全てに存在するシート)を新規ブック(マクロを組み込むブック)の1シートに上から順に値コピーしていきたいです。 今後、別の機会でファイルマージが必要になった際にも使用出来る様に、シート名を都度指定(セルにシート名を入力して、そのシート名を参照する等)出来るようにしたいのですが、自分の知識とネット等で調べた情報のみではうまく作成出来ませんでした。 詳しい方のお知恵をお借りしたいです。 宜しくお願い致します。

  • フォルダ作成と別名保存【VBA】

    教えてください 現在、下の2つのマクロを使っています。 「O27」の値でフォルダを作るものとブックを別名保存するものです。 これを1つにまとめたいのですが単純に1つにまとめるとフォルダは作成されるのですがブックの別名保存がセルの値を参照してくれません。 また、MkDir でフォルダを作成すると同じ名前のフォルダが先にあるとエラーになってしまいます。 この2点を解消できる方法はないでしょうか? よろしくお願いいたします。 Sub 別名フォルダ() MkDir Worksheets("オーダーシート").Range("O27").Value End Sub Sub 別名保存() Application.Dialogs(xlDialogSaveAs).Show Arg1:=Range("O27").Value End Sub

  • ファイル保存時の表示

    Windows 2000 pro.sp4の自作機です.ハードウェアに依存した問題ではありません. ファイルを保存するのウィンドウに表示されるファイルやフォルダーの表示が 日付順になってしまったようです. 例えば,メモ帳で「名前を付けて保存」を選ぶと,前回保存されたフォルダーが開きます. その中の下位のフォルダーを選択して保存をしようとするのですが, フォルダーやファイルの表示が日付順なっていて,目的のフォルダーをさがすのが困難な状態です. いつからこのような状態になったのかは覚えていませんが,他のPCで同じ事をすると ファイルフォルダーの名前順になっているようです. この状態でも,ファイル表示を詳細にすれば名前順でも,日付順でも好きなように 並べ替えられるのですが,度々のことで煩雑です. 特に設定を変更した記憶はありません.以前のデフォルト状態に戻す方法はないでしょうか.

  • VBA フォルダ内のファイルを、ファイル名順に開く

    【PPT VBA】フォルダ内のファイルを、ファイル名順に開く方法について  今晩は、質問させていただきます。どうぞよろしくお願いいたします。  環境:Win7+PPT2007 になります。  下記のようなコードで、あるフォルダ内のファイル群のデータを取得しております。 「ファイル名順」でデータを取り出したいのですが、違う順(おそらく日時順)で 出てくるので悩んでいる次第でございます。  検索いたしておりますと、ハードディスク等の環境によって検出順が異なるようでございましたが 何か、良さそうな方法がございましたらお教えいただきたくお願いいたします。 Dim File_Collection As Object Dim File_List As Variant Dim Folder_Collection As Object Dim Folder_List As Variant Set File_Collection = CreateObject("Scripting.FileSystemObject") _ .GetFolder(パス).Files For Each File_List In File_Collection      '(名前順では検出してくれません。。。) Next  暫く考えまして、例えば Stringの配列を用意しておいて一旦、上記コードでファイル名とパスをリスト化 →配列の文字列を登り順に、Sort →これの順にファイルを開いていく などという事を思いつきました。しかしファイル数が多いため(100~500個でございます)、 これらの長いパスを配列に入れるというのも、メモリに負担がかかる(?)のかな などと考えている次第でございます。  他に、配列の代わりにエクセルを一旦開いて、そこでソート・・・・・とも考えましたが 友人達に使っていただく可能性があり、余りスマートな解決策ではなさそうですので それよりは上記の「配列でソート」を優先したい次第でございます。  コーディングで何か良い方法があれば良いのでございますが、 他の方法でも結構でございます。もし「自分なら、こうするかな」といった ようなご意見などございましたら是非、ご紹介いただけないでしょうか。  もしお詳しい方がいらっしゃいましたら,どうぞよろしくお願いいたします。

専門家に質問してみよう