Excel VBAでファイルの特定シートに処理を行う方法

このQ&Aのポイント
  • Excel VBAを使用して、複数のファイルの特定のシートに処理を行いたい場合、以下の手順を参考にしてください。
  • 1. ファイルを開くダイアログボックスを表示し、処理を行うファイルを選択します。
  • 2. 選択したファイルを開き、指定した条件に基づいてシートのデータを処理します。
回答を見る
  • ベストアンサー

全てのシートに同じ条件で処理をし保存するマクロ

いつも識者の皆様にはお世話になっております。 Excel VBAのことで質問させてください。 ファイル名やその中のシートの数がばらばらで、データの型が同じファイルが毎日生成されます。 下記の流れでVBAで処理をしたいと思っています。 1.ファイルを開くダイアログを出し、ブックを指定する。 2.開いたブックにある全てのシートに対し、A列が"aaa"以外の行を削除する。 3.同じディレクトリに、ファイル名の前頭に"ccc"と付けて保存する。 しかし、それぞれのシートにはデータが20000-30000行あり、上記方法だとScreenUpdatingをfalseにしても時間がかかるという記述を見つけたため、 1.ファイルを開くダイアログを出し、ブックを指定する。 2.開いたブックにある全てのシートに対し、A列が「"aaa"と等しい」の条件でフィルタをかけ、そのデータを別の新しいブックに貼り付ける(シート名も同じにする) 3.ダイアログで開いたブックと同じディレクトリに、ファイル名の前頭に"bbb"と付けて保存する。 このような手順でやろうと思っていますが、ダイアログを出すところまではなんとかたどり着けたんですが、その後がまったくわかりません。 ご参考にならないとは思いますが、書きかけ(というかダイアログを出してworkbookを追加するだけ)のコードを添付いたします。 Sub test() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?") If OpenFileName <> "False" Then Workbooks.Open OpenFileName Else MsgBox "キャンセルされました" End If Workbooks.Add End Sub 識者の皆様、どうかご回答よろしくお願いいたします。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

こんなカンジ: sub macro1()  dim myPath as string  dim myFile as string  dim s as worksheet  myfile = application.getopenfilename()  if myfile = "False" then   msgbox "cancel"   exit sub  end if  application.screenupdating = false  application.calculation = xlcalculationmanual  workbooks.open myfile  mypath = activeworkbook.path & "\"  myfile = "ccc" & activeworkbook.name  for each s in activeworkbook.worksheets   s.autofiltermode = false   s.range("A:A").autofilter field:=1, criteria1:="<>aaa"   s.autofilter.range.offset(1).entirerow.delete shift:=xlshiftup   s.autofiltermode = false  next  activeworkbook.saveas filename:=mypath & myfile  activeworkbook.close false  application.calculation = xlcalculationautomatic  application.screenupdating = true  msgbox "DONE" end sub

rihitomo
質問者

お礼

ありがとうございます! できました!

関連するQ&A

  • ExcelVBA シートコピー

    ExcelVBAで管理表1のシート1へ管理表2のシート2へコピーするVBAを書いてみました。 以下部分を修正したいです。 wbSaki.Worksheets("シート2").Range("A1:VA3000").Copy こちらの選択範囲を最終行と最終列という風にしたいのですが、うまくコピー貼り付けができないので理由がわかる方がいらっしゃれば教えていただけますでしょうか。 以下全体コード------------------ Sub 管理表1のシート1を管理表2のシート2へを貼り付け() '選択したファイルを取り込み、別のファイルに貼り付ける。 Dim RC As Integer Dim OpenFileName, fileName, Path, SetFile As String Dim wbMoto, wbSaki As Workbook Set wbMoto = ThisWorkbook 'マスターデータ取り込み元をセット Application.DisplayAlerts = False Application.ScreenUpdating = False 'BOOKを開かない RC = MsgBox("管理表1を開きますか?", vbYesNo + vbQuestion, "確認") If RC = vbYes Then 'サーバー指定 End Withまで With CreateObject("WScript.Shell") strCdir = CurDir .currentdirectory = "ファイル格納先" OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?") 'ダイアログボックスを表示して、マスターデータファイルを指定します。 If OpenFileName <> "False" Then SetFile = OpenFileName Else MsgBox "キャンセルされました" Exit Sub 'マスターデータの取り込みをキャンセル End If End With Workbooks.Open fileName:=SetFile, ReadOnly:=True, UpdateLinks:=0 'ダイアログボックスで指定したマスターデータファイルを開きます。 'VBA起動BOOKのシートをクリア wbMoto.Worksheets("シート1").Cells.Clear Set wbSaki = Workbooks.Open(Path & SetFile) '--- オートフィルタをクリアする ---' If wbSaki.Worksheets("シート2").FilterMode Then wbSaki.Worksheets("シート2").ShowAllData 'ワークブック間のシートをコピーします。 wbSaki.Worksheets("シート2").Range("A1:VA3000").Copy wbMoto.Worksheets("シート1").Range("A1").PasteSpecial xlPasteValues Application.CutCopyMode = False 'コピー切り取りを解除 wbSaki.Close False 'マスターデータ取り込み先のファイルを閉じる Application.ScreenUpdating = True 'BOOKを開かずに作業 Else MsgBox "処理を中断します" End If ThisWorkbook.Worksheets("元のシート").Select 'シート名を指定 Application.DisplayAlerts = True End Sub

  • VBAで、すべてのファイル(ppt,pdf,txt

    VBAで、すべてのファイル(ppt,pdf,txtなど)を選択して開きたい VBA初心者です。ダイアログから選択して様々な形式のファイルを 開きたいのですが、 検索して↓などをみていますが、イマイチわかりません。。。 http://okwave.jp/qa/q1545851.html http://okwave.jp/qa/q7827757.html http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1414898789 【環境 WindowsXP Excel2000】 ↓これだとPDFを選択はできますが、エクセルに文字化けしてでてきます。 Sub フォルダからファイル選択() Dim OpenFileName As String Dim AAA, ZZZ As String AAA = Sheets("data").Range("A5") ZZZ = "'ChDir "\■.local\pubs\●\△\" & AAA With CreateObject("WScript.Shell") .CurrentDirectory = ZZZ End With OpenFileName = Application.GetOpenFilename("すべてのファイル,*.*") If OpenFileName <> "False" Then Workbooks.Open OpenFileName Else MsgBox "キャンセルされました" End If End Sub 不足情報ありましたら補足致しますので、お教え下さい><;

  • すべてのシートに同じ処理をするにはこれでいい?

    フォルダ内にあるすべてのブックのすべてのシートに同じ処理をするマクロを書いたのですが思った動きをしてくれませんでした。 ちなみにやりたい事は!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!で囲まれたところだけ変えれば、シート数がバラバラな複数のブック内のすべてのシートで同じ処理が行われるようになる事です。 今回は複数のブックのA列を選択してコンマで区切るようにしています。 いろんなとこからコピペでつなぎ合わせたんですがどこがわるいんだろう?コンパイルはできてしまうのでどこを直せばいいのやら自力で見つけられません。お助けください。 環境はExcel2007 Windows7です。 Sub Allfile() Dim PATH As String Dim KTS As String PATH = Application.InputBox("編集したいファイルがあるフォルダのパスを入力。", "入力", Type:=2) KTS= Application.InputBox("編集したいファイルの拡張子を入力(ドットもいれる)。", "入力", Type:=2) Application.ScreenUpdating = False '画面の更新をしないようにして処理速度up Dim fileNmCol As Collection 'ファイル名格納コレクション Dim tempFileNm As Variant Dim fullPath As String Set fileNmCol = New Collection tempFileNm = Dir(PATH + "*KTS", vbNormal) 'Dirにより、ファイル名を取得フォルダ配下にあるファイル名を順次fileNmに格納する。 Do While tempFileNm <> "" 'ファイル名をfileNmColに追加する fileNmCol.Add (tempFileNm) tempFileNm = Dir() Loop For Each tempFileNm In fileNmCol 'ファイルの数だけ繰り返し ↓以下ブックごとの処理 fullPath = PATH + tempFileNm 'ファイルのフルパスを設定指定して、Excelブックを開く Workbooks.Open fullPath Dim Ws As Worksheet  'ワークシートの変数を用意   For Each Ws In Worksheets 'シートの数だけ繰り返し ↓以下シートごとに対する処理 Ws.Activate 'Ws.Activate」がないと、はじめのシートのみの実行となります。 '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _ Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _ :=Array(1, 1), TrailingMinusNumbers:=True 'A1行を選択してコンマ区切りにする '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Next Ws Next Application.ScreenUpdating = True End Sub

  • 【マクロ】指定したファイルを開いてマクロを実行

    マクロ初心者です。よろしくお願いします。 <質問> コマンドボタンをクリックしたら、任意のエクセルファイルを指定して開き、その開いたファイル(白紙状態のファイル)にマクロを実行させる方法を探してます。 <作成マクロ> Private Sub CommandButton1_Click() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") If OpenFileName <> "False" Then Workbooks.Open OpenFileName End If Workbooks(Dir(OpenFileName)).Activate ActiveCell.FormulaR1C1 = "テスト" Range("A1").Select Selection.Copy Range("B1").Select ActiveSheet.Paste End Sub <マクロ説明> --コマンドボタンをクリックして指定したエクセルファイルを開く-- Private Sub CommandButton1_Click() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") If OpenFileName <> "False" Then Workbooks.Open OpenFileName End If Workbooks(Dir(OpenFileName)).Activate --開いたエクセルファイル(白紙状態)のセルA1に「テスト」を入力した後、コピーしセルB2に貼り付ける--   ActiveCell.FormulaR1C1 = "テスト" Range("A1").Select Selection.Copy Range("B1").Select ActiveSheet.Paste End Sub コマンドボタンをクリック ↓ 任意のエクセルファイルを指定して開く ↓ 開いたファイル(白紙状態のファイル)のセルA1に「テスト」と書き込み セルA1の「テスト」をコピーしセルB1に貼り付ける このマクロを実行させるにはどこを改善すれば良いでしょうか? ご助言いただけると助かります。 よろしくお願い致します。

  • 【マクロ】指定したファイルを開いてマクロを実行

    マクロ初心者です。よろしくお願いします。 <質問> コマンドボタンをクリックしたら、任意のエクセルファイルを指定して開き、その開いたファイル(白紙状態のファイル)にマクロを実行させる方法を探してます。 <作成マクロ> Private Sub CommandButton1_Click() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") If OpenFileName <> "False" Then Workbooks.Open OpenFileName End If Workbooks(Dir(OpenFileName)).Activate ActiveCell.FormulaR1C1 = "テスト" Range("A1").Select Selection.Copy Range("B1").Select ActiveSheet.Paste End Sub <マクロ説明> --コマンドボタンをクリックして指定したエクセルファイルを開く-- Private Sub CommandButton1_Click() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") If OpenFileName <> "False" Then Workbooks.Open OpenFileName End If Workbooks(Dir(OpenFileName)).Activate --開いたエクセルファイル(白紙状態)のセルA1に「テスト」を入力した後、コピーしセルB2に貼り付ける--   ActiveCell.FormulaR1C1 = "テスト" Range("A1").Select Selection.Copy Range("B1").Select ActiveSheet.Paste End Sub コマンドボタンをクリック ↓ 任意のエクセルファイルを指定して開く ↓ 開いたファイル(白紙状態のファイル)のセルA1に「テスト」と書き込み セルA1の「テスト」をコピーしセルB1に貼り付ける このマクロを実行させるにはどこを改善すれば良いでしょうか? ご助言いただけると助かります。 よろしくお願い致します。

  • worksheetsの名前変更マクロ

    マクロでsheetsをコピーしてそのあと名前を変更するマクロを作っているのですがうまくいきません。 マクロで他のbookを開いて、そのbook名をsheets名にしたいのですが以下のマクロではうまくいきませんでした。どこが悪いのでしょうか? ご指導お願いいたします。 Sub ~() OpenFileName = Application.GetOpenFilename("TXT/CSVファイル,*.txt?;*.csv?") ThisWorkbook.Activate Application.ScreenUpdating = False If OpenFileName <> "False" Then Set TargetBook = Workbooks.Open(OpenFileName) ThisWorkbook.Activate Worksheets("マクロ用名称変更不可").Copy before:=Worksheets("マクロ用名称変更不可") ActiveSheet.Name = OpenFileName TargetBook.Close Application.ScreenUpdating = True Else MsgBox "キャンセルしました" End If End Sub

  • エクセルのシートのコピーについて

    シートのコピーをVBAで行いたいのですが、エラーになってしまいます。 間違っている箇所が分からないのでご教授お願いします。 貼り付けというブックにマクロが組まれています。 ”データ”のブックにあるシート名が”貼り付けのブックのリスト”のシートに記載されています。 リストのシートに記載されているシートを貼り付けのブックにコピーしたいです。 よろしくお願いします。 Sub シートコピー() 行数 = 2 Do Until IsEmpty(Cells(行数, 3).Value) コピー元 = Workbooks("貼り付け.xls").Worksheet("リスト").Cells(行数, 3) Workbooks("データ.xls").Worksheet(コピー元).Copy After:=Workbooks("貼り付け.xls").Sheets(Workbooks("貼り付け.xls").Sheets.Count) 行数 = 行数 + 1 Loop End Sub

  • エクセル2007のマクロについて

    実践で学ぶ Office Excel 2007 VBAというマクロの学習サイトで Sub Macro実践1() 'ブック シート セルアドレスを指定すればブック シートをアクティブにする必要はない             Workbooks("転記.xlsx").Worksheets("転記シート1").Range("A1").Value = _               Workbooks("データ.xlsx").Worksheets("データ1").Range("A1").Value                 End Sub         と入力すると「インデックスが有効範囲にありません」となってしまいます。なにか間違っているのでしょうか?

  • ユーザーフォームがシートの裏に隠れてしまう

    ブックを開いた時に、表示されるユーザーフォームが作業シートの裏に隠れて、作業が思うようにできません。なんとかシートの前面に表示させたいです。EXCEL365solo,WINDOWS10使用の超初心者です。ご指導よろしくお願いします。 Private Sub CommandButton96_Click() Dim OpenFileName As String Unload Me ChDir Application.ThisWorkbook.Path & "\2年集計" OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xlsm") G給与入力.Show vbModeless If OpenFileName <> "False" Then Workbooks.Open OpenFileName Else MsgBox "キャンセルされました" End If End Sub

  • エクセル:シートを保存するマクロ

    あるエクセルファイルFile.xls内に、4つのシートSheet1,Sheet2,Sheet3,Sheet4があるとして、 4つのシートを個別にcsvファイルとして保存するようなマクロを作りたいです。 ▼ソースです  (ここまでのコードで、Pathに保存先のディレクトリ名を取得する部分があるとお考えください)  Filename = "Sheet1" '保存するシート名は、Sheet1~4 GoSub Save1 Filename = "Sheet2" GoSub Save1 Filename = "Sheet3" GoSub Save1 Filename = "Sheet4" GoSub Save1 '保存完了後は、File.xls内Sheet1のCells(4, 1)にカーソルを配置。 Sheets("Sheet1").Select Cells(4, 1).Select Exit Sub Save1: Sheets(Filename).Select fname = Path & "\" & Filename & ".csv" ActiveWorkbook.SaveAs Filename:=fname, FileFormat:=xlCSV, CreateBackup:=False Return End Sub 以上のソースで実行すると、 指定したディレクトリにsheet1.csv、sheet2.csv、sheet3.csv、sheet4.csvの4ファイルができます。 ここまでは問題ないのですが、 マクロを実行後、Sheet4.csv(最後に保存したファイル)が開かれた状態になってしまいます。 しかも、ファイル名はSheet4.csvなのに、シートSheet1~4を持っている状態です。 普通にSheet4.csvファイルを開くと、シートはSheet4しかありません。 状態が伝わるでしょうか? File.xlsのマクロを実行しているので、実行完了後もFile.xlsを開いておきたいのですが、 どのような記述を加えればよいでしょうか? マクロ(VBA)は使い始めたばかりなので説明されても理解できないかもしれませんが、 できればよろしくお願いいたします。

専門家に質問してみよう