Excel VBA印刷済を印刷しない

このQ&Aのポイント
  • エクセルVBA印刷済を印刷しない。リストに追加された内容をチェックシートに差し込み印刷する運用を考えています。リストは定期的に追加され、前回リストに追加した内容は今回の印刷は印刷しないようにしたいです。
  • 一度印刷した内容もリスト上にあれば、再度印刷されるので、印刷済フラグをたてて、次回印刷は印刷済フラグをチェックし、再度印刷されないようにしたいです。
  • 現在のマクロは、データ入力シートから問い合わせ回答一覧シートにデータを流し込んで印刷しています。
回答を見る
  • ベストアンサー

(できる方)エクセルVBA印刷済を印刷しない

リストに追加された内容をチェックシートに差し込み印刷する運用を考えています。 リストは定期的に追加され、前回リストに追加した内容は今回の印刷は印刷しないように したいです。 例)10:00 1~3を入力/1~3を印刷済    11:00 4~6を入力/4~6を印刷する ※10:00の1~3hは再度印刷しないようにする ■したいこと 一度印刷した内容もリスト上にあれば、再度印刷されるので、印刷済フラグをたてて、 次回印刷は印刷済フラグをチェックし、再度印刷されないようにしたい ※現マクロは下記にしるしています。(モジュール1) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Sub 流し込み印刷() Sheets("データ入力").Select Dim mylastRow As Long '最終行を格納する変数 Dim myLastCol As Integer '最終列を格納する変数 Dim myLastCell As String '最終セルを設定する変数 With ActiveSheet.UsedRange '対象はアクティブシートの使用中のセル '最終行の行番号 mylastRow = .Rows(.Rows.Count).Row '最終列の列番号 myLastCol = .Columns(.Columns.Count).Column End With Dim i As Integer For i = 7 To mylastRow '1 Sheets("問合せ回答一覧").Range("F3:J3") = Sheets("データ入力").Cells(i, 1).Value '2 Sheets("問合せ回答一覧").Range("F4:J4") = Sheets("データ入力").Cells(i, 2).Value '3 Sheets("問合せ回答一覧").Range("F5:J5") = Sheets("データ入力").Cells(i, 3).Value '4 Sheets("問合せ回答一覧").Range("H8:V8") = Sheets("データ入力").Cells(i, 4).Value '5 Sheets("問合せ回答一覧").Range("H9:V9") = Sheets("データ入力").Cells(i, 5).Value '6 Sheets("問合せ回答一覧").Range("H10:V10") = Sheets("データ入力").Cells(i, 6).Value '7 Sheets("問合せ回答一覧").Range("H11:V11") = Sheets("データ入力").Cells(i, 7).Value '8 Sheets("問合せ回答一覧").Range("H12:V12") = Sheets("データ入力").Cells(i, 8).Value '9 Sheets("問合せ回答一覧").Range("H13:V13") = Sheets("データ入力").Cells(i, 9).Value '10 Sheets("問合せ回答一覧").Range("H14:V14") = Sheets("データ入力").Cells(i, 10).Value '11 Sheets("問合せ回答一覧").Range("H15:V15") = Sheets("データ入力").Cells(i, 11).Value '12 Sheets("問合せ回答一覧").Range("H16:V16") = Sheets("データ入力").Cells(i, 12).Value '13 Sheets("問合せ回答一覧").Range("H17:V17") = Sheets("データ入力").Cells(i, 13).Value Sheets("問合せ回答一覧").PrintOut Next i = i + 1 End Sub ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

質問者が選んだベストアンサー

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.1

こんにちは。 何れにしても、"済"かどうかのフラグについては セル範囲を使って管理するのが妥当でしょう。 仮に、印刷済のフラグ、について  列位置を  15:16列め(O:P列)  フラグを  [ True | その他] といった具合に設定した場合の例です。 列位置については、  10:00 が、印刷済、なら、15列め  11:00 が、印刷済、なら、16列め にフラグを設定するように書いています。 書換えが必要なら、VBEの置換機能で  15  16 をそれぞれ、指定の列番号に[すべて置換してみてください。 一応指定が必要な個所に◆マークを振ってあります。 ついでに、オブジェクトアクセスに無駄が多かったので最適化します。 また、Sheets("データ入力")からSheets("問合せ回答一覧")への 値の差し込みも、ブロック毎に纏めて処理するように書いています。 それと、ひとつ気になったのですが、     .Range("F3:J5").Value = ...     .Range("H8:V17").Value = ... これ ↑ 何故複数列に同じ値を設定するのかな?と考えたのですが、 もしかして[セルの結合]を適用した範囲、ということでしたらば、     .Range("F3:F5").Value = ...     .Range("H8:H17").Value = ... という風に一番左の単列を指定するのが正しいです。 ' ' 以下、標準モジュール ' ' ================================= Sub 流し込み印刷()  ' '   8315727   Dim mylastRow As Long ' ' 最終行を格納する変数   Dim myLastCol As Integer ' ' 最終列を格納する変数   Dim myLastCell As String ' ' 最終セルを設定する変数   With Sheets("データ入力")     .Select  '  ※注意!以下、Select禁止     With .UsedRange ' ' 対象はアクティブシートの使用中のセル       ' ' 最終行の行番号       mylastRow = .Rows(.Rows.Count).Row       ' ' 最終列の列番号       myLastCol = .Columns(.Columns.Count).Column     End With   End With   Dim i As Integer   With Sheets("問合せ回答一覧")     For i = 7 To mylastRow       If Cells(i, 15) = True Or Cells(i, 16) = True Then '  10:00、11:00◆印刷済フラグ、列位置を指定◆         .Range("F3:J5,H8:V17").Value = Empty         If Cells(i, 15) <> True Then  '  10:00◆印刷済フラグ、列位置を指定◆           ' ' 10:00、1 - 3           .Range("F3:J5").Value = Application.Transpose(Cells(i, 1).Resize(, 3).Value)           Cells(i, 15) = True  '  10:00◆印刷済フラグ、列位置を指定◆         End If         If Cells(i, 16) <> True Then  '  11:00◆印刷済フラグ、列位置を指定◆           ' ' 11:00、4 - 13           .Range("H8:V17").Value = Application.Transpose(Cells(i, 4).Resize(, 10).Value)           Cells(i, 16) = True  '  11:00◆印刷済フラグ、列位置を指定◆         End If         .PrintOut       End If     Next i   End With  ' Sheets("問合せ回答一覧")   i = i + 1 End Sub ' ' ================================= ご提示のコードだけを頼りにして、素直にお応えしたつもりですが、 これでいいのかな?とも思っています。 例えば、10:00の分は印刷済で、11:00の分以降を印刷する、という場合、 Sub 流し込み印刷 を実行すると、F3:J5 を空欄のまま印刷する仕様です。 もしかしたら、3:5行や8:17行を非表示にして印刷したいのかも知れない、とか、 もしかしたら、フラグによって差し込み位置を可変にしたいのかも知れない、とか、 もしかしたら、Sub 流し込み印刷 の実行を何らかのイベントで自動化したいのかも知れない。とか、 想像はしてみましたが、そこまでのニーズではないと判断しました。 何れにしても、 > 印刷済フラグをチェックし、再度印刷されないようにしたい というリクエストについては、大体、こんな感じになると思いますので。 ニーズに適うものが書けていれば、それが一番いいのですが、 もしも、仕様上の不足がある場合、そしてもしも他に回答が付かない場合、には、 ここは一旦閉じて、シートイメージなどを付した詳細な形で質問を建て直した方が、 解決は近いと思います。 私の回答上の不備や、既に説明されている範囲での仕様に対する誤解や、想定外のエラーや、 処理内容に関する質問、等、あれば、補足欄にでも書いてみてください。

nenesan23
質問者

補足

cj_mover さん さっそくご回答いただき、ありがとうございます!! やりたいことはご回答いただいた内容で近いのですが、 やはり現物をみていただいて再度ご返答いただければと思います。 補足では画像はアップロードできないので、 同タイトル(前に「再:」をつけます)にて再度質問を投稿するので、もし可能であれば、 ご返答いただければと思います。 よろしくお願いいたします。

関連するQ&A

  • 再:(できる方)エクセルVBA印刷済を印刷しない

    リストに追加された内容をチェックシートに差し込み印刷する運用を考えています。 リストは定期的に追加され、前回リストに追加した内容は今回の印刷は印刷しないように したいです。 例)10:00 1~3を入力/1~3を印刷済    11:00 4~6を入力/4~6を印刷する ※10:00の1~3hは再度印刷しないようにする ■したいこと 一度印刷した内容もリスト上にあれば、再度印刷されるので、印刷済フラグをたてて、 次回印刷は印刷済フラグをチェックし、再度印刷されないようにしたい ※現マクロは下記にしるしています。(モジュール1) ※画像に関連する2つのシートを添付しています 上部:データ入力 下部:問合せ回答一覧 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Sub 流し込み印刷() Sheets("データ入力").Select Dim mylastRow As Long '最終行を格納する変数 Dim myLastCol As Integer '最終列を格納する変数 Dim myLastCell As String '最終セルを設定する変数 With ActiveSheet.UsedRange '対象はアクティブシートの使用中のセル '最終行の行番号 mylastRow = .Rows(.Rows.Count).Row '最終列の列番号 myLastCol = .Columns(.Columns.Count).Column End With Dim i As Integer For i = 7 To mylastRow '1 Sheets("問合せ回答一覧").Range("F3:J3") = Sheets("データ入力").Cells(i, 1).Value '2 Sheets("問合せ回答一覧").Range("F4:J4") = Sheets("データ入力").Cells(i, 2).Value '3 Sheets("問合せ回答一覧").Range("F5:J5") = Sheets("データ入力").Cells(i, 3).Value '4 Sheets("問合せ回答一覧").Range("H8:V8") = Sheets("データ入力").Cells(i, 4).Value '5 Sheets("問合せ回答一覧").Range("H9:V9") = Sheets("データ入力").Cells(i, 5).Value '6 Sheets("問合せ回答一覧").Range("H10:V10") = Sheets("データ入力").Cells(i, 6).Value '7 Sheets("問合せ回答一覧").Range("H11:V11") = Sheets("データ入力").Cells(i, 7).Value '8 Sheets("問合せ回答一覧").Range("H12:V12") = Sheets("データ入力").Cells(i, 8).Value '9 Sheets("問合せ回答一覧").Range("H13:V13") = Sheets("データ入力").Cells(i, 9).Value '10 Sheets("問合せ回答一覧").Range("H14:V14") = Sheets("データ入力").Cells(i, 10).Value '11 Sheets("問合せ回答一覧").Range("H15:V15") = Sheets("データ入力").Cells(i, 11).Value '12 Sheets("問合せ回答一覧").Range("H16:V16") = Sheets("データ入力").Cells(i, 12).Value '13 Sheets("問合せ回答一覧").Range("H17:V17") = Sheets("データ入力").Cells(i, 13).Value Sheets("問合せ回答一覧").PrintOut Next i = i + 1 End Sub ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  • VBAの転記について

    With Sheets("入力") '3行目~22行目まで For i = 5 To 24 SheetName = Sheets("入力").Cells(i, "C").Value On Error Resume Next Set Dummy = Sheets(SheetName) SheetName2 = .Cells(i, "C").Value U最終行 = Sheets(SheetName2).Range("C65536").End(xlUp).Row + 1 If U最終行 = 39 Then Sheets(SheetName2).Copy BEFORE:=ActiveSheet Sheets(SheetName).Delete End If If Err.Number = 0 Then A = Sheets(SheetName2).Range("C65536").End(xlUp).Row + 1 Sheets(SheetName2).Range("C" & A).Value = .Cells(i, "G").Value Sheets(SheetName2).Range("D" & A).Value = .Cells(i, "I").Value Sheets(SheetName2).Range("E" & A).Value = .Cells(i, "L").Value Sheets(SheetName2).Range("F" & A).Value = .Cells(i, "N").Value Sheets(SheetName2).Range("G" & A).Value = .Cells(i, "P").Value Sheets(SheetName2).Range("H" & A).Value = .Cells(i, "R").Value Sheets(SheetName2).Range("I" & A).Value = .Cells(i, "T").Value Sheets(SheetName2).Range("K" & A).Value = .Cells(i, "V").Value Sheets(SheetName2).Range("L" & A).Value = .Cells(i, "X").Value ElseIf .Cells(i, "C").Value <> "" Then G = Sheets("原紙").Range("C65536").End(xlUp).Row + 1 Sheets("原紙").Range("B1").Value = .Cells(i, "D").Value Sheets("原紙").Range("B4").Value = .Cells(2, "D").Value Sheets("原紙").Range("C" & G).Value = .Cells(i, "G").Value Sheets("原紙").Range("D" & G).Value = .Cells(i, "I").Value Sheets("原紙").Range("E" & G).Value = .Cells(i, "L").Value Sheets("原紙").Range("F" & G).Value = .Cells(i, "N").Value Sheets("原紙").Range("G" & G).Value = .Cells(i, "P").Value Sheets("原紙").Range("H" & G).Value = .Cells(i, "R").Value Sheets("原紙").Range("I" & G).Value = .Cells(i, "T").Value Sheets("原紙").Range("K" & G).Value = .Cells(i, "V").Value Sheets("原紙").Range("L" & G).Value = .Cells(i, "X").Value '原紙をコピーする Sheets("原紙").Copy BEFORE:=Sheets(1) 'シートの名前を市場コードにする Sheets(1).Name = SheetName End If Next i End With On Error GoTo 0 上記のVBAを作成しましたが、 C行の値ごとの転記(G~Xの値)が出来ません。 どこが間違いか教えていただけないでしょうか。

  • Excel VBAデータ登録のスピードアップしたい

    下記のようなコードがあります。 ■input データ閲覧・登録・編集シート ■data データを格納するシート inputシートとdataシートでdataの受け渡しを行っているのですが、データレコードを切り替えるだけで20秒ちょっとかかるため、作業効率が悪いです。 この時間を1~2秒ぐらいまで減らすには、どのように修正すれば、いいでしょうか?どうかアドバイスをお願いいたします。 Private Sub datatouroku() ’データを登録する Dim touroku As Integer Dim fRange As Range Set fRange = Sheets("data").Columns(1).Find(What:=Range("BC1").Value, _ LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows) touroku = fRange.Row '検索されたNoの行位置を求める Sheets("data").Cells(touroku, 1).Value = Range("BC1:BE1").Value Sheets("data").Cells(touroku, 2).Value = Range("AX1").Value Sheets("data").Cells(touroku, 3).Value = Range("I4").Value   '・・・上記のデータが全部で256件あります。 End Sub ------------------------------------------ Private Sub hyouji() 'データを表示させる Dim fRange As Range Dim kensaku As Long Set fRange = Sheets("data").Columns(1).Find(What:=Range("BC1").Value, _ LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows)    If (fRange Is Nothing) Then '見つからなかった?    MsgBox "入力された顧客コードが存在しません。", vbExclamation    Exit Sub    End If    kensaku = fRange.Row '検索された顧客DCの行位置を求める     Range("BC1:BE1").Value = Sheets("data").Cells(kensaku, 1).Value     Range("AX1").Value = Sheets("data").Cells(kensaku, 2).Value    Range("I4").Value = Sheets("data").Cells(kensaku, 3).Value     '・・・上記のデータが全部で256件あります。 Set trg = Sheets("data").Cells(kensaku, 1) End Sub

  • Excel VBA 別ブックへの登録

    お世話になります。 今お仕事でExcelのVBAで同じフォルダ内の別ブックにデータを書き込みたくて いろいろやって見たのですが、上手くできません。 お力を頂ければと・・・・ <詳細> やりたいこと サーバー内に各個人の見積フォルダがあり、そのフォルダの中に見積作成と見積データの各ファイルが2つあります。 見積作成で作成したデータが登録ボタン(VBA)により見積データに登録されるようにしたい。 今までは同じブック内の別シートへデータを登録していました。 今回は同じフォルダ内の別ファイルへのデータ登録です。 ここまではできました・・・・ Sub 見積データ取得() Dim wSheet As ThisWorkbook Dim idx As String 'データ保存用シートを取得 Workbooks.Open Filename:=ThisWorkbook.Path & "見積データ.xls" Set wSheet = ThisWorkbook.Sheets(見積作成.xls) '空白行を取得 idx = CStr(wSheet.UsedRange.Row(wSheet.UsedRange.Rows.Count).Row + 1) '明細を取得 Dim wRange As Range Set wRange = ThisWorkbook.Sheets("見積作成").Range("B7:Q175") Dim i As Integer For i = 1 To wRange.Rows.Count If wRange.Cells(i, 6).Value <> "" Then '作成日 wSheet.Range("A" & idx).Value = ThisWorkbook.Sheets("見積作成").Range("H2").Value '見積NO wSheet.Range("B" & idx).Value = ThisWorkbook.Sheets("見積作成").Range("H5").Value '見積名 wSheet.Range("C" & idx).Value = ThisWorkbook.Sheets("見積作成").Range("C1").Value '提出先NO wSheet.Range("D" & idx).Value = ThisWorkbook.Sheets("見積作成").Range("B3").Value '提出先 wSheet.Range("E" & idx).Value = ThisWorkbook.Sheets("見積作成").Range("C3").Value '提出先フリガナ wSheet.Range("F" & idx).Value = ThisWorkbook.Sheets("見積作成").Range("Y5").Value '担当者 wSheet.Range("G" & idx).Value = ThisWorkbook.Sheets("見積作成").Range("H1").Value '備考欄 wSheet.Range("S" & idx).Value = ThisWorkbook.Sheets("見積作成").Range("C31").Value 'メーカー名 wSheet.Range("H" & idx).Value = wRange.Cells(i, 10).Value '商品NO wSheet.Range("I" & idx).Value = wRange.Cells(i, 1).Value '商品名 wSheet.Range("J" & idx).Value = wRange.Cells(i, 2).Value '入数 wSheet.Range("K" & idx).Value = wRange.Cells(i, 9).Value '数量 wSheet.Range("L" & idx).Value = wRange.Cells(i, 3).Value 'A価 wSheet.Range("M" & idx).Value = wRange.Cells(i, 5).Value '金額 wSheet.Range("N" & idx).Value = wRange.Cells(i, 6).Value 'C価 wSheet.Range("O" & idx).Value = wRange.Cells(i, 14).Value 'D価 wSheet.Range("P" & idx).Value = wRange.Cells(i, 16).Value '数量 'wSheet.Range("K" & idx).Value idx = CStr(CInt(idx) + 1) End If Next でも上手くいきません・・・ よろしくお願いいたしますm(_ _)m

  • excel vbaでリストの範囲設定

    よろしくおねがいします。 Sub 科目自動入力() Sheets("出納帳テンプレート").Select Application.ScreenUpdating = False 'ww列最終行取得 Dim vv As Long ' Sheets("科目シート").Select vv = Sheets("科目シート").Range("v" & Rows.Count).End(xlUp).Row Sheets("出納帳テンプレート").Select 'B列最終行取得 Dim aa As Long '式をフィルダウン aa = Range("B" & Rows.Count).End(xlUp).Row Range("H6").AutoFill Destination:=Range("H6:" & "H" & aa + 100), Type:=xlFillDefault '開始行設定 Dim a As Integer a = 6 kList = Worksheets("科目シート").Range("U2:V127") 'D列「月」欄が空白になるまで繰り返す '一覧に空白が出るか、一致する項目があるまで繰り返す Do Until Cells(a, 4).Value = "" For i = 1 To UBound(kList) If kList(i, 1) = "" Then Exit For '空白だったら抜ける If Cells(a, 7) <> "" Then Exit For 'すでに科目が入力されていれば抜ける If Cells(a, 4).Value Like "*" & kList(i, 1) & "*" Then Cells(a, 7).Value = kList(i, 2) Exit For End If Next i a = a + 1 Loop End sub このようなマクロを組んでいてうまく動作しております。 科目シートにリストがあり 現在はリストをkList = Worksheets("科目シート").Range("U2:V127") と範囲決め打ちしています。 これを範囲可変にしてみようと考えてみたのですが、 kList = Worksheets("科目シート").Range(Cells(2, "U"), Cells(vv, "V")) としても実行時エラー 1004と出てうまくいきません。 ちなみに開始セルは「U2」で変わりません。 終点セルを変数vvで表現したいです。 どうかよろしくお願いします。

  • エクセルVBAについて

    こんにちわ! 今、エクセルでAシートの入力した項目をBのシートへデーターが入力できるようなシステムを以下のようにくみました。 そこでBシートにデーターが入力されるのですが20行まで入力すると入力できないようにしたいのですが、なかなか上手くいきません。 A1からF20まで書式のロックを外しそれ以外のセルは保護をかけたのですがその状態でVBAを使って20行以上入力できませんという感じのエラー表示をしたいのですが、どうすればいいでしょうか? VBAは初心者ですが宜しくお願いします。 Private Sub CommandButton1_Click() Dim row As Integer row = WorksheetFunction.CountA(Sheets("date").Columns(1)) + 1 Sheets("date").Cells(row, 1).Value = Range("B2").Value row = WorksheetFunction.CountA(Sheets("date").Columns(2)) + 1 Sheets("date").Cells(row, 2).Value = Range("B3").Value row = WorksheetFunction.CountA(Sheets("date").Columns(3)) + 1 Sheets("date").Cells(row, 3).Value = Range("B4").Value row = WorksheetFunction.CountA(Sheets("date").Columns(4)) + 1 Sheets("date").Cells(row, 4).Value = Range("B5").Value row = WorksheetFunction.CountA(Sheets("date").Columns(5)) + 1 Sheets("date").Cells(row, 5).Value = Range("B6").Value row = WorksheetFunction.CountA(Sheets("date").Columns(6)) + 1 Sheets("date").Cells(row, 6).Value = Range("B7").Value Sheets("統制入力").Select Range("B17").Select ActiveWindow.SmallScroll Down:=-9 Range("B3:B7").Select Selection.ClearContents Range("B1").Select End Sub

  • VBAのコードを見ていただけませんか

    いつも、ここのサイトの方々には大変お世話になっております。ありがとうございます。 さてexcel2000で、dataというフォームにデータを格納し、メインのシートから、読みに行って編集するデータベースを作成しようとしています。 とあるサイトを参考にして、コードを作成しましたが、いくら頑張ってもどうしてもエラーが出てしまいうまくいきません。 どうか、コードのチェック・修正内容の提案等をいただけないでしょうか?よろしくお願いいたします。 (1)自分で登録した「IDが見つかりません」という表示しかでず、登録が出来ない (2)dataシートのB列(2列目)が主キー(IDと呼んでいます) です。(メインのシートとデータを照合させる部分) (3)メインのシートのIDはAL1~AQ1行セルまでを結合したセルに保管しています。 (4)下記コードでCommandButton1ボタンを「登録」と命名し、メインシートで入力したデータをdataシートに変更登録、新規に入力したデータも登録できるようにしたい。 (5)スピンボタンでIDを変化させて、メインフォーム上のデータも変化させたいけど、こちらも同種のエラーが出てしまう。 ■以下コードです。 Private Sub CommandButton1_Click() Dim fRange As Range Dim fRow As Long If (Range("AL1").Value = "") Then 'IDが入力されていない場合 MsgBox "IDを入力して下さい", vbExclamation Exit Sub End If Set fRange = Sheets("data").Columns(2).Find(What:=Range("AL1").Value, _ LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows) If (fRange Is Nothing) Then 'IDが見つからなかった場合 MsgBox "IDが見つかりません", vbExclamation Exit Sub End If fRow = fRange.row 'IDの行位置を求める Sheets("data").Cells(fRow, 1).Value = Range("AZ1:BE1").Value Sheets("data").Cells(fRow, 2).Value = Range("AL1").Value Sheets("data").Cells(fRow, 3).Value = Range("AA1:AO1").Value Sheets("data").Cells(fRow, 4).Value = Range("D5:E5").Value Sheets("data").Cells(fRow, 5).Value = Range("G5").Value Sheets("data").Cells(fRow, 6).Value = Range("I5").Value Sheets("data").Cells(fRow, 7).Value = Range("D5:F7").Value Sheets("data").Cells(fRow, 8).Value = Range("G6:I7").Value Sheets("data").Cells(fRow, 9).Value = Range("E8:E9").Value Sheets("data").Cells(fRow, 10).Value = Range("G8:G9").Value Sheets("data").Cells(fRow, 11).Value = Range("B11:I24").Value Sheets("data").Cells(fRow, 12).Value = Range("B71").Value Sheets("data").Cells(fRow, 13).Value = Range("C71").Value Sheets("data").Cells(fRow, 14).Value = Range("B73").Value Sheets("data").Cells(fRow, 15).Value = Range("C73").Value Sheets("data").Cells(fRow, 16).Value = Range("B75").Value Sheets("data").Cells(fRow, 17).Value = Range("C75").Value   ’・・・・全部でfRow122まであります End Sub

  • EXCEL VBAの配列でわかりません。

    こんなコードがあるのですが、最後の他のシート(作業中シート)に書き込もうとするとエラーになってしまいます。”Sheets("作業中").”を抜くと同じシートに結果は返ってくるのですが…。コードの内容は、ある範囲のある列から空白ではないセルを探し出してその行のデータを配列で汲み取り、他のシートに一括で洗い出すというものです。 Sub 作業中() Dim myRow As Long Dim Data As Variant Dim WC() As Variant Dim WCE() As Variant myRow = Range("H1").CurrentRegion.Rows.Count Data = Range("H1:M" & myRow).Value For i = 1 To myRow If Data(i, 5) <> "" Then a = a + 1 Else b = b + 1 End If Next ReDim WC(a) ReDim WCE(b) c = 0 d = 0 For i = 1 To myRow If Data(i, 5) <> "" Then WC(c) = Range("H" & i & ":K" & i).Value c = c + 1 Else WCE(d) = Range(Cells(i, 8), Cells(i, 11)).Value d = d + 1 End If Next For i = 0 To a Range(Cells(i + 1, 15), Cells(i + 1, 18)).Value = WC(i) Next For i = 0 To b Range(Cells(i + 1, 19), Cells(i + 1, 22)).Value = WCE(i) Next e = Range(Cells(1, 15), Cells(a, 18)).Value Sheets("作業中").Range(Cells(1, 1), Cells(a, 4)).Value = e End Sub ちなみに同じシートから↓のコードを実行するとうまくいきます。 なぜ~??わからな~い??おしえてくださーい!! Sub test() Dim a As Variant a = Range("H1:K4") Sheets("作業中").Range("N1:Q4") = a End Sub

  • エクセルVBAのフィルター機能について

    こんにちわ! エクセルのVBAを使って複数の条件を入力すると結果シートへ吐き出すプログラムを組み込んでいますが、下から五行目のCriteriaRange:=Sheets("検索").Range("A1:R2"), _の.Range("A1:R2")を変更した際に.Range("A1:R3")にすれば条件を指定できるのですがその状態で条件を一つだけ入力し抽出すると抽出できずすべてのデーターが吐き出されてしまいます。 ただし二行抽出データーを埋めるとそのとおりに抽出され結果シートへ吐き出されます。 抽出する条件を入力する際、一つの時もあれば二つの時もあります。そういった事を回避するにはどうすればいいでしょうか? Sub OutputRec() Application.ScreenUpdating = False Sheets("結果").Activate Cells.Clear Sheets("検索").Range("A1").Value = Sheets("DATA").Range("A1").Value Sheets("検索").Range("B1").Value = Sheets("DATA").Range("B1").Value Sheets("検索").Range("C1").Value = Sheets("DATA").Range("C1").Value Sheets("検索").Range("D1").Value = Sheets("DATA").Range("D1").Value Sheets("検索").Range("E1").Value = Sheets("DATA").Range("E1").Value Sheets("検索").Range("F1").Value = Sheets("DATA").Range("F1").Value Sheets("検索").Range("G1").Value = Sheets("DATA").Range("G1").Value Sheets("検索").Range("H1").Value = Sheets("DATA").Range("H1").Value Sheets("検索").Range("I1").Value = Sheets("DATA").Range("I1").Value Sheets("検索").Range("J1").Value = Sheets("DATA").Range("J1").Value Sheets("検索").Range("K1").Value = Sheets("DATA").Range("K1").Value Sheets("検索").Range("L1").Value = Sheets("DATA").Range("L1").Value Sheets("検索").Range("M1").Value = Sheets("DATA").Range("M1").Value Sheets("検索").Range("N1").Value = Sheets("DATA").Range("N1").Value Sheets("検索").Range("O1").Value = Sheets("DATA").Range("O1").Value Sheets("検索").Range("P1").Value = Sheets("DATA").Range("P1").Value Sheets("検索").Range("Q1").Value = Sheets("DATA").Range("Q1").Value Sheets("検索").Range("R1").Value = Sheets("DATA").Range("R1").Value Sheets("DATA").Range("A1").CurrentRegion.AdvancedFilter _ Action:=xlFilterCopy, _ CriteriaRange:=Sheets("検索").Range("A1:R2"), _ CopyToRange:=Sheets("結果").Range("A1"), _ Unique:=False Sheets("結果").Columns("A:R").AutoFit Application.ScreenUpdating = True End Sub

  • 顧客番号を指定して印刷するには?

    別シートに印刷用のレイアウトを作成し、更に別シートで印刷設定を行っています。 その印刷設定のページには、印刷開始顧客番号 印刷終了顧客番号とセルを作り、そこで顧客番号を指定して連続印刷したいのですが、今の状況だと、For MyCounter 1 to 5の5の部分を変え残りは手動で入力という方法で印刷しています。 顧客番号のみで連続印刷する為にはどうすれば宜しいのでしょうか? 宜しくお願いいたします。 ---------------------------------------------------------------- Sub 連続印刷2() Dim mycounter As Integer Dim sita1 As Integer Dim migi1 As Integer mycounter = 1 sita1 = Sheets("設定2").Cells(4, 2) migi1 = Sheets("設定2").Cells(5, 2) For mycounter = 1 To 5 Sheets("レイアウト2").Select Range("O2").Value = Sheets("住所録(会社)").Cells((mycounter - 1) * 13 + 2, 1) Range("O6").Value = Sheets("住所録(会社)").Cells((mycounter - 1) * 13 + 3, 1) Range("O10").Value = Sheets("住所録(会社)").Cells((mycounter - 1) * 13 + 4, 1) Range("O14").Value = Sheets("住所録(会社)").Cells((mycounter - 1) * 13 + 5, 1) Range("O18").Value = Sheets("住所録(会社)").Cells((mycounter - 1) * 13 + 6, 1) Range("O22").Value = Sheets("住所録(会社)").Cells((mycounter - 1) * 13 + 7, 1) Range("O26").Value = Sheets("住所録(会社)").Cells((mycounter - 1) * 13 + 8, 1) Range("O30").Value = Sheets("住所録(会社)").Cells((mycounter - 1) * 13 + 9, 1) Range("O34").Value = Sheets("住所録(会社)").Cells((mycounter - 1) * 13 + 10, 1) Range("O38").Value = Sheets("住所録(会社)").Cells((mycounter - 1) * 13 + 11, 1) Range("O42").Value = Sheets("住所録(会社)").Cells((mycounter - 1) * 13 + 12, 1) Range("O46").Value = Sheets("住所録(会社)").Cells((mycounter - 1) * 13 + 13, 1) Range("O50").Value = Sheets("住所録(会社)").Cells((mycounter - 1) * 13 + 14, 1) Range(Cells(1, 1), Cells(sita1, migi1)).Select Selection.PrintOut Copies:=Sheets("設定2").Cells(6, 2) Next End Sub

専門家に質問してみよう