- ベストアンサー
自動でマクロファイルにデータを入力し保存したい
- 大量のデータを入力し、保存する作業を自動化したいです。
- 手作業での入力ミスを防止するため、自動化したいです。
- マクロファイルにデータを入力し、別名で保存する作業を効率化したいです。
- みんなの回答 (37)
- 専門家の回答
質問者が選んだベストアンサー
> 装置の稼働率-共用率ファイル中に連番を付ける事は出来ませんでした。 連番ではなく もし、「装置の稼働率-共用率_xxxxxx-xxxxxx.xlsx」にデータ転記後、A列、B列、C列のいずれかが「空白になる」可能性がある場合、データが上下デコボコに転記されてしまいます。 たとえばB列(グループ)に空白があった場合 A, B, C, D, E列 あ,い,う,え,お 1件目 か,空,く,け,こ 2件目 さ,し,す,せ,そ 3件目 上記のように転記されるのが本来ですが 空白があると下記のように転記されてしまいます。 A, B, C, D, E列 あ,い,う,え,お 1件目 か,し,く,け,こ 2件目 さ,空,す,せ,そ 3件目 > ST名 グループ 装置ID(資産番号) 上記がA列、B列、C列で空白になる可能性がないのでしたら変更しなくてもいけます。 先日「#DIV/0!」の件があったので、上記のセルで空白のセルが存在する可能性もあるのかなと思っての変更提案です。 連番は手作業でお願いします。
その他の回答 (36)
- kkkkkm
- ベストアンサー率66% (1719/2589)
全てマクロで実行の場合 並び替えが違うと駄目だと思いますから、マクロの記録で「ステーション、グループ、装置ID、利用日順に並べ替え」をして記録されたコードを教えてください。 > 同じ装置ID分を、マクロファイルの[カテゴリーログ]シートへコピペする。 という事ですので、装置ID以外が違っていても同じ塊としてコピペすると考えてよろしいですか。 上から検査して装置IDが変化した時点で別の塊に移ったと考えます。
- kkkkkm
- ベストアンサー率66% (1719/2589)
①ステーション、グループ、装置ID、利用日順に並べ替えをした全機器3ヶ月が入っているデータファイルから、 同じ装置ID分を、マクロファイルの[カテゴリーログ]シートへコピペする。 この後に 1つのシートがどこなのか不明ですが、250個のA2~AA2を同じシート(第三のブックでしょうか)にコピペするのでしたら コピペした時点の[Summary3]のシート内の稼働率等の値の行(A2~AA2)を、1つのシートへコピペして追記。 を実行して 確認用に上記のマクロファイルを『ステーション_グループ_装置ID_装置名.xlsx』の名前でホルダーへ保存する。 という流れを250回繰り替えす、で良さそうな気がするのですがいかがでしょう。 回答No.2は 手作業でデータファイルからマクロファイルへ必要なデータをコピーし、現状のマクロを実行後(現状のマクロが何をするのか不明でしたのでここでの実行を考えてました)、その後回答2のコードを実行するという事を考えてました。 手作業の中で「別名で保存」「ファイル名の記載」が一番面倒だと思ったので。 回答2のコードは以下の単純な動作をします(ブック全体保存なのでTest()の方です) マクロファイルを ステーション_グループ_装置ID_装置名.xlsx で保存(ファイル名誤記が防げます) 実際のマクロファイル名.xlsm を再度開きます(コピーしたデータはマクロファイルには保存されていないので削除コードを実行する必要はありません) ステーション_グループ_装置ID_装置名.xlsx を閉じます コードは実際のマクロファイルに記載して実行してください。 「ステーション_グループ_装置ID_装置名.xlsx」は「実際のマクロファイル」と同じフォルダに保存されます。 とりあえず、マクロファイルが思った状態で保存されるかどうか 一操作分 手作業でデータファイルのデータをマクロファイルへコピペ 回答No.2のマクロを実行 で試してみてください。 よければ冒頭の手順(手順がよろしければ)を全てマクロで実行のコードにチャレンジしてみます。 「実際のマクロファイル名.xlsmを再度開く」は行わない方法になります。
補足
先程、回答7で補足の記載をさせて頂きましたが、 2つほど更に、ご返答させて頂きます。 ④はい、下記の通りで良いはずです。 『装置ID以外が違っていても同じ塊としてコピペすると考えて宜しいか?』 ⑤大変お手数をお掛けしますが、下記について可能でしたら是非お願いいたします。 『全てマクロで実行のコードにチャレンジしてみます』
- kkkkkm
- ベストアンサー率66% (1719/2589)
回答No.2の補足、訂正です 何かしらの計算をするマクロを実行後に回答No.2のマクロを実行してください。 また、「カテゴリーログ」以外のシートを開いているかもしれませんから 念のために「カテゴリーログ」のセルの値を取り込むように限定して 以下の部分を (Test()、Test2()どちらも) NewBookName = Range("C4").Value & "_" & Range("D4").Value & "_" & Range("A4").Value & "_" & Range("B4").Value & ".xlsx" こちら↓に変更してください。 Rangeの前に「.」があるので3行ともコピペしてください。 With Worksheets("カテゴリーログ") NewBookName = .Range("C4").Value & "_" & .Range("D4").Value & "_" & .Range("A4").Value & "_" & .Range("B4").Value & ".xlsx" End With
補足
早速のご教示、心より感謝致します。 何時ものように、説明が足りて無く申し訳ありません。説明にも誤りが有りましたので、やりたい事を再度記載させて頂きました。ご不明点がありましたら、再度ご説明させて頂きますので、何卒宜しくお願い致します。 ・マクロファイルには、下記に記した、[カテゴリーログ]シートの値を取り消すマクロが組み込まれているだけです。 マクロファイル内には複数のシートに関数式が組み込まれており、[カテゴリーログ]シートのセルA5~AO5以降に、装置データの同じ装置ID分のみを値張り付けで入力すると、[Summary3]のシートに稼働率等の計算値が書き込まれる仕組みになっています。 ・[Summary3]のシートには、タイトル名と値の2行が記載されます。 実は、最後に下記の(A2~AA2)の機器250台分の値のみが欲しいのです。 St名、装置ID、装置名、装置稼働率、その他のタイトルが続く・・・・・・・(A1~AA1) 分析St分析2、AB0013、フェム装置、82%、53%、その他の値が続く・・・・・・(A2~AA2) ・今現在、手作業で実施して作業手順は、①~③です。非常時手間がかかります。 ①ステーション、グループ、装置ID、利用日順に並べ替えをした全機器3ヶ月が入っているデータファイルから、 同じ装置ID分を、マクロファイルの[カテゴリーログ]シートへコピペする。 ②上記のマクロファイルを『ステーション_グループ_装置ID_装置名.xlsx』の名前でホルダーへ保存する。 ※上記①、②を250回(機器の台数分)繰り繰り返します。 ※値確認の為、250個の『ステーション_グループ_装置ID_装置名.xlsx』は保存しておきます。 ③250個のステーション_グループ_装置ID_装置名.xlsxの[Summary3]のシート内の稼働率等の値の行(A2~AA2)を 手作業で、1つのシートへコピペして追記します。 ・ご質問があります。 回答2でご教示頂いたやり方は、新しいExcelファイル上でVBAエディタを開いて、ご教示頂いたVBAのスクリプトを 入力後、実行すればよろしいでしょうか? その場合、"\実際のマクロファイル名.xlsm"とデータファイルは同じホルダーに入っていればよろしいでしょうか? 装置毎のデータは手動でマクロファイルへの入力が必要でしょうか? 【以下はマクロファイル内のマクロの記載になります】 Option Explicit Sub データ削除() ' ==================================== ' データ削除 Macro ' シート「カテゴリーログ」のデータを全て削除する。 ' 2022/03/24更新 ' ==================================== '■(ダイアログボックスを表示して、実行するか否か確認する) Dim rc As VbMsgBoxResult rc = MsgBox("マクロを実行しますか?", vbYesNo + vbQuestion, "■■■~Logデータを削除します~■■■") If rc = vbYes Then 'next Else MsgBox ("処理を中止します"), vbCritical End End If '■ (Logデータを削除します。20000行まで。) Sheets("カテゴリーログ").Select '←2022/03/24追加 Range(Selection, Selection.End(xlDown)).Select Range("A5:AK20004").Select '←2022/03/24変更 Selection.ClearContents Range("A1").Select End Sub
- kkkkkm
- ベストアンサー率66% (1719/2589)
回答No.2の補足です。 データファイルの全ての行にたいして コピペ 現状のマクロ No.2のマクロ と連続して行うマクロも可能ですが、ブックを開いたり閉じたりを連続で実行するとエラーになる可能性もありますし、一つ一つ確認して進む方が間違いがないような気もします。
- kkkkkm
- ベストアンサー率66% (1719/2589)
データファイルの各行をマクロファイルのA4にコピペし、何かしらの計算をするマクロを実行後にそのマクロファイルを別名(指定したセルの内容を繋げた名前)のマクロ無しで保存するという動作だとしたら。 質問のデータのデータファイルの2行目をマクロファイルのA4にコピーしたとした場合 新規ファイル名が 融合St_001F_AB0016_AB6連装置.xlsx となります。 '↓元のブック全体をマクロなしで保存するマクロです Sub Test() Dim wb As Workbook Dim NewBookName As String Set wb = ThisWorkbook NewBookName = Range("C4").Value & "_" & Range("D4").Value & "_" & Range("A4").Value & "_" & Range("B4").Value & ".xlsx" 'マクロ無しのブックに保存できないというメッセージが出ますがOkしてください。 wb.SaveAs ThisWorkbook.Path & "\" & NewBookName, FileFormat:=xlOpenXMLWorkbook MsgBox "ファイル名を「 " & NewBookName & " 」として保存しました", vbInformation '↓元のマクロブックを開きます ブック名は実際のブック名にしてください Workbooks.Open ThisWorkbook.Path & "\実際のマクロファイル名.xlsm" wb.Close '←名前を変更し保存したブックを閉じたくない場合はここを削除 Set wb = Nothing End Sub '↓カテゴリーログのシートだけ新規ブックとして開いて保存するマクロです Sub Test2() Dim wb As Workbook Dim NewBookName As String Worksheets("カテゴリーログ").Copy Set wb = ActiveWorkbook NewBookName = Range("C4").Value & "_" & Range("D4").Value & "_" & Range("A4").Value & "_" & Range("B4").Value & ".xlsx" wb.SaveAs ThisWorkbook.Path & "\" & NewBookName, FileFormat:=xlOpenXMLWorkbook MsgBox "別ファイル「 " & NewBookName & " 」として保存しました", vbInformation wb.Close '←新規ブックを閉じたくない場合はここを削除 Set wb = Nothing End Sub
- m_and_dmp
- ベストアンサー率54% (987/1817)
「機器毎にデータを入力し、計算する」ファイルとは別の場所(個人用マクロブックが良いとおもいます。)に次のマクロを登録します。 ------------------------------------------- Sub ChangeFileNameAndSave() pPATH = ActiveWorkbook.Path 'ファイルのパスを取得 dFN = ActiveWorkbook.Name 'ファイル名を取得 dFN = pPATH & "\" & dFN 'デフォルト ファイル名を作成 FN = InputBox("ファイル名を入力してください。", , dFN) 'ファイル名の入力を促す。デフォルト ファイル名が表示されている。 ActiveWorkbook.SaveAs (FN) '指定したファイル名でファイルを保存 ' 'Bookを閉じる。 ActiveWorkbook.Close ' 'エクセルを閉じる 'Application.Quit ' End Sub ------------------------------------------- 「機器毎にデータを入力し、計算する」ファイルの作業が終了したら、上記のマクロを実行すると、ファイル名を聞いてきますので、新しいファイル名を入力して続行します。 まずは、試してください。作業するファイルは何でも良いので、適当な試験用ファイルを作って試してください。
お礼
大変お世話になっております。 最終的な確認は一応完了しました。 この質問については、これで完了と致します。 今回の質問から困った事、分からない事が新たに発生した場合は、再度ご質問をさせて頂きますので、何卒よろしくお願い申し上げます。 最終までご教授下さり、本当にありがとうございました。
補足
大変お世話になっております。 更にかみ砕いたご教示ありがとうございました。 下記、理解しました。 連番は手作業で作成する事に致します。 『先日「#DIV/0!」の件があったので、上記のセルで空白のセルが存在する可能性もあるのかなと思っての変更提案です。』 では、回答35でご教示頂いたスクリプトの箇所は、元へ戻した方がよろしいでしょうか?