恐れていたが、まだ試してみる準備ができている人のために。 (エクセル)

多くの場合、彼らがオフィスアプリケーションでの作業について話すとき、それはPCをタイプライターとして使用することを意味し、正直なところ、PCが提供する機能を使用しない場合、物理的なメカニズムのかなり高価な代替品です。 これについて話しましょう。
画像

はじめに


私の意見では、PCはルーチンプロセスの自動化の原則を解決するためのツールとして浮上してきましたが、この点では非常に優れています。 さらに、機能プログラムの開発は、分業化の深化の結果として、緊急タスクの日常業務への変換を実装するためのツールの作成の歴史です。 ただし、次のような領域があります そして、今日では、PCがタイプライターとして正確に使用されています。 そして、人々の給与が間接費にあり、その結果、大きくないという事実のために深刻な開発が行われなかったため、ワークフローの量が増えているとは言えません。

それでは、構築について、具体的にはエグゼクティブドキュメント (以降IDと呼びます)の準備についてお話ししましょう。

エグゼクティブドキュメント
より正確にそのテキストコンポーネントについて。 要するに、IDとは、プロジェクトによって実行された作業を確認/拒否するための行為、雑誌、およびその他のドキュメント、図面、各段階でコンパイルされた図、さらには建設中の作業(作業グループ)のセットです。 このような文書は完全にテンプレートであり、作業の種類に応じてリストが規制され、実行される実際の作業スケジュールに従って維持され、委員会によって承認されたプロジェクトに対する作業の正確性/逸脱を形式化します。

ほとんどの作業は、隠された作業の審査法の形で閉鎖されています (2006年12月26日のN1128の環境、技術、および核監督のための連邦サービスの命令により承認されました)さらにAOSD)。

自動化のための初期データ。


したがって、AOCRの形式を基礎として使用します。 したがって、次の情報が入力されるドキュメントテンプレートがあります。

-行為番号の接尾辞;
-資本建設施設の名前;
-建設の参加者に関する法的なデータ(開発者または顧客;建設を行う人;プロジェクト文書を準備する人;
調査対象の作業を完了した建設を実施する人。 他の人。)
-権限を確認する組織、役職、命令の名前を持つ人のリスト。
-実行された作業の名前。
-締め切り。
-実行された作業に含まれる作業のリスト。
-科学技術文書およびプロジェクトのセクション/技術文書へのリンク。
-エグゼクティブスキーム、テストレポート(必要な場合)へのリンク。
-コンプライアンスを確認するドキュメントへのリンクで使用される資料のリスト(パスポート、証明書など)

問題を解決する基本的な方法についての考え


そのため、最初の近似では、同じタイプの対応するフィールドを各行為に割り当てることで、オブジェクトで作業を実行するスキームの視覚的なフットクロスを取得する視覚的なテーブルを簡単に作成できます。 そして、これは新しいことではありません。 したがって、データテーブルのセルにフォームを関連付ける必要があります。ここには2つのオプションがあります。

1. Wordファイルとマージする
2. Excelベースのマクロテンプレートを使用して入力します。

これらのメソッドにはそれぞれ長所と短所がありますが、 合併はリアルタイムで置換を行うため、2番目の項目を選択することにしました。これは、合併がリアルタイムで提供しないものであり、データを更新する場合は、行為の結論を実行する必要があるたびに再度行います。 これは、自分の行動の履歴が必要になることが多いためです。

そのため、ここで2つのタスクを実行します。

1.表形式データに基づいてテンプレートに入力する
2.一度に入力するのに十分なフィールドは、時々変化し、各フィールドで異なるフィールドです。

タスクNo. 2を解き、別のシートに、建設プロジェクトのオブジェクト/セクションのフレームワーク内で均一になるデータを出力します。

ネタバレ
-資本建設施設の名前;
-建設の参加者に関する法的なデータ(開発者または顧客;建設を行う人;プロジェクト文書を準備する人;
調査対象の作業を完了した建設を実施する人。 他の人。)
-権限を確認する組織、役職、命令の名前を持つ人のリスト。

現在のシートでは、1回だけ記入し、残りの行為については、これらの値へのリンクを単に配置します。

ネタバレ
-科学技術文書およびプロジェクトのセクション/技術文書へのリンク。
-行為番号の接尾辞。

そして、各行為で変化するフィールド:

ネタバレ
-実行された作業の名前。
-締め切り。
-実行された作業に含まれる作業のリスト。
-エグゼクティブスキーム、テストレポート(必要な場合)へのリンク。
-コンプライアンスを確認するドキュメントへのリンクで使用される資料のリスト(パスポート、証明書など)

アメニティについては、責任者の名前、組織、日付の指定順序を書き留めてから、「データ検証」ツールを使用して、 ネタバレに名前を入力し、式でレガリアを引き上げることができます。

=((("'  '!";(((E30;'  '!$G$15:$G$34;0))+14;6)));"-") 

すなわち シート「プロジェクトのデータ」の範囲$ G $ 15:$ G $ 34で、6列目でセルE30の値を検索し、簡単なメソッドが見つかるとすぐに、式によってリンクに変換されるアドレスに変換します。

Times New RomanフォントNo. 10を使用する場合、印刷されるテキストの長さは105文字を超えないため、文字列の長さに新しい問題が既にあります。 すなわち 持ち運び用の松葉杖を作成する必要性に依存しています。 VBAの機能コード:

 Function PatrOfString(StringOfTable As String, Nnumber As Byte) As String Dim (1 To 10) As String Dim i As Integer ' Dim j As Integer ' Dim k As Integer ' Dim p As Integer ' For i = 1 To 10 Let (i) = " " Next i Let k = 1 Let p = Len(StringOfTable) Let p1 = Len(StringOfTable) For i = 1 To Round(Len(StringOfTable) / 105) + 1 Step 1 If p > 0 And p < 105 Then If k <= p1 Then Let (i) = Mid$(StringOfTable, k, p) Else If Mid(StringOfTable, k, 1) = " " Then If k <= p1 Then Let (i) = Mid$(StringOfTable, k, 105) Let p = p - 105 k = k + 105 Else j = 105 * i If j - k >= 105 Then j = k + 105 End If Do j = j - 1 Loop While Mid$(StringOfTable, j, 1) <> " " Let (i) = Mid$(StringOfTable, k, j - k + 1) Let p = p - (j - k + 1) Let k = j + 1 End If End If Next i If Nnumber - 1 > 0 Then If (Nnumber) = (Nnumber - 1) Then (Nnumber) = " " End If PatrOfString = (Nnumber) 

すなわち 最初にテキストを取得し、次に105文字を切り取り、末尾の最初の文字、スペース、検索方法を見つけ、配列の最初の行の最初の文字から、見つかったスペースの数だけテキストをドロップします。 次に、テキストが終了するか出力配列が詰まるまで操作を続けます。 この段階では、10行のメモリに制限されています。 次に、1〜10の目的の行のコンテンツへのリンクを表示します。 決定のマイナスのうち、メモリが詰まっており、新しい要求ごとに再カウントが再度実行されます。 しかし、松葉杖は機能します。

次に、標準のAOSPテンプレートに出力します。 再び2つのオプションがあります。列(各行為の水平に配置されたデータの場合は行)へのマッピングを手動で処方します。その後、各新しいテンプレートまたはデータテーブルの変更をカスタマイズするのは長くてリソースを消費します。 したがって、最適化を行っています。 各行為のデータは垂直に配置され、制御文字の組み合わせの比較(行為自体は完全にキリル文字であるため、ラテン語で)はこれらの行為の情報を含む行になるため、二重ネストループではテキスト内の制御文字を検索します列の値。

 Do wb.Worksheets("   ").Copy after:=Worksheets(Worksheets.Count) Set  = wb.Worksheets(Worksheets.Count) For x = 1 To 15 Step 1 '     "   " For y = 1 To 71 Step 1 '     "   " If Sheets(.Name).Cells(y, 20) = 1 Then Let k = CStr(Sheets(.Name).Cells(y, x)) '      -  If k <> "" Then For i = 1 To __ Step 1 Let k = Replace(k, arr(i), Worksheets("    (2)").Cells(i, )) Next i .Cells(y, x) = k End If End If Next y Next x '        ,   . '     Cells(3, 2),  3 -   , 2 -    '     ,     R1C1 ' ( ->  ->  ->    "  R1C1") '      Cells(1, "A"),  1 -   , "" -     Rem -=            =- Let  =  + CStr(Worksheets("    (2)").Cells("1", )) + "-" Let  =  + CStr(Worksheets("    (2)").Cells("2", )) + ".xlsx"  = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, ) Application.DisplayAlerts = False '    Sheets(.Name).Copy '       ActiveWorkbook.SaveAs Filename:=, _ FileFormat:=51 ActiveWindow.Close Sheets(.Name).Delete '    Application.DisplayAlerts = True '     Let  =  + 1 Loop While  <=  End Sub 

さて、この段階の最後の瞬間-システムのパフォーマンスに出くわし、多くの行為を行うと、その出力には数時間かかります。 プロセスを高速化するために、次のオプションを使用します:データシートの内容をマクロで新しいシートにコピーし、その名前に数字(2)を取得し、Excelを高速化する別のマクロを起動しますが、多くの機能を無効にします:

 ' Excel    "" Public Sub AccelerateExcel() '       Application.ScreenUpdating = False '     Application.Calculation = xlCalculationManual '  Application.EnableEvents = False '    If Workbooks.Count Then ActiveWorkbook.ActiveSheet.DisplayPageBreaks = False End If '   Application.DisplayStatusBar = False '  Excel Application.DisplayAlerts = False End Sub 

そして、フォームからすべてのデータを出力した後、同様のマクロを実行して、同じ変数をtrueに設定し、複製シートを削除して、干渉しないようにします。

Source: https://habr.com/ru/post/J344956/


All Articles