EXERCISE01: train0101   2007-1-8 by KOMPas  
 
  「はがき印刷インサツ2」    
 
  exercise01.xls  
 
  「はがき印刷インサツ」のコードをコピーして、スコクワえ、「はがき印刷インサツ2」をつくります。  
  オモ変更点ヘンコウテンは、一覧イチランヒョウと、様式ヨウシキとを、ペイジえて作成サクセイするテンと(転記テンキマクロではこっちが普通フツウ)、  
  はがきの様式ヨウシキ縦置タテオきにえ、様式ヨウシキペイジ左上ヒダリウエ(A1)からハジまるように、若干ジャッカン変更ヘンコウします。  
  住所ジュウショランも、2ギョウ表示ヒョウジできるように変更ヘンコウします。(サンプルは、exercise01.xls)  
 
  (1) EXCELをヒラいて、新規シンキ作成サクセイから「空白クウハクのブック」をツクり、  
  名前ナマエえて保存ホゾン」で、ファイルメイを「はがき印刷インサツ2.xls」とします。  
  exercise01.xls は、シートだけでなく、マクロもんであります。  
  練習レンシュウする時間ジカンがあるなら、是非ゼヒ空白クウハクのブック」からおハジめください。  
 
  (2) Sheet1 を住所録ジュウショロクとします。  
  5行目ギョウメをみだしギョウにするなら、 5行目ギョウメAレツからジュンに(ここでは必要ヒツヨウないので、セルの連結レンケツをしません。)、  
 
  見出ミダメイ セル番地バンチ 列番号レツバンゴウ  
  氏名シメイ A5 1  
  郵便番号ユウビンバンゴウ B5 2  
  住所ジュウショ1 C5 3  
  住所ジュウショ2 D5 4  
  連絡先レンラクサキ E5 5  
  区分クブン F5 6      
 
  ここでは連結レンケツセルを使ツカわなくてもよいので、それぞれの列幅レツハバ適当テキトウ変更ヘンコウしてください。  
  6行目ギョウメからがデータとなります。  
  コノみの行数ギョウスウブン罫線ケイセンをいれ、見出ミダギョウイロトウをおこなってください。  
 
  (3) Sheet2 をはがき様式ヨウシキペイジにします。  
  様式ヨウシキペイジ作成サクセイするコツは、あらかじめ充分ジュウブンレツスウをまとめて、  
  全体ゼンタイが、印刷インサツにちょっきり(方言ホウゲンか?)1ペイジにおさまるように、スベてのレツを同じ幅(できるだけ狭く)に調整し、  
  転記テンキ対象タイショウは、セルの連結レンケツをつかって、複数フクスウセルを1つにして使ツカいます。  
  はがきタテ場合バアイ  
    横幅ヨコハバが10cm なので、印刷インサツプリンタの左右サユウ余白ヨハク合計ゴウケイで 1.5cm とると、  
    印刷インサツ範囲ハンイは、85mm となります。  
    EXCEL様式ヨウシキペイジの1レツを5mmときめると、85 =  5 x 17  
    印刷インサツ必要ヒツヨウ列数レツスウは、17レツなので、ここでは、Aレツ〜Qレツまでをチイさなハバにするわけです。  
  ほかの帳票チョウヒョウで、タトえばA4用紙ヨウシなら、  
  印刷インサツ範囲ハンイがおよそ17cm とすれば、  
  EXCEL様式ヨウシキペイジの1レツを5mmときめると、170 =  5 x 34  
  印刷インサツ必要ヒツヨウ列数レツスウは、34レツなので、ここでは、Aレツ〜AHレツまでをチイさなハバにします。  
  行政ギョウセイ要求ヨウキュウする様式ヨウシキ場合バアイ列幅レツハバをもっとチイさくしたほうがツクりやすいかもしれません。  
     
  はがき様式ヨウシキ郵便番号ユウビンバンゴウや、住所ジュウショ氏名シメイトウデータを転記テンキするラン連結レンケツ作成サクセイします。  
  転記テンキはデータが印刷インサツされ、転記テンキ以外イガイは、様式ヨウシキのまま印刷インサツされます。  
  以下イカは、サンプルsexercise01.xls のはがき様式ヨウシキジョウのそれぞれ番地バンチです。  
 
  データメイ セル番地バンチ ギョウ レツ  
  氏名シメイ E13 13 5  
  郵便番号ユウビンバンゴウ D9 9 4  
  住所ジュウショ1 C10 10 3  
  住所ジュウショ2 C11 11 3  
  連絡先レンラクサキ H15 15 8  
 
  (4) いよいよマクロコードのお勉強ベンキョウです。  
  まず、住所ジュウショロクガワで、  
  氏名シメイセルをダブルクリック」「区分クブンセルをダブルクリック」マクロを作成サクセイします。  
  ツギに、はがきガワで、  
  一括イッカツ印刷インサツボタンをダブルクリック」マクロを作成サクセイします。  
 
  (5) EXCELメニューから、「ツール」-「マクロ」-「Visual Basic Editor」を選択センタクします。  
  画面ガメン左側ヒダリガワに、「Sheet1」とか、「Thisworkbook」とかあるのが、「プロジェクト エクスプローラ」ワクです。  
  「プロジェクト エクスプローラ」が表示ヒョウジされていないときは、  
  EXCELメニューから、「表示ヒョウジ」-「プロジェクト エクスプローラ」を選択センタクします。  
  「プロジェクト エクスプローラ」のSheet1 をダブルクリックします。  
  右側ミギガワ上部ジョウブヒダリワクに (General)、ミギワクに (Declarations) と表示ヒョウジされます。  
  左枠ヒダリワクのリスト▼をクリックして、worksheet を選択センタクします。  
  右枠ミギワクのリスト▼をクリックして、BeforeDoubleClick を選択センタクします。  
  画面ガメン右側ミギガワ中央チュウオウオオきなワクに、  
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)  
         (ハジめはナニ記述キジュツされていない。otenki.xls のコードをける場所バショ)    
    End Sub    
                 
  表示ヒョウジされます。(コードを記述キジュツするマエなので、これだけしか表示ヒョウジされない)  
  前段ゼンダンの、「マクロをのぞいてみる」をおこなって、otenki.xls のSheet2モジュールを同時ドウジヒラきます。  
  otenki.xls ガワのコードのうち、  
  (#1) Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)  
  (#2) 'Target はダブルクリックした場所。rr はtarget左上セルの行番号、cc は左上セルの列番号。  
  (#3) rr = Target.Row  
  (#4) cc = Target.Column  
  (#5) If cc = 2 Then  
  (#6)   (「住所ジュウショロク 氏名シメイセルをダブルクリック」コード)  
  (#7) ElseIf rr = 21 And cc = 30 Then  
  (#8)   (「はがき様式ヨウシキ 一括イッカツ印刷インサツをダブルクリック」コード)  
  (#9) ElseIf cc = 33 Then  
  (#10)   (「住所ジュウショロク 区分クブンセルをダブルクリック」コード)  
  (#11) End If    
  (#12) End Sub  
     
  (6) Sheet1 モジュール  住所ジュウショロクペイジマクロ  
 
    ノゾいてコピーしてはがき印刷インサツ2にけます。(上部ジョウブレイでは#2〜#11)  
  「はがき印刷インサツ2.xls」Sheet1 にけたコードから、 (「はがき様式ヨウシキ 一括イッカツ印刷インサツをダブルクリック」コード) 部分ブブン削除サクジョします。
  セル番地バンチやシート番号バンゴウトウを「はがき印刷インサツ2」にわせてえると、  
  はがき印刷インサツ2.xls Sheet1 モジュール Worksheet_BeforeDoubleClick は、次のようになります。  
  白地シロジ実際ジッサイのコードで(ミドリ文字モジはコードチュウのコメント)、ダイダイ文字モジはここでした注釈チュウシャクです。  
 
   
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)  
    rr = Target.Row  
    cc = Target.Column  
    If cc = 1 Then 氏名シメイレツを 1 に変更ヘンコウ  
        If rr < 6 Then 住所ジュウショロクランギョウ範囲ハンイ変更ヘンコウ  
        ElseIf rr > 15 Then 住所ジュウショロクランギョウ範囲ハンイ変更ヘンコウ  
        Else  
                Sheet2.Cells(9, 4) = Sheet1.Cells(rr, 2)   住所ジュウショロク/はがき様式ヨウシキ番地バンチ変更ヘンコウ  
                Sheet2.Cells(10, 3) = Sheet1.Cells(rr, 3)   左辺サヘン転記テンキサキは、はがき様式ヨウシキにつき Sheet2  
                Sheet2.Cells(11, 3) = Sheet1.Cells(rr, 4)   右辺ウヘン転記テンキモトは、住所録ジュウショロクにつき Sheet1  
                Sheet2.Cells(13, 5) = Sheet1.Cells(rr, 1)  
                Sheet2.Cells(15, 8) = Sheet1.Cells(rr, 5)  
            'はがき様式頁の表示      
                Sheet2.Activate  
                  
            If Sheet1.Cells(rr, 6) = "中止" Then   住所録ジュウショロクは Sheet1、区分クブンレツを 6 に変更ヘンコウ  
            Else  
                www = MsgBox(Sheet1.Cells(rr, 1) & " さんのはがきを印刷しますか?", vbOKCancel)  
                If www = vbCancel Then  
                Else  
                Sheet2.Range("A1:Q29").PrintOut 1, 1   はがき様式ヨウシキ Sheet2 の印刷インサツ範囲ハンイ指定シテイ  
                End If  
            End If  
            '住所録頁の表示  
                Sheet1.Activate  
                  
        End If  
    ElseIf rr = 21 And cc = 30 Then  
        '(住所録頁 では関係ないので削除)  
    ElseIf cc = 6 Then 区分クブンレツを 6 に変更ヘンコウ  
        If rr < 6 Then 住所ジュウショロクランギョウ範囲ハンイ変更ヘンコウ  
        ElseIf rr > 15 Then 住所ジュウショロクランギョウ範囲ハンイ変更ヘンコウ  
        ElseIf Sheet1.Cells(rr, 1) & "" = "" Then   住所録ジュウショロクにつき Sheet1、氏名シメイレツは 1  
        Else  
            If Sheet1.Cells(rr, cc) & "" = "" Then  
                Sheet1.Cells(rr, cc) = "中止"  
            Else  
                Sheet1.Cells(rr, cc) = ""  
            End If  
        End If  
   
    End If  
   
    End Sub  
   
 
  (7) Sheet2 モジュール  はがき様式ヨウシキペイジマクロ  
     
  Sheet1 とオナじやりカタで、Sheet2 モジュール Worksheet_BeforeDoubleClick をヒラき、otenki.xls コードを、  
    ノゾいてコピーしてけます。(上部ジョウブレイでは#2〜#11)  
  「はがき印刷インサツ2.xls」Sheet2 にけたコードから、 (「住所ジュウショロク 氏名シメイ/区分クブンセルをダブルクリック」コード) 部分ブブン削除サクジョします。
  セル番地バンチやシート番号バンゴウトウを「はがき印刷インサツ2」にわせてえると、  
  はがき印刷インサツ2.xls Sheet2 モジュール Worksheet_BeforeDoubleClick は、次のようになります。  
  白地シロジ実際ジッサイのコードで(ミドリ文字モジはコードチュウのコメント)、ダイダイ文字モジはここでした注釈チュウシャクです。  
 
   
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)  
    rr = Target.Row  
    cc = Target.Column  
    If cc = 2 Then  
        '(様式頁 では関係ないので削除)  
    ElseIf rr = 2 And cc = 19 Then   一括イッカツ印刷インサツ」ボタンは、S2セル  
        i = 6   住所ジュウショロクのデータ読込ヨミコ開始カイシギョウを 6 に変更ヘンコウ  
        Do Until Sheet1.Cells(i, 1) = ""   住所録ジュウショロクは Sheet1、氏名シメイレツは 1  
            If Sheet1.Cells(i, 6) = "中止" Then   住所録ジュウショロクは Sheet1、区分クブンレツは 6  
            Else  
                Sheet2.Cells(9, 4) = Sheet1.Cells(rr, 2)   住所ジュウショロク/はがき様式ヨウシキ番地バンチ変更ヘンコウ  
                Sheet2.Cells(10, 3) = Sheet1.Cells(rr, 3)   左辺サヘン転記テンキサキは、はがき様式ヨウシキにつき Sheet2  
                Sheet2.Cells(11, 3) = Sheet1.Cells(rr, 4)   右辺ウヘン転記テンキモトは、住所録ジュウショロクにつき Sheet1  
                Sheet2.Cells(13, 5) = Sheet1.Cells(rr, 1)  
                Sheet2.Cells(15, 8) = Sheet1.Cells(rr, 5)  
                  
                www = MsgBox(Sheet1.Cells(rr, 1) & " さんのはがきを印刷しますか?", vbOKCancel)  
                If www = vbCancel Then  
                Else  
                Sheet2.Range("A1:Q29").PrintOut 1, 1  
                End If  
            End If  
            i = i + 1  
        Loop  
    ElseIf cc = 33 Then  
        '(様式頁 では関係ないので削除)  
    End If  
   
    End Sub  
   
 
  (8) あなたがいたマクロを実際ジッサイウゴかしてみてください。  
  (9) コピー&けの威力イリョク体験タイケンできましたか?  
  転記テンキマクロは、これでスベてです。  
  あとは、転記テンキモト転記テンキサキのセル番地バンチを、自家製ジカセイ 一覧イチランヒョウ/様式ヨウシキわせて、  
  根性コンジョウ記述キジュツしていくだけのハナシです。  
 
  こういったコード記述キジュツ業界ギョウカイでは「チカラワザ(チカラワザ)」といいます。  
  時間ジカンさえあれば、カナラずできる仕事シゴトだからです。  
 
  EXCELマクロでありがたいことの1つは、通常ツウジョウのコードならコードナイ処理ショリすべき計算ケイサンを、  
  EXCELシートのシート関数カンスウをつかって、事前ジゼンわらせることができるところにあります。  
  様式ヨウシキへの転記テンキオコナマエに、一覧イチランヒョウ時点ジテンで、計算ケイサンわらせられる、ということです。  
 
  そのタメ事務ジムケイのマクロは、この転記テンキマクロコードと、EXCELのシート関数カンスウだけでオオくをこなせるわけです。  
  (・・・ 転記テンキマクロを時間ジカンさえあれば)