- ベストアンサー
書類と業務管理をVBAで出来ますか?
宜しくお願いします。 たとえば、第三者機関へ委託業務する際【申請書】を作成します。この作成と同時に【社内稟議書】のフォーマットが強制的に画面に現れ、必要項目に記入しないと、依頼書もプリントアウトできない仕組みを求めています。 できれば、フォーマットは<Word>もしくは<Excel>いずれでも構わない方が良いのですが、VBAなど(Excelに限られる?)が最適な為、片方に限定されても結構です。 =類似の管理= たとえば、図面管理で<図面原本 → 図面副本 → 配布先 → 受領確認 → 旧図取扱い有無>の一連管理作業も、次の作業を忘れず完了確認ができる仕組み(VBA?)も、探しています。 質問が2種類になった気がしますが、目的は、 『あるフォーマットに記入した場合、忘れずに確実にその一連の管理業務が完了できることを<Word>や<Excel>で組立てたい』と言うことになります。 因みに、VBAなどは全くの初心者です。宜しくお願い致します。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
全ての動作について一括解決は難しいですね。 やることが多すぎます。せめて分割できませんか? Excelでやるとして全てのシートのテンプレートがあるという前提で、 1.何かボタンを押す(申請書作成開始) 2.全コマンドバーのVisibleをFalseにする。後で復元するために消したものは覚えておく。 3.Ctrlキーを無効にする。 4.テンプレートを別ブックにコピー 5.シートにボタンを生成し、チェックするマクロを登録 6,ボタンを押してチェックがOKなら、ボタンを削除して次のシートに遷移する。NGなら再入力を求める 7.5-6を繰り返し全書類の処理が終了したら、コマンドバーを復元し、Ctrlキーを有効にして印刷する という感じの処理を行えばできるんでしょうけど。。 チェックする部分なんて全部のシートで違ってくるんでしょうし、 2~7まで一つ一つ、何これどうやるの?って感じだと、ここで全てを答えるのは難しいと思います。
その他の回答 (6)
- kenpon24
- ベストアンサー率64% (66/102)
っと、完了処理でシート見出しを戻し忘れました。 Privateでもよかったし。 Private Sub 完了処理() Dim ws As Worksheet Dim wname As String '保存 wname = Application.GetSaveAsFilename(既定ファイル名, "Excel 97-2003ブック, *.xls") If wname <> "False" Then Workbooks(WbName).SaveAs Filename:=wname End If MsgBox "印刷を開始します" For Each ws In Workbooks(WbName).Worksheets ws.Activate '印刷プレビュー ActiveWindow.SelectedSheets.PrintPreview Next 'シート見出しを戻す ActiveWindow.DisplayWorkbookTabs = True Call 設定復元 MsgBox "完了しました。お疲れ様でした" End Sub
お礼
前回答に引き続き、丁寧なご指導を頂き、誠に有難うございます。 言うまでも無く、私に至ってはこの域はお手上げでございます。 友人にこの回答を見てもらっています。が、少々の知識を持つ友人も「難度が高い」の呟き....(^^;。 んーっ!まだまだ諦めませんよーーー!ネット上で探したって、ここまで詳しい内容に近付ける筈ありませんから。 脳みそに汗かきながら、じっくり、ゆっくり、理解しながら組立ててみます。 本当に、有難うございました。
- kenpon24
- ベストアンサー率64% (66/102)
No.2です。 質問者さんの周りに経験のある方がいてよかったですね。 ちょっと誤りがあったので訂正します。 ctrlキーを無効にすると書いてしまいましたが、 実際にはctrl+Pキー(印刷のショートカット)を無効にします。 簡単に流れを書くと、(ほんの1例ですのでこのとおりにする必要はまったくありません) 元になるブックがあるとします。このブックには、 申請書、社内稟議書などのシートがあるとします。(図面管理に関してはイメージがいまいち掴めないのでパスします) 別のシートにボタンがあり、ボタンを押すと「業務委託」フローを開始するものとします。 コードはこんな感じで。わからなければ友人に見てもらってください。 ちなみにExcel限定 'モジュール変数定義 Private my_CommandBars() As String Private CommandBarCnt As Integer Private WbName As String Sub Auto_Close() Call 設定復元 End Sub '業務委託の場合。他の処理をしたいときはこれと同じようなものを作る Public Sub 業務委託() Dim TmpBar As CommandBar CommandBarCnt = 0 '他の項目にバグがあって中断してしまうと、コマンドバーを戻すのが面倒なので、最後にコメントをはずして実装する ' For Each TmpBar In Application.CommandBars ' If TmpBar.Visible = True Then ' '表示されているコマンドバーの名前格納 ' ReDim Preserve my_CommandBars(CommandBarCnt + 1) ' my_CommandBars(CommandBarCnt) = TmpBar.Name ' CommandBarCnt = CommandBarCnt + 1 ' 'ツールバーを無効にする ' TmpBar.Enabled = False ' End If ' Next 'Ctrl+Pを無効にする Application.OnKey "^p", "" '申請書シートを新しいブックにコピー Worksheets("申請書").Copy '新しく作ったブックの名前を格納 WbName = ActiveWorkbook.Name '社内稟議書シートを作ったブックにコピー ThisWorkbook.Worksheets("社内稟議書").Copy after:=Workbooks(WbName).Sheets("申請書") 'シート見出しを消す ActiveWindow.DisplayWorkbookTabs = False With Workbooks(WbName) .Worksheets("申請書").Activate Application.Goto Range("A1") End With Call 項目チェックバー("申請書チェック") End Sub Public Sub 設定復元() Dim TmpNum As Integer '無効にしたCtrl+Pを有効にする Application.OnKey "^p" If CommandBarCnt <> 0 Then For TmpNum = 0 To CommandBarCnt - 1 '無効にしたツールバーを元に戻す Application.CommandBars(my_CommandBars(TmpNum)).Enabled = True Next TmpNum Erase my_CommandBars CommandBarCnt = 0 WbName = "" End If End Sub 'チェックボタンの生成 Private Sub 項目チェックバー(st As String) Dim mytoolbar As CommandBar Dim check_Button As CommandBarButton On Error Resume Next Application.CommandBars("Check_ToolBar").Delete Set mytoolbar = Application.CommandBars.Add(Name:="Check_ToolBar" _ , Position:=msoBarFloating, MenuBar:=False, Temporary:=True) Set check_Button = mytoolbar.Controls.Add(Type:=msoControlButton, Before:=1, Temporary:=True) With check_Button .Caption = st .Style = msoButtonCaption .OnAction = st End With mytoolbar.Visible = True 'ツールバーを表示 End Sub 'チェックしたときに色を変える関数 Private Sub チェック(ref As String, ByRef ChkFlag As Boolean) If Range(ref) = "" Then Range(ref).Interior.ColorIndex = 3 '赤 ChkFlag = True Else Range(ref).Interior.ColorIndex = xlNone '色なし End If End Sub '申請書の入力項目チェック Public Sub 申請書チェック() Dim ChkFlag As Boolean ChkFlag = False '入力箇所のチェック Call チェック("A1", ChkFlag) Call チェック("E1", ChkFlag) If ChkFlag = True Then MsgBox "未入力の項目があります" Else On Error Resume Next Application.CommandBars("Check_ToolBar").Delete With Workbooks(WbName) .Worksheets("社内稟議書").Activate Application.Goto Range("A1") End With Call 項目チェックバー("社内稟議書チェック") End If End Sub Public Sub 社内稟議書チェック() Dim ChkFlag As Boolean ChkFlag = False Call チェック("B1", ChkFlag) Call チェック("D1", ChkFlag) If ChkFlag = True Then MsgBox "未入力の項目があります" Else On Error Resume Next Application.CommandBars("Check_ToolBar").Delete Call 完了処理 End If End Sub Public Sub 完了処理() Dim ws As Worksheet Dim wname As String '保存 wname = Application.GetSaveAsFilename(既定ファイル名, "Excel 97-2003ブック, *.xls") If wname <> "False" Then Workbooks(WbName).SaveAs Filename:=wname End If MsgBox "印刷を開始します" For Each ws In Workbooks(WbName).Worksheets ws.Activate '印刷プレビュー ActiveWindow.SelectedSheets.PrintPreview Next Call 設定復元 MsgBox "完了しました。お疲れ様でした" End Sub
- kuma56
- ベストアンサー率31% (1423/4528)
どの程度のものを求めるかによって、当然難しさの度合いも違ってきます。 質問文の始めにある【申請書】と【社内稟議書】を同時に作る件にしても、単にPC操作に不慣れな人でも間違いなく両方ともプリントアウトできる・・・っと言うだけならそれほど難しくはないでしょう。 エクセルを使うならば、データ入力用のシートと【申請書】・【社内稟議書】の印刷用のシートを分けておいて、入力用シートにデータを入力しないと印刷用シートには反映されないようにしておけばいいでしょう。 入力用シートには、特に重要な必須項目などに条件付き書式を設定して、データ未入力だとセル背景色が赤になるなどしておけば、入力時の黙示チェック効果が得られます。 印刷用シートには、IF関数式で入力用シートにデータがなければ表示しないようにしておくなど工夫すれば、尚いいでしょう。 印刷は、入力用シートにフォームやオートシェイプなどでボタンを作り、印刷用のマクロを設定しておけば両方のシートを確実にプリントできます。 特にオプションで"シート見出しを表示する"のチェックを外しておけば、マウスで簡単に印刷用ページを選択できなくなるので、うっかり申請書だけ印刷するという事を防ぐ効果が期待できます。 印刷用のマクロもエクセルの"マクロの記録"を使えば、自動的に作成されます。 この程度なら初心者でも、頑張ればそれほど難しくないと思います。 ただし、入力したデータを記録しておき、後ほど呼び出して業務委託の確認に使ったり、進捗チェックなどする・・・・っとなると、初心者には荷が重くなるでしょう。 まずはご自身で、マクロとは?VBAとは?少し学んでみると良いと思います。 市販の教本も沢山あるしエクセルの解説をしているWEBサイトも検索すればいろいろ見つかりますよ。
お礼
ご回答有難うございます。 ふむふむ。なるほど、なるほど。「どうにか出来そう」ぐらいしか想像できていませんが、経験のある友人に相談し、がんばってみます。 随分前に教本などへアプローチしたのですが、あの厚さと、時間が掛かりそうな感じから、断念してしまいました(^^;。(関数も同様です。)必要に迫られていなかった事も有るでしょうけど。 市販ソフトを求めるレベルでもないと思っておりまして、今回、サイトに質問してみました。 「Word,Excelはどこまで使い倒せるか!?」の勉強を含め、出来るところまで、やってみようと思います。 有難うございました。
- yama1718
- ベストアンサー率41% (670/1618)
何百,何千もの申請書を管理したいとか言い出したら、データを管理するのが大変になりますので、 ExcelよりもAccessなどのデータベースでマクロ(VBA)で組んだ方が良くなります。(その分難しくなります) >一連の管理作業も、次の作業を忘れず完了確認ができる仕組み(VBA?)も、探しています。 一連の管理作業の情報が一つのファイルで完結しているのなら、そう難しくはないと思います。 チェックさせる項目が明確で、条件式で定義できるなら、それをワークシートにデータが入力される毎に 「入力忘れ」,「入力間違い」,「入力した項目の矛盾」などをチェックさせて、 NGの項目は表示色を変えて使用者に注意し、全部の項目がOKになるまで、 次の処理のシートへ入力ができない様にすればいい、 最後に全部の処理が完了するまで、印刷もできない様にする程度なら、そう難しくないと思います。 >VBAなどは全くの初心者です。宜しくお願い致します。 VBAは初心者でもVBやVCなどでプログラムの経験があれば大丈夫ですけど、そうでもないでしょう。 できるけど、VBAやVBを知らない初心者がプログラムを初めから勉強しながらできるかどうかは、 努力次第ですが最初からあまり複雑な事をしようとすると挫折する事が多いと思います。 業務の重要な書類を扱うなら、信頼性と今後の拡張やメンテナンスの問題もありますから。 できる、できない関わらず、外注などその道のプロフェッショナルに委託された方が良いと思いますが。
お礼
ご回答有難うございます。 質問内容が不明瞭でスミマセン。具体的な<一連の管理作業>は、「図面管理」を想定していました。 【原図完成】から、配布図作成(枚数),作業者,配布日,配布先,受領確認,旧図破棄,です。 初心者ながら「このぐらいの作業はExcelで出来るよねぇ」と、期待していました。 >そう難しくないと思います。の、希望的お言葉を頼りに、がんばってみます。 有難うございました。
- imogasi
- ベストアンサー率27% (4737/17069)
>この作成と同時に・・ とは作成の「終了」を意味するのでしょうが、終了をシステム側がどういう事象で捕らえるか(VBAのイベントという考えの理解) 例えば (1)終了ボタンクリック (2)ブックを閉じる (3)ある項目を入力すると(この論理は危ういが) (4)終了をわざわざファイルなどに登録する。 など 考えましたか ーー 業務(帳票作成とパラレルの単位)のメニューなどをシートやフォームに作り、次の(残りの)業務を意識させる方法もあります。 ーーー 強制的に次の業務の画面を出す方法もありえる ーー 作業が終ったことは人間が判断せざるをえないと思う。しかし申請書は終って、エクセルは終わり。社内稟議書は明日ということもありえるので、ディスクに業務終了管理ファイルを作る必要があるのかな。 >VBAなどは全くの初心者です。 これぐらいになると、VBAの色々な課題の経験を積んで、質問者のスキルのポケットにさまざまのものが入っている必要があるように思う。 勉強すればよいのがが、ある課題に限って調べようとすると、本やWEBにも関連記事を見つけることが難しい。周りに聞く人が無い、独学でやるなら、判らないままの時間が経過してしまい、相当時間がかかると思う。 ーー >申請書、社内稟議書を同一ブックの別シートにする、別ブックにするなども考慮する必要アリ。システム作成の難易度に影響する。
お礼
ご回答有難うございます。 ん~、初心者がこんなこと考えちゃイケナイのかなぁ...ネガな気分にもなりそうですが(^^; 大丈夫です!ものづくり派な私は、この様な発想なくして、進化なしっ!とポジっ気たっぷりですんで。 >VBAなどは全くの初心者です。←以降のご意見は、まさにその通りでございます。幸い”聞ける人物”がおりまして、親身な対応を頂いてますので、希望の光へトコトコと歩み始めております。コツコツ速度で、もう少しがんばってみます。 有難うございました。
- n-jun
- ベストアンサー率33% (959/2873)
>VBAなどは全くの初心者です。 と言う状態でやりたい事が大きいと思うのですが。 まずVBAの経験がないのか、少しでも触った事があるのかによります。 VBAの経験がないのであれば、会社と相談して外注委託も視野に入れるべきかと。
お礼
ご回答有難うございます。 おっしゃるとおり、後半の内容は、未経験者にはちょっと無理なボリュームと思っていました。 ”必要に迫られた+VBAへの興味”&”PCは身近に役に立ってくれるはず”の期待を含め、簡単なところから一歩を踏み出したいと思っております。 有難うございました。
お礼
ご回答有難うございます。 なるほど!「やることが多すぎ」ますか...。未経験者の感覚ですが”朝飯前”と思っていました。反省、反省。 >2~7まで一つ一つ、何これどうやるの? ←って感じです。昨日、友人に本文見てもらい、「理解できる」と言うことでしたので、TRYしてみようと思います。 有難うございました。