No.2ベストアンサー
- 回答日時:
こんにちは、
マクロはどの程度、知識がありますか?
>これらをマクロにしたいのですが、どのようにすれば宜しいでしょうか。
作業完了報告書から処理を行う場合、
処理の流れとしては、台帳.xlsxを取得して、同時にシートを取得
そこに対して作業完了報告書の内容を書き込みします。
下記に(掲示図の)サンプルを書きますが、
おそらく他の処理も必要になるのではと思います。
ある程度、VBAの知識をお持ちであると想定して書いていますので、悪しからず。
>できれば、作業完了報告書に登録のマクロボタンをつけて、
>報告書の記入を終える→登録ボタンを押す→台帳へ自動転記(最下行)
です。
サンプルでは、台帳.xlsxは、デスクトップに保存されているものとしています。
違うようであれば、実際のパスに書き換えてください。
シート名は、共にSheet1です。
' .Save
' .Close
の ' を削除すると台帳.xlsxは保存して閉じられます。
処理の流れ
パス、ファイル名などを変数に代入
ターゲット(台帳.xlsx)が指定のパスに存在するか検証
有った場合、既に開かれているか開かれていないか検証
開いていなければ、開いて変数にセット
シートは1枚とは限らないので、シート名Sheet1をアクティブにする
自ブックの対象シート、対象セルの値を
セットした台帳.xlsxブックのシート、セルに書き込み
Sub Output_FileData()
Dim MyBk As Workbook, TrgBk As Workbook
Dim TrgRow As Long
Dim TrgBkname As String, Path As String, FileFllpath As String
Set MyBk = ThisWorkbook
TrgBkname = "台帳.xlsx"
Path = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\"
FileFllpath = Path & TrgBkname
'// 存在チェック
If (Dir(FileFllpath) <> "") Then
Else
MsgBox ("指定パスには、対象ブックがありません。")
Exit Sub
End If
On Error Resume Next
Open FileFllpath For Append As #1
Close #1
If Err.Number > 0 Then
'// 既に開かれている場合
Set TrgBk = Workbooks(TrgBkname)
Sheets("Sheet1").Activate '台帳のシート名
Else
'// 開かれていない場合
Set TrgBk = Workbooks.Open(FileFllpath)
Sheets("Sheet1").Activate '台帳のシート名
End If
Application.ScreenUpdating = False
Application.DisplayAlerts = False
With TrgBk
With .ActiveSheet
TrgRow = .Cells(Rows.Count, "A").End(xlUp).Row + 1
.ActiveSheet.Cells(TrgRow, "A").Value = MyBk.Sheets("Sheet1").Range("E2").Value
.ActiveSheet.Cells(TrgRow, "B").Resize(, 2).Value = Application.Transpose(MyBk.Sheets("Sheet1").Range("B2:B3").Value)
End With
' .Save
' .Close
End With
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
(MyBk.Sheets("Sheet1")のSheet1は、作業完了報告書のシート名)
書き込んでいるのは、この2行
.ActiveSheet.Cells(TrgRow, "A").Value = MyBk.Sheets("Sheet1").Range("E2").Value
.ActiveSheet.Cells(TrgRow, "B").Resize(, 2).Value = Application.Transpose(MyBk.Sheets("Sheet1").Range("B2:B3").Value)
手直しが必要かもしれませんが、取敢えず
Qchan1962さん、こんにちは。
マクロは勉強中でございます。
教えていただいたマクロもだいたい理解はできるのですが、
台帳の方に記載ができませんでした。
[Application.ScreenUpdating = False]から
上手く作動していないのかなと思われます。
教えていただいたマクロを元に、考えてみようと思います。
ありがとうございました。
No.6
- 回答日時:
TrgBk.Sheets("台帳").Cells(TrgRow, "A").Value = MyBk.Sheets("Sheet1").Range("E2").Valueとかいているのなら、
With TrgBk、With .ActiveSheet 及び閉じる
End With
End Withは不要です。
必須
シート名を変更している場合、Sheets("Sheet1").Activateは、エラーになります。
従って、返信のコードの場合、Sheets("台帳").Activate とする必要があります。
'台帳のシート名は、2か所
サンプルのコードは、ファイルが開いているかどうかをエラー発生で確認して
分岐している為、On Error Resume Nextを実行しています。
なので、途中で他のエラーが発生してもスルーして実行されます。
なので、改修しにくいかも知れません。
試しに
On Error Resume Next を 'On Error Resume Next として
台帳ブックを閉じ マクロを実行してみてください。
台帳ブックが開いていると Open FileFllpath For Append As #1 で
エラーになります。閉じていれば、エラー無く実行できますが、
他の箇所に問題があれば、エラーが返されますので、そのコードをご確認ください。
ちなみに
MyBk.Sheets("Sheet1").Range("B2").Value
MyBk.Sheets("Sheet1").Range("B3").Value
このセルアドレスは、ご質問の添付図とは異なりますので、ご確認ください。
MyBkは、Set MyBk = ThisWorkbook なのでマクロが実行されているブックです。確実に作業完了報告書ブックがアクティブな状態からマクロを実行するのであれば、ThisWorkbookをActiveWorkbookに変更した方が良いかもしれません。
今後も処理内容を変更(追加)したい場合、このあたりの処理を理解する事が
必要になりますので、頑張ってください。
いろいろとお世話をお掛け致しました。
何故、「1」が入力されていたのか不明ですが、
無事に自動転記することが出来ました。
本当にありがとうございました。
No.5
- 回答日時:
#4です
野暮用で時間がないので、確認だけ、
先ず、参照元のセルアドレス、入力先のセルアドレスを確認してください。
Resizeなどが難しくしている場合は、1セルずつ=で結んで試してください。
また、TrgRow = .Cells(Rows.Count, "A").End(xlUp).Row + 1 最終行プラス1
、新規行を調べている列は、台帳.xlsxのSheet1のA列です。
出力先を他の列にした場合は、最終行を取得できる列に変更してくださいね。
>担当欄(C2)に「日付」と入力されます。
TrgRow = .Cells(Rows.Count, "C").End(xlUp).Row + 1
最終行に増えていくのはできました、ありがとうございます。
セルの確認をしているのですが、
台帳のブックの会社欄(B2)に「1」と入力されるだけです。
そもそも、この「1」がどこからでてきたのかわからず、
調べております。
Application.ScreenUpdating = False
Application.DisplayAlerts = False
With TrgBk
With .ActiveSheet
TrgRow = TrgBk.Sheets("台帳").Cells(Rows.Count, "A").End(xlUp).Row + 1
TrgBk.Sheets("台帳").Cells(TrgRow, "A").Value = MyBk.Sheets("Sheet1").Range("E2").Value
TrgBk.Sheets("台帳").Cells(TrgRow, "B").Value = MyBk.Sheets("Sheet1").Range("B2").Value
TrgBk.Sheets("台帳").Cells(TrgRow, "C").Value = MyBk.Sheets("Sheet1").Range("B3").Value
End With
End With
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
このような、マクロで試してます。
(わかりにくいので、台帳のSheet1は台帳に名前を変更いたしました。)
No.4
- 回答日時:
おはようございます。
手直しをさせて申し訳ありませんが、参考なので、ご理解ください。
ご自身でその修正をして頂ければ、転記処理を増やす等する時も容易に出来ると思いますので、
>何回マクロを実行しても下の行に増えなかったです。
With TrgBk
With .ActiveSheet
TrgRow = .Cells(Rows.Count, "A").End(xlUp).Row + 1
Cellsの前の . ありますか? With TrgBk も消してはダメですよ。
手直しが上手くいかない場合は、再度追記してください。
ResizeやApplication.Transposeが混乱を招いているのであれば
.Cells(TrgRow, "B").Value =MyBk.Sheets("Sheet1").Range("B2").Value
.Cells(TrgRow, "C").Value =MyBk.Sheets("Sheet1").Range("B3").Value
と同じです。
(参考なので、コード内のセルアドレスの場合)
おはようございます。
いえ、教えてくださるだけでもありがたいので、
手直し等はお気になさらないでください。
消してないのですがうまくいきません。
おっしゃる通り、
「.Cells(TrgRow, "B").Value =MyBk.Sheets("Sheet1").Range("B2").Value」
に変えてみたのですが、
会社欄(B2)に「1」、担当欄(C2)に「日付」と入力されます。
どこから「日付」がきているのか、日付と入力いているセルを
他の文字に変えてみたのですが、「日付」と入力されてしまいます。
そして、やはり、2行目以降に入力されませんでした。
他の方法も、探ってはみているのですが、「1」が入力されたりで・・・・・。
セル内の文字を変更して対応されなかったりと、苦戦しております。
No.3
- 回答日時:
#2です。
失礼しました。
>だいたい理解はできるのですが、
良かったです。
With .ActiveSheetを後入れして消したつもりでした。
該当部分を下記の様に訂正します。
With .ActiveSheet
TrgRow = .Cells(Rows.Count, "A").End(xlUp).Row + 1
.Cells(TrgRow, "A").Value = MyBk.Sheets("Sheet1").Range("E2").Value
.Cells(TrgRow, "B").Resize(, 2).Value = Application.Transpose(MyBk.Sheets("Sheet1").Range("B2:B3").Value)
End With
度々ありがとうございます。
試してみたのですが、
台帳の会社と担当欄のみ(B2,C2)に「1」と入力されるだけでした。
また、何回マクロを実行しても下の行に増えなかったです。
もう少し考えてみようと思います。
No.1
- 回答日時:
タマタマポチさん、
早速のご回答ありがとうございます。
作業完了報告書は作業を完了する度に発行されるので、別ファイル参照でリンクを貼るとなると、毎回リンクを繋げなくてはならないので、転記するのと変わらなくなります。又、リンクが切れることがあるので、あまり使用したくないのが現状です。
誠に申し訳ございません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/21 09:28
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/01/23 11:02
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/02/21 11:19
- Excel(エクセル) マクロで謎の現象が起きていて困ってます。 エクセルで作ったボタンを押すとマクロが動いて処理をしてくれ 3 2023/06/22 17:28
- Excel(エクセル) 記録マクロのみでできますか? 7 2022/08/07 20:38
- Excel(エクセル) 【マクロ】プリントスクリーンした画像をエクセルに貼付して印刷したい 6 2022/11/30 20:11
- その他(ソフトウェア) LDPlayerのマクロの編集方法を知りたい 1 2023/03/04 11:46
- Visual Basic(VBA) マクロで最終行を取得したい 4 2023/05/28 12:14
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/20 14:46
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/21 13:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBAでのWorksheet_Change...
-
Excelで数字を入れたら対応する...
-
エクセル シート内の一番下のセ...
-
Excelのシート上のShapeにイベ...
-
フォルダ内にある全ファイルの...
-
セルの一部分だけを太字にする方法
-
エクセルで複数のシートのクリ...
-
【エクセル】「実行時エラー’10...
-
エクセルファイルを開いた回数...
-
エクセルのチェックボックス誤作動
-
EXCELのダイアログシートって、...
-
Excelでセル内の文字をファイル...
-
エクセルのマクロ実行後にカー...
-
【エクセルVBAについて】セ...
-
前月分を次月シートに繰越でき...
-
エクセルで○をつけるマクロ設定
-
長い時間かかるマクロが実行中...
-
任意のセルでマクロを実行させたい
-
エクセルで特定の行だけ行削除...
-
複数シートのグループ化ができ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBAでのWorksheet_Change...
-
Excelで数字を入れたら対応する...
-
エクセルで複数のシートのクリ...
-
エクセルファイルを開いた回数...
-
Excelのシート上のShapeにイベ...
-
エクセルで特定の行だけ行削除...
-
長い時間かかるマクロが実行中...
-
エクセル シート内の一番下のセ...
-
【エクセル】フリーワード検索...
-
Excelでセル内の文字をファイル...
-
【エクセル】「実行時エラー’10...
-
シートではなくBOOK間で重複し...
-
フォルダ内にある全ファイルの...
-
EXCELのダイアログシートって、...
-
エクセル:セル内の文字列の最...
-
自分の専門分野の仕事。初見で...
-
セルの一部分だけを太字にする方法
-
エクセルで○をつけるマクロ設定
-
エクセル マクロ 一定時間おき...
-
Excelにて、同じ画像を複数のセ...
おすすめ情報