- 締切済み
すべてのシートに同じ処理をするにはこれでいい?
フォルダ内にあるすべてのブックのすべてのシートに同じ処理をするマクロを書いたのですが思った動きをしてくれませんでした。 ちなみにやりたい事は!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!で囲まれたところだけ変えれば、シート数がバラバラな複数のブック内のすべてのシートで同じ処理が行われるようになる事です。 今回は複数のブックの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
- tubotomo62
- お礼率34% (45/130)
- その他(インターネット・Webサービス)
- 回答数2
- ありがとう数0
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- keithin
- ベストアンサー率66% (5278/7940)
>ダメでした どのようにダメだったのですか? ダメだったシートは,具体的に事実としてどこ番地のセル範囲に,具体的に実際にはどんなデータが記入されているのですか? screenupdatingを抑制せず,マクロの実際の動作を目視で確認しながら(実際にはステップ実行を行いながら),マクロのどこが,どのように意図と違う動作をしているのですか?を確認して具体的な情報を提供してみてください。
- keithin
- ベストアンサー率66% (5278/7940)
Ws.Activate 'Ws.Activate」がないと、はじめのシートのみの実行となります。 の次に range("A:A").select を追加します。
関連するQ&A
- Excel VBAを用いた一括ファイル処理方法
Excelコマンドボタンを用いて、特定のフォルダ内に格納されたExcelファイルの一括処理をしたいのですが、おもうようにできません。 一括処理内容は、A列以外入力できないようにロックさせる処理になります。 (可能であればPW設定もつけたい。) いろいろサンプルコードやマクロの記録で繋げてみたのですが、おもうようにできません。 どうすればよいのか教えて頂きたく、どうぞよろしくお願いいたします。 <コード> Private Sub CommandButton1_Click() Dim fileNmCol As Collection 'ファイル名格納コレクション Dim folderPath As String 'フォルダのフルパス '作業用 Dim tempFileNm As Variant Dim fullPath As String Set fileNmCol = New Collection 'フォルダパス folderPath = "C:\TEST\" 'Dirにより、ファイル名を取得(xlsファイルのみ) 'フォルダ配下にあるファイル名を順次fileNmに格納する。 tempFileNm = Dir(folderPath + "*.xls", vbNormal) 'ファイル名をfileNmColに追加する Do While tempFileNm <> "" fileNmCol.Add (tempFileNm) tempFileNm = Dir() Loop 'ファイルの数だけ繰り返し For Each tempFileNm In fileNmCol 'ファイルのフルパスを設定指定して、Excelブックを開く fullPath = folderPath + tempFileNm Workbooks.Open fullPath Cells.Select Selection.Locked = False Selection.FormulaHidden = False Columns("I:I").Select Range(Selection, Selection.End(xlToLeft)).Select Columns("C:I").Select Range("I1").Activate Selection.Locked = True Selection.FormulaHidden = False ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _ False Range("A1").Select ActiveWorkbook.Save 'ファイルを閉じる(アラートを無効にする) Application.DisplayAlerts = False Workbooks(tempFileNm).Close Application.DisplayAlerts = True Next End Sub
- ベストアンサー
- その他(業務ソフトウェア)
- VBAで複数シートをまとめたい
VBAを作るのは今回が初めてで行き詰ってしまいました。 フォルダ内の「.xlsx」4つのファイルのSheet1(4つともSheet1です) を統合.xLsmの1月シートのb2~値でコーピー貼り付けを行いたいのですが、 下記のものでやっていけば出来のかなと思ってますが、ご教授お願い致します。 Private Sub CommandButton1_Click() Dim sFile As String Dim sWB As Workbook, dWB As Workbook Dim dSheetCount As Long Dim i As Long Dim c As Long Dim ws As Worksheet Debug.Print (ws.Index) Const SOURCE_DIR As String = "C:\Users\KWEUSER\Desktop\data\" Application.ScreenUpdating = False '指定したフォルダ内にあるブックのファイル名を取得 For c = 1 To 4 sFile = Dir(SOURCE_DIR & "*.xlsx") 'フォルダ内にブックがなければ終了 If sFile = "" Then Exit Sub '集約用ブックを作成 Set dWB = Workbooks.Add '集約用ブック作成時のシート数を取得 dSheetCount = dWB.Worksheets.Count Do 'コピー元のブックを開く Set sWB = Workbooks.Open(Filename:=SOURCE_DIR & sFile) 'コピー元の c (1,2,3,4,5)シートを集約用ブックにコピー sWB.Worksheets(c).Copy After:=dWB.Worksheets(dSheetCount) 'シート名をファイル名に ActiveSheet.Name = sFile 'コピー元ファイルを閉じる sWB.Close '次のブックのファイル名を取得 sFile = Dir() Loop While sFile <> "" '集約用ブック作成時にあったシートを削除 Application.DisplayAlerts = False For i = dSheetCount To 1 Step -1 dWB.Worksheets(i).Delete Next i Application.DisplayAlerts = True '集約用ブックを保存して閉じる dWB.SaveAs Filename:="C:\Users\KWEUSER\Desktop\data\" & c & ".xlsx" dWB.Close Next Application.ScreenUpdating = False End Sub
- 締切済み
- Visual Basic
- VBAですべてのワークシートを処理したい
ブック内の全ワークシートに対して同じ処理をするために、 For each ワークシート in Worksheets ~処理~ Next ワークシート を使ってみたのですが、その時にアクティブになっているシートしか処理されません。たとえば次のようなシンプルなコードでも、同様です。何が抜けているのでしょうか。 Sub allworksheets() Dim WS As Worksheet For Each WS In Worksheets Range("a1") = "123" Next WS End Sub マクロの勉強を始めたばかりで、基本的なことでつまづいてます。よろしくお願い致します。
- ベストアンサー
- Visual Basic
- 特定のワークシートcsvファイル書き出しほか
エクセルブックの中身が、 1番目 graphシート 2番目から19番目 ワークシート で構成されているエクセルファイルが100個 AAAというフォルダに入っています。 それぞれのエクセルブックにあるシートを、ブックのファイル名にしたフォルダを作成し、その中にcsvで書き出すプログラムを作りました。 また、AAAのフォルダの1つ上のフォルダ(VBA実行するカレントフォルダ)には、テキストファイルもあり、作成されたフォルダに合わせてコピーするようにしています。 一応、期待通りの動作をしましたが、スッキリとしたプログラムとするために、アドバイスをいただけないでしょうか? また、できれば、それぞれのブックの2番目から7番目のワークシートのみをcsvファイルで書き出したいと思い、シートを2番目から順にアクティブにして書き出すように変更しても1番目のグラフシートからcsvになってしまいました。 特定のワークシートのみをcsvファイルで書き出すにはどのように書いたら良いでしょうか? よろしくおねがいしむす Sub ファイル一括作成() Application.ScreenUpdating = False '対象ブックの選択 'フォルダ内のブックを順次選択 Dim FolderPath As String Dim objFSO As Object Dim objBook As Object Dim objFiles As Object Dim objFile As Object Dim mysma4 As Object Set objFSO = CreateObject("Scripting.FileSystemObject") FolderPath = ActiveWorkbook.Path & "\AAA" Set objBook = objFSO.GetFolder(FolderPath) Set objFiles = objFSO.GetFolder(FolderPath).Files Set mysma4 = objFSO.GetFile(ActiveWorkbook.Path & "\fig_all.TXT") For Each objFile In objFiles If objFSO.GetExtensionName(Path:=objFile) Like "xlsx" Then 'ベースファイル名フォルダ作成&sma4ファイルコピー objFSO.CreateFolder Path:=FolderPath & "\" & objFSO.GetBaseName(objFile) mysma4.Copy Destination:=FolderPath & "\" & objFSO.GetBaseName(objFile) & "\fig_all.TXT" '各ファイルcsv書き出し Workbooks.Open objFile.Path For Each ws In Worksheets '各シートに対して処理を繰り返す ws.Activate 'ベースファイルと同じ階層に出力 ActiveWorkbook.SaveAs _ Filename:=FolderPath & "\" & objFSO.GetBaseName(objFile) & "\" & ws.Name & ".csv", _ FileFormat:=xlCSV Next ws ActiveWorkbook.Close SaveChanges:=False Else End If Next MsgBox "ファイル作成が完了しました。" Set objFSO = Nothing Set objBook = Nothing Set objFiles = Nothing Set mysma4 = Nothing Application.ScreenUpdating = True End Sub
- ベストアンサー
- Excel(エクセル)
- 質問させて頂きます。
質問させて頂きます。 マクロにて、特定フォルダ内の複数のxlsファイルを順次編集するため、 以下のコードを使用しています。 この度、"C:\第一営業部\"の下に、"C:\第一営業部\一課\"や、 "C:\第一営業部\三課\鈴木\"など、複数層のサブフォルダを増設し、従来通り "第一営業部"内のすべてのファイルを編集したいのですが、どのように記述を 変更すれば実現できるでしょうか?尚、上記の通り、サブフォルダの階層数は 一定ではありません。 お手数をおかけいたします。宜しくお願い申し上げます。 '--------------------------------------------------------- Dim fileNmCol As Collection 'ファイル名格納コレクション Dim folderPath As String 'フォルダのフルパス '作業用 Dim tempFileNm As Variant Dim fullPath As String Set fileNmCol = New Collection 'フォルダパス folderPath = "C:\第一営業部\" 'Dirにより、ファイル名を取得(xlsファイルのみ) 'フォルダ配下にあるファイル名を順次fileNmに格納する。 tempFileNm = Dir(folderPath + "*.xls", vbNormal) 'ファイル名をfileNmColに追加する Do While tempFileNm <> "" fileNmCol.Add (tempFileNm) tempFileNm = Dir() Loop 'ファイルの数だけ繰り返し For Each tempFileNm In fileNmCol 'ファイルのフルパスを設定指定して、Excelブックを開く fullPath = folderPath + tempFileNm Workbooks.Open fullPath '------------------------------------------------------- '(ここでファイルを編集する記述) '------------------------------------------------------- 'ファイルを閉じる(アラートを無効にする) Application.DisplayAlerts = False Workbooks(tempFileNm).Close Application.DisplayAlerts = True Next '-----------------------------------------------------------------
- 締切済み
- Visual Basic
- VBAで全てのワークシートに処理するとき
ブック内の全シートに、列を挿入しようとしたら、下の WS.Range("E1").Select の行で「Rangeクラスのselectメソッドが失敗しました」とエラーになります。 セルに入力する処理のときはこのパターンでできたのですが・・・いろいろ試してもわかりません T_T 何が必要でしょうか。 ----------------- Sub 列を挿入() Dim WS As Worksheet For Each WS In Worksheets WS.Range("E1").Select Selection.EntireColumn.Insert Next WS End Sub ----------------- よろしくお願い致します。
- ベストアンサー
- Visual Basic
- 選択されているシートを移動したい
一定ではない複数のシートがあり、 そのうちの右端の1枚は必ず「ファイル集計」というシートになっています。 この、ファイル集計以外のシートを 新しいブックを作って移動させるにはどうしたらいいでしょうか。 あくまでもファイル集計は元のブックに残し それ以外のシートを移動させたいのです。 Sub 入力データを保存して閉じる() Dim ファイルナンバー As String Dim 保存指定フォルダ2 As String Dim mySht As Worksheet With Application .DisplayAlerts = False For Each mySht In Worksheets If mySht.Name <> Sheets("ファイル集計").Name Then mySht.Select False Next .DisplayAlerts = False End With ↑このようなかたちで、選択するところまでは出来たのですが それを新しいブックに移動させるのがうまくいきません。 ChDir "C:\計算\" & 保存指定フォルダ Activesheets.Move ActiveWorkbook.SaveAs Filename:=ファイルナンバー & "D.xls" Application.DisplayAlerts = False ActiveWorkbook.Close end sub とすると、選択されているシートのうち1枚しか移動できないのです。 教えてください。
- ベストアンサー
- Visual Basic
- 全てのシートに同じ条件で処理をし保存するマクロ
いつも識者の皆様にはお世話になっております。 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 識者の皆様、どうかご回答よろしくお願いいたします。
- ベストアンサー
- その他MS Office製品
- 複数のエクセルシートをまとめるマクロ
下は複数のエクセルファイルを一つにするマクロですが、100万件を超えるためcsvで保存するようにするにはどこを変更したらよいでしょうか。 よろしくお願いします。 Sub Sample() Dim t As Single Dim strPath As String Dim strFileName As String Dim WB1 As Workbook Dim WS1 As Worksheet Dim WS2 As Worksheet Dim lngRowCount As Long 'A列に値が入っているデータ数 t = Timer 'まとめたいシート Set WS2 = ThisWorkbook.Worksheets(1) strPath = ThisWorkbook.Path strFileName = Dir(strPath & "\*.xls*") Do While strFileName <> "" If strFileName <> ThisWorkbook.Name Then Set WB1 = Workbooks.Open(strPath & "\" & strFileName) Set WS1 = WB1.Worksheets(1) With WS1.Range("A1") lngRowCount = .Worksheet.Cells(.Worksheet.Rows.Count, .Column).End(xlUp).Row - .Row If lngRowCount >= 1 Then With .Resize(lngRowCount, 14).Offset(1) .Copy WS2.Range("A" & WS2.Rows.Count).End(xlUp).Offset(1) End With End If End With WB1.Close False End If strFileName = Dir Loop MsgBox "まとめ処理をしました。処理時間 " & Format((Timer - t) / 60 / 60 / 24, "h:mm:ss") End Sub
- ベストアンサー
- Excel(エクセル)
- Excelマクロ 複数のシート検索・選択して新しいブックにコピー
何方か、回答をお願いします。 下記のマクロは、任意のフォルダに有る全てのxlsファイルのシート名が”Data”のみ 新しいブックにコピー(シート名は、元のファイル名に変更)をしていくマクロですが、 条件が下記のように変更になりました。 シート名は、DataとAppend*(*は数字で1~99)(Appendの数は毎回ばらばらでAppend シートその物が無い場合も有ります。)を選択して新しいブックにコピー (元のシート名の前に元のファイル名を足して新しいシート名は”ファイル名Append2” こんな感じにしたいです。)したいのですがどの様なマクロを書けば良いのか教えて 下さい。 Sub test-xls版() Dim myPName As String Dim myKAKUCHOSI As String Dim myPATHNAME As String Dim myLName As String Dim wb As Workbook Dim wb_New As Workbook Dim N As Byte Dim ws As Worksheet Dim myFN As String myPName = Application.GetOpenFilename("測定データ(*.xls;*.csv),*.xls;*.csv") If myPName = "False" Then Exit Sub Application.ScreenUpdating = False Set wb_New = Workbooks.Add myKAKUCHOSI = Right(myPName, 4) myPATHNAME = CurDir myLName = Dir("") N = Len(myLName) myFN = Left(myLName, N - 4) Do While myLName <> "" Workbooks.OpenText Filename:=myPATHNAME & "\" & myLName, DataType:=xlDelimited, Tab:=True, Comma:=True, Space:=True N = Len(myLName) myFN = Left(myLName, N - 4) Sheets("Data").Select 'csvの場合無し Set wb = ActiveWorkbook wb.ActiveSheet.Copy after:=wb_New.Sheets(wb_New.Worksheets.Count) Worksheets("Data").Name = myFN 'csvの場合無し wb.Close savechanges:=False myLName = Dir() Loop Application.ScreenUpdating = True Exit Sub
- ベストアンサー
- オフィス系ソフト
補足
たしかに! とおもってやってみましたがダメでしたorz