戻る  □一般操作のサロン  □ 使用方法  □ 新着記事  □ 新規に質問する!  □ トピック一覧  □ 検索  □ 過去ログ
[ 最新記事及び返信フォームをトピックトップへ ]
このトピック参照回数 :
左から右へ繰り返し処理を行う

    [191702] 左から右へ繰り返し処理を行う-

    ■親トピック/記事引用/メール受信=OFF■

    □投稿者/ 六 -(2020/04/08(14:18))
    □U R L/
      入力シートに1ロットごとに記入用の表がC4のセルから右へ6個セルを開けて3ロット分あり、その表1ロットから数値やロットを別シートのラベルシートに転記して印刷する処理を3つ分繰り返すコードを作りたいです。
      とりあえず1ロット分の処理を行うコードを作ってみたのですが、2ロット目からの繰り返し処理をさせるコードの組み方がわかりません。
      どなたかご教授よろしくお願いいたします。
      
      処理内容としましては、
      
       
          'ロット欄(C4セル[1ロット目の場合])のセルが空欄かどうかの判別
          
          '印刷ログデータのロット一覧と入力シートのロットを照合
          
          'ロットが合致した場合正規は27枚以下なら印刷しない処理
               
          'ロットが合致しなかった場合正規を27枚以下でも印刷する処理
      
          '正規ラベルの印字処理と印刷の繰り返し
      
          '半端ラベルへ半端重量の転記
          
          'データログにデータを転記
          
          '右隣の表の処理。上記処理を繰り返す。
          
          '3つの表全て処理が終わったら
          
          '半端ラベルを印刷
      
          'データログに転記(3つ分)
      
      というものです。
      
      
      Sub ラベル印刷処理()
      
           Set sh1 = Sheets("入力シート")
           Set sh2 = Sheets("本ラベル")
           Set sh3 = Sheets("半端ラベル")
           Set sh4 = Sheets("半端ラベル(2枚シート用)")
           Set sh5 = Sheets("印刷ログデータ")
           Set SPrint1 = sh1.Range("C8") '@正規ラベル枚数
           Set SPrint2 = sh1.Range("J8") 'A正規ラベル枚数
           Set SPrint3 = sh1.Range("Q8") 'B正規ラベル枚数
           Set SLot1 = sh1.Range("C4") '@出荷ロット
           Set SLot2 = sh1.Range("J4") 'A出荷ロット
           Set SLot3 = sh1.Range("Q4") 'B出荷ロット
           Set Hweight1 = sh1.Range("E8") '@半端重量
           Set Hweight2 = sh1.Range("L8") 'A半端重量
           Set Hweight3 = sh1.Range("S8") 'B半端重量
           Dim str As String
           Dim Lastrow As Long '印刷ログデータシートのロット番号の最終行
           Dim Lot1, Lot2, Lot3 As Variant
           Dim Loglot As Variant
           Dim P As Long
      
      'ロットの照合から転記、印刷処理まで1ロット文
          
          'ロット欄のセルが空欄かどうかの判別
          
          If sh1.Range("C4").Value <> "" Then
              
              '印刷ログデータのロット一覧と入力シートのロットを照合
              Lastrow = sh5.Cells(2, 1).End(xlDown).Row
              
              For Loglot = 2 To Lastrow
                  
                  If sh1.Range("C4").Value = sh5.Range(C, Loglot).Value Then
                  
                      GoTo Label1
                  
                  End If
              Next
              '印刷ログデータにあるロット番号と被らなかったらする処理
                  sh2.Range("D6").Value = SLot1
                  
                  '3で割った余りが0の時
                  If SPrint1 Mod 3 = 0 Then
                  
                      sh2.PrintOut from:=1, to:=1, Copies:=SPrint1 \ 3, Collate:=True, Preview:=True
                 
                  '3で割った余りが1の時
                  ElseIf SPrint1 Mod 3 = 1 Then
                  
                      sh2.PrintOut from:=1, to:=1, Copies:=SPrint1 \ 3, Collate:=True, Preview:=True
                      
                      sh2.Range("D23", "D42").Value = ""
                      
                      sh2.PrintOut from:=1, to:=1, Copies:=1, Collate:=True, Preview:=True
                      
                      sh2.Range("D23").Value = "=D6"
                      sh2.Range("D42").Value = "=D6"
                      
                  '3で割った余りが2の時
                  ElseIf SPrint1 Mod 3 = 2 Then
                  
                      sh2.PrintOut from:=1, to:=1, Copies:=SPrint1 \ 3, Collate:=True, Preview:=True
                      
                      sh2.Range("D42").Value = ""
                      
                      sh2.PrintOut from:=1, to:=1, Copies:=1, Collate:=True, Preview:=True
                      
                      sh2.Range("D42").Value = "=D6"
                      
                  End If
                  
      Label1:
              'ロット1の正規枚数が27枚以上の時の処理
              If SPrint1 > 27 Then
              
                 If SPrint1 - 27 Mod 3 = 0 Then
                  
                      sh2.PrintOut from:=1, to:=1, Copies:=SPrint1 - 27 \ 3, Collate:=True, Preview:=True
                 
                 ElseIf SPrint1 - 27 Mod 3 = 1 Then
                      
                      If SPrint1 - 27 \ 3 = 0 Then
                      
                          sh2.Range("D23", "D42").Value = ""
                      
                          sh2.PrintOut from:=1, to:=1, Copies:=1, Collate:=True, Preview:=True
                      Else
                  
                          sh2.PrintOut from:=1, to:=1, Copies:=SPrint1 - 27 \ 3, Collate:=True, Preview:=True
                      
                          sh2.Range("D23", "D42").Value = ""
                      
                          sh2.PrintOut from:=1, to:=1, Copies:=1, Collate:=True, Preview:=True
                      
                      End If
                      
                 ElseIf SPrint1 - 27 Mod 3 = 2 Then
                  
                      If SPrint1 - 27 \ 3 = 0 Then
                      
                          sh2.Range("D42").Value = ""
                      
                          sh2.PrintOut from:=1, to:=1, Copies:=1, Collate:=True, Preview:=True
                      Else
                  
                          sh2.PrintOut from:=1, to:=1, Copies:=SPrint1 - 27 \ 3, Collate:=True, Preview:=True
                      
                          sh2.Range("D42").Value = ""
                      
                          sh2.PrintOut from:=1, to:=1, Copies:=1, Collate:=True, Preview:=True
                      
                      End If
                      
                  sh2.Range("D23").Value = "=D6"
                  sh2.Range("D42").Value = "=D6"
                  
                 End If
                 
             End If
             
              '1ロット目の半端品の転記
              If Hweight1 <> 0 Or "" Then
                  SLot1 = sh3.Range("D6").Value
                  Hweight1 = sh3.Range("D7").Value
              End If
              
          End If
      
      end sub


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [191703] Re[1]: 左から右へ繰り返し処理を行う-

    記事引用/メール受信=OFF■

    □投稿者/ 六 -(2020/04/08(15:03))
    □U R L/
      修正しました。
      
      Sub ラベル印字2()
      
           Set sh1 = Sheets("入力シート")
           Set sh2 = Sheets("本ラベル")
           Set sh3 = Sheets("半端ラベル")
           Set sh4 = Sheets("半端ラベル(2枚シート用)")
           Set sh5 = Sheets("印刷ログデータ")
           Set SPrint1 = sh1.Range("C8") '@正規ラベル枚数
           Set SPrint2 = sh1.Range("J8") 'A正規ラベル枚数
           Set SPrint3 = sh1.Range("Q8") 'B正規ラベル枚数
           Set SLot1 = sh1.Range("C4") '@出荷ロット
           Set SLot2 = sh1.Range("J4") 'A出荷ロット
           Set SLot3 = sh1.Range("Q4") 'B出荷ロット
           Set Hweight1 = sh1.Range("E8") '@半端重量
           Set Hweight2 = sh1.Range("L8") 'A半端重量
           Set Hweight3 = sh1.Range("S8") 'B半端重量
           Dim str As String
           Dim Lastrow As Long '印刷ログデータシートのロット番号の最終行
           Dim Lot1, Lot2, Lot3 As Variant
           Dim Loglot As Variant
           Dim P As Long
      
      'ロットの照合から転記、印刷処理まで1ロット文
          
          'ロット欄のセルが空欄かどうかの判別
          
          If sh1.Range("C4").Value <> "" Then
              
              '印刷ログデータのロット一覧と入力シートのロットを照合
              Lastrow = sh5.Cells(2, 1).End(xlDown).Row
              
              For Loglot = 2 To Lastrow
                  
                  If sh1.Range("C4").Value = sh5.Range("C" & Loglot).Value Then
                  
                      GoTo Label1
                  
                  End If
              Next
              '印刷ログデータにあるロット番号と被らなかったらする処理
                  sh2.Range("D6").Value = SLot1
                  
                  '3で割った余りが0の時
                  If SPrint1 Mod 3 = 0 Then
                  
                      sh2.PrintOut from:=1, to:=1, Copies:=SPrint1 \ 3, Collate:=True, Preview:=True
                 
                  '3で割った余りが1の時
                  ElseIf SPrint1 Mod 3 = 1 Then
                  
                      sh2.PrintOut from:=1, to:=1, Copies:=SPrint1 \ 3, Collate:=True, Preview:=True
                      
                      sh2.Range("D23", "D42").Value = ""
                      
                      sh2.PrintOut from:=1, to:=1, Copies:=1, Collate:=True, Preview:=True
                      
                      sh2.Range("D23").Value = "=D6"
                      sh2.Range("D42").Value = "=D6"
                      
                  '3で割った余りが2の時
                  ElseIf SPrint1 Mod 3 = 2 Then
                  
                      sh2.PrintOut from:=1, to:=1, Copies:=SPrint1 \ 3, Collate:=True, Preview:=True
                      
                      sh2.Range("D42").Value = ""
                      
                      sh2.PrintOut from:=1, to:=1, Copies:=1, Collate:=True, Preview:=True
                      
                      sh2.Range("D42").Value = "=D6"
                      
                  End If
                  
      Label1:
              'ロット1の正規枚数が27枚以上の時の処理
              If SPrint1 > 27 Then
              
                 If SPrint1 Mod 3 = 0 Then
                  
                      sh2.PrintOut from:=1, to:=1, Copies:=SPrint1 - 27 \ 3, Collate:=True, Preview:=True
                 
                 ElseIf SPrint1 Mod 3 = 1 Then
                      
                      If (SPrint1 - 27) \ 3 = 0 Then
                      
                          sh2.Range("D23", "D42").Value = ""
                      
                          sh2.PrintOut from:=1, to:=1, Copies:=1, Collate:=True, Preview:=True
                      Else
                  
                          sh2.PrintOut from:=1, to:=1, Copies:=(SPrint1 - 27) \ 3, Collate:=True, Preview:=True
                      
                          sh2.Range("D23", "D42").Value = ""
                      
                          sh2.PrintOut from:=1, to:=1, Copies:=1, Collate:=True, Preview:=True
                      
                      End If
                      
                 ElseIf SPrint1 Mod 3 = 2 Then
                  
                      If (SPrint1 - 27) \ 3 = 0 Then
                      
                          sh2.Range("D42").Value = ""
                      
                          sh2.PrintOut from:=1, to:=1, Copies:=1, Collate:=True, Preview:=True
                      Else
                  
                          sh2.PrintOut from:=1, to:=1, Copies:=(SPrint1 - 27) \ 3, Collate:=True, Preview:=True
                      
                          sh2.Range("D42").Value = ""
                      
                          sh2.PrintOut from:=1, to:=1, Copies:=1, Collate:=True, Preview:=True
                      
                      End If
                  
                 End If
                 
                  sh2.Range("D23").Value = "=D6"
                  sh2.Range("D42").Value = "=D6"
                 
             End If
             
              '1ロット目の半端品の転記
              If Hweight1 <> 0 Then
                  sh3.Range("D6").Value = SLot1
                  sh3.Range("D7").Value = Hweight1
              End If
              
          End If
      
      End Sub


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [191704] Re[2]: 左から右へ繰り返し処理を行う-

    記事引用/メール受信=OFF■

    □投稿者/ γ -(2020/04/08(19:45))
    □U R L/
      レイアウトの説明をもっと丁寧にしてください。
      あなたはワークシートを目にしているからわかるだろうが、
      他人にはわかりません。
      文章やコードを読んで想像しないといけません。
      コメントする気力も起きにくいです。
      
      作業前はこれこれのレイアウトで、
      結果このようなものにしたいというのを具体的に示してください。
      
      それと、適当なところで改行をしてください。
      もう何度も投稿されているのですから、そろそろ習熟してください。




    [191734] Re[3]: 左から右へ繰り返し処理を行う-

    解決!!ありがとうございました! / 記事引用/メール受信=OFF■

    □投稿者/ 六 -(2020/04/13(11:07))
    □U R L/

      γ様

      大変失礼しました。
      もう一度再考してから登校しなおします。



このトピック内容の全ページ数 / [0]

このトピックに書きこむ
Name/
E-Mail/

└>このツリーのレス記事をメールで受信しますか? YES/ NO/
Title/
URL/
Comment/ 通常モード->  図表モード-> (←の場合適当に改行を入れて下さい)
タグが使用できます。例 ⇒ <font color="blue">文字</font>
解決!!ありがとうございました! 解決       保留中です・・・ 保留        迷宮入りorほかあたって見ます・・ 迷宮入       すいませ〜ん。誰か〜! Help! ←※回答者専用
解決したらチェック       保留(コードテスト中など・・)         解決不可orレスが全く付かなくてほかのサイトに行くときなど・・
削除キー/
(半角8文字以内) 


- Child Forum -
Edit:ゆう-G