VBA で重複する番号があるときは値を貼り付けない

このQ&Aのポイント
  • VBAを使用して、重複する番号がある場合には値を貼り付けない方法について質問しています。
  • 具体的には、登録シートのセルA2の値が顧客情報シートのB列のどこかに既に存在している場合は、値を貼り付けずに販売情報シートに値を貼り付けたいとしています。
  • また、各シートに入力した値を貼り付ける際に、A2より下の行に順番に連番をつけたいという要望もあります。
回答を見る
  • ベストアンサー

VBA 重複する番号があるときは値を貼り付けない

すみません。 理解しているのが少しなので、ちょっとシンプルなVBAを書いています。 1つのブックに 登録シート =Sheets("登録")           顧客情報シート=Sheets("顧客情報")          販売情報シート=Sheets("販売情報")          売り上げシート=Sheets("売り上げ") 登録シートのボタンを押すと、登録シートに入力した情報が、 各シートに分かれて値が入るようにしています。 下記がコードです。 Private Sub CommandButton1_Click() Dim row As Integer ★★★ row = WorksheetFunction.CountA(Sheets("顧客情報").Columns(2)) + 1 Sheets("顧客情報").Cells(row, 2).Value = Range("A2").Value Sheets("顧客情報").Cells(row, 3).Value = Range("A5").Value Sheets("顧客情報").Cells(row, 4).Value = Range("B8").Value ★★★ row = WorksheetFunction.CountA(Sheets("販売情報").Columns(2)) + 1 Sheets("販売情報").Cells(row, 2).Value = Range("C26").Value Sheets("販売情報").Cells(row, 3).Value = Range("J1").Value row = WorksheetFunction.CountA(Sheets("売り上げ").Columns(2)) + 1 Sheets("売り上げ").Cells(row, 2).Value = Range("H1").Value Sheets("売り上げ").Cells(row, 3).Value = Range("K6").Value End Sub もっと簡単な書き方あるよ。。。と言われるでしょうが、 私が理解して修正等ができるのが、上記でした。。 やりたいことは、2点です。 (1)重複は貼り付けをしない。  登録シートのセル A2に入った数字が、顧客情報シートのB列のどこかに、  既に入力がされていた場合は、★★★で囲まれた部分の値を貼り付けず、  その先の販売情報のシートに貼り付ける作業へと進めたい。  IF などを使えばできますでしょうか?   (2)各シートに入力したものを貼り付けた際、A2より下から順番に各シートのCells(row, 1)の位置に、連番をつけたい。 何卒宜しくお願い申し上げます。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

初心者さんが一番によくやる失敗ですが、rowなどの予約語を変数に使っては絶対にいけません。 >既に入力がされていた場合は…作業へと進めたい。 「あるか無いか」if文で検査して、無ければスキップするだけです >連番を付けたい 今のあなたのマクロから、各シートには「2行目からデータを詰めて転記していく」ことが前提になっています。 なのでふつーに行番号-1が連番です 作成例: private sub CommandButton1_Click() dim LastRow as long ’注意 if application.countif(worksheets("顧客情報").range("B:B"), range("A2").value) = 0 then lastrow = worksheets("顧客情報").cells(rows.count, "B").end(xlup).row + 1 worksheets("顧客情報").cells(lastrow, "A").value = lastrow - 1 Sheets("顧客情報").Cells(lastrow, 2).Value = Range("A2").Value Sheets("顧客情報").Cells(lastrow, 3).Value = Range("A5").Value Sheets("顧客情報").Cells(lastrow, 4).Value = Range("B8").Value end if lastrow = worksheets("販売情報").range("B65536").end(xlup).row + 1 worksheets("販売情報").cells(lastrow, "A") = lastrow - 1 Sheets("販売情報").Cells(lastrow, 2).Value = Range("C26").Value Sheets("販売情報").Cells(lastrow, 3).Value = Range("J1").Value lastrow = worksheets("売り上げ").cells(rows.count, 2).end(xlup).offset(1).row worksheets("売り上げ").cells(lastrow, 1) = lastrow - 1 Sheets("売り上げ").Cells(lastrow, 2).Value = Range("H1").Value Sheets("売り上げ").Cells(lastrow, 3).Value = Range("K6").Value end sub >と言われるでしょうが、…上記でした。。 色々手を入れて見やすくする等、工夫の余地が沢山あるマクロですが、とにかく一切余計な事をしてくれるなという意味ですよね。

riorin_08
質問者

お礼

ありがとうございます!! いろいろと何度かやっているうちに、よくわからず動かなくなることが多く、 情けないことに、唯一、数十回別のバージョンやらアレンジやら加えて修正が可能だったのです。 >一切余計な事をしてくれるな  ではなく、  「本気でわからないので、高度なことを教えていただいても、   理解できずお手間取らせるだけになっちゃいます。   ごめんなさい」っっと言う意味です。すみません。 構文をまとめたり、いろいろやったことはあるのですが、余計袋小路で。。。 必要に駆られて仕事の事務作業で使っているので、  使いたいマクロはいつもほぼ同じで、マクロをあまりじっくり勉強しておらず、 お手数おかけしました。 助かりました。 ありがとうございました

関連するQ&A

  • エクセル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 で2つのプロシージャを一つにまとめたい

    いつもここにはお世話になっており、ありがとうございます。 さて、タイトルにもありました通り、下記2つのプロシージャでコマンドボタンを設定して、実行しておりますが、これを一つのプロシージャ(ボタン)にまとめたく、ご指導お願いいたします。 ○作ろうとしているVBAの概要 1)EXCELのデータベースで、一枚目の「inputシート」に入力し、2枚目の「dataシート」でデータをどんどん格納していきます。 2)データは、「顧客CDボタン」で管理しており、これをキーとしています。 3)「顧客CD」は[inputシート」ではC4セル、「dataシート」ではA列にで管理しています。 3)データは新規にデータを入力したときの登録ボタン(一つ目のプロシージャ)、既存のデータを編集して、上書きするときの、変更登録ボタン(二つ目のプロシージャ)があります。 ○相談したい内容 「登録ボタン」と「変更」ボタンを一つにまとめて、ひとつのボタンとして、新規にデータを登録するときも、変更したデータを登録するときも、同じボタンで行えるようにしたい。 '■1つ目のプロシージャー Private Sub CommandButton1_Click() '登録ボタン Dim row As Integer row = WorksheetFunction.CountA(Sheets("data").Columns(1)) Sheets("data").Cells(row, 2).Value = Range("C5").Value row = WorksheetFunction.CountA(Sheets("data").Columns(1)) Sheets("data").Cells(row, 3).Value = Range("C6").Value row = WorksheetFunction.CountA(Sheets("data").Columns(1)) Sheets("data").Cells(row, 4).Value = Range("C7").Value row = WorksheetFunction.CountA(Sheets("data").Columns(1)) Sheets("data").Cells(row, 5).Value = Range("F5").Value ActiveWorkbook.Save End Sub '■2つ目のプロシージャー Private Sub CommandButton3_Click() '変更ボタン Dim fRange As Range Dim fRow As Long If (Range("C4").Value = "") Then '顧客CDが入力されていない? MsgBox "顧客コードを入力してください。", vbExclamation Exit Sub End If Set fRange = Sheets("data").Columns(1).Find(What:=Range("C4").Value, _ LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows) If (fRange Is Nothing) Then '見つからなかった? MsgBox "入力された顧客コードが存在しません。", vbExclamation Exit Sub End If fRow = fRange.row '検索された顧客DCの行位置を求める Sheets("data").Cells(fRow, 2).Value = Range("C5").Value Sheets("data").Cells(fRow, 2).Value = Range("C5").Value Sheets("data").Cells(fRow, 2).Value = Range("C5").Value Sheets("data").Cells(fRow, 3).Value = Range("F5").Value

  • VBAについて教えて下さい

    EXCEL2010を使用中。 独学で、Web上で色々検索したものをパクリながら VBAを組んでるようなレベルです。 今回教えて頂きたい内容ですが、 カード型の入力シート「Sheet名:入力」を作成して、 登録ボタンでデータベースシート「Sheet名:スケジュール」に 書き足していくような業務スケジュール表を作成中です。 わざわざそんな手のこんだものを 作らなくてもと思われるかもしれませんが 諸事情があっての事なので 登録ボタンのVBAは Private Sub 登録_Click() Dim row As Integer row = WorksheetFunction.CountA(Sheets("スケジュール").Columns(1)) + 1 Sheets("スケジュール").Cells(row, 1).Value = Range("Q2").Value Sheets("スケジュール").Cells(row, 2).Value = Range("G6:G7").Value Sheets("スケジュール").Cells(row, 3).Value = Range("G8:G9").Value Sheets("スケジュール").Cells(row, 4).Value = Range("G10:G11").Value Sheets("スケジュール").Cells(row, 5).Value = Range("G12:G13").Value Sheets("スケジュール").Cells(row, 6).Value = Range("G14:G15").Value Sheets("スケジュール").Cells(row, 7).Value = Range("G16:G17").Value Sheets("スケジュール").Cells(row, 8).Value = Range("G18:G19").Value Sheets("スケジュール").Cells(row, 9).Value = Range("G20:G21").Value Sheets("スケジュール").Cells(row, 10).Value = Range("G22:G23").Value Sheets("スケジュール").Cells(row, 11).Value = Range("G24:G25").Value Sheets("スケジュール").Cells(row, 12).Value = Range("M6:M7").Value Sheets("スケジュール").Cells(row, 13).Value = Range("M8:M9").Value Sheets("スケジュール").Cells(row, 14).Value = Range("M10:M11").Value Sheets("スケジュール").Cells(row, 15).Value = Range("M12:M13").Value Sheets("スケジュール").Cells(row, 16).Value = Range("M14:M15").Value Sheets("スケジュール").Cells(row, 17).Value = Range("M16:M17").Value Sheets("スケジュール").Cells(row, 18).Value = Range("M18:M19").Value Sheets("スケジュール").Cells(row, 19).Value = Range("M20:M21").Value Sheets("スケジュール").Cells(row, 20).Value = Range("M22:M23").Value Sheets("スケジュール").Cells(row, 21).Value = Range("M24:M25").Value Sheets("スケジュール").Cells(row, 22).Value = Range("S6:S7").Value Sheets("スケジュール").Cells(row, 23).Value = Range("S8:S9").Value Sheets("スケジュール").Cells(row, 24).Value = Range("S10:S11").Value Sheets("スケジュール").Cells(row, 25).Value = Range("S12:S13").Value Sheets("スケジュール").Cells(row, 26).Value = Range("S14:S15").Value Sheets("スケジュール").Cells(row, 27).Value = Range("S16:S17").Value Sheets("スケジュール").Cells(row, 28).Value = Range("S18:S19").Value Sheets("スケジュール").Cells(row, 29).Value = Range("S20:S21").Value Sheets("スケジュール").Cells(row, 30).Value = Range("S22:S23").Value Sheets("スケジュール").Cells(row, 31).Value = Range("S24:S25").Value Sheets("スケジュール").Cells(row, 32).Value = Range("S26:S27").Value Range("Q1").Select End Sub としています。 この時、移行するセル内の文字数が指定文字数を超えると、 移行した先のセルの書式設定を「折り返して全体を表示する」に 設定変更をしたいですのですが、その方法について ご教授いただけないでしょうか? 因みに現在の設定は、「縮小して全体を表示する」としています。

  • VBAについて

    Excel2010使用。 VBA初心者である為、 何度か質問させていただきながら 回答いただいた内容に修正を加えつつ、 思いのものがひと通りできたと 解決していたつもりだったのですが、 動作確認をしたところ、一部不具合が生じました。 自己解決を試みているのですが、解決できず困っております。 どなたかお助けいただけないでしょうか? Private Sub 登録_Click() '登録ボタン押下で勤務表にデータを登録 Dim row As Integer Application.ScreenUpdating = False '画面更新の抑制 row = WorksheetFunction.CountA(Sheets("勤務表").Columns(1)) + 1 myCol = 1 Sheets("勤務表").Cells(row, 1).Value = Range("T2").Value Sheets("勤務表").Cells(row, 34).Value = Range("T1").Value For i = 8 To 22 Step 7 For j = 6 To 26 Step 2 If IsEmpty(Cells(j, i)) Then Exit For Else myCol = myCol + 1 With Sheets("勤務表").Cells(row, myCol) .Value = Cells(j, i).Value If LenB(StrConv(Cells(j, i).Value, vbFromUnicode)) > 8 Then '(1) ここを修正 .WrapText = True .Font.Size = 6 End If End With End If Next j Next i Sheets("勤務表").Cells(5, 22).Value = Range("P3").Value '月末日を移す Range("T1").ClearContents '連続入力の為、消去 Range("E6:G25").ClearContents Range("L6:N25").ClearContents Range("S6:U27").ClearContents Application.ScreenUpdating = True '抑制の解除 Range("T1").Select End Sub 上記コードを作成し、 入力用のシートから勤務表シートに 1人ずつ登録していくようにしております。 入力用のシートのH6:H24、O6:O24、V6:V26 (シートの都合により2行を1行に結合しています) このマクロを実行したところ、 V24までは転記ができているのですが、 V26だけが転記できない状況となっています。 CellsでいくとCells(22,26)まで範囲に入っていると 思うのですが・・・。 どこがおかしいのでしょうか?

  • 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

  • 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の値)が出来ません。 どこが間違いか教えていただけないでしょうか。

  • 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

  • VBAについて質問です。

    VBAについて質問です。 まとまったデータがあるところから検索したい月及び各項目のデータを検索し、項目シート事に抽出するという作業を行なっています。そこで問題がでました。6月にはデータはあるが、5月にはデータはない。 そうすると以下のコードの場合デバックが入り、他の検索が出来ません。 どうしたらよいのでしょうか? 分かる方がいらっしゃいましたらどうかお願い致します。 'シートの変更 Range("B30").Select Sheets("東京").Select '●Sheet2書込み行 Sheets("東京").Range("A5").CurrentRegion.Clear Sheets("東京").Range("A5:F5").Value = _ Array("依頼書No.", "受付日日", "担当者", "枚数", "工数", "備考") Row2 = 5 For R = 2 To Sheets("日報").Cells(Rows.Count, "A").End(xlUp).Row If Sheets("東京").Range("A2") = Sheets("日報").Cells(R, "A") And _ Sheets("東京").Range("B2") = Month(Sheets("日報").Cells(R, "C")) Then Row2 = Row2 + 1 Sheets("東京").Cells(Row2, "A") = Sheets("日報").Cells(R, "B") Sheets("東京").Cells(Row2, "B") = Sheets("日報").Cells(R, "D") Sheets("東京").Cells(Row2, "C") = Sheets("日報").Cells(R, "F") Sheets("東京").Cells(Row2, "D") = Sheets("日報").Cells(R, "I") Sheets("東京").Cells(Row2, "E") = Sheets("日報").Cells(R, "K") Sheets("東京").Cells(Row2, "F") = Sheets("日報").Cells(R, "L") End If Next R '●抽出結果を日付で並べ替え If Row2 = 5 Then MsgBox "該当データなし!" Else Sheets("東京").Range("A5:F" & Row2).Sort _ Key1:=Range("B6"), Order1:=xlAscending, _ Header:=xlYes, OrderCustom:=1, MatchCase:=False, _ Orientation:=xlTopToBottom, SortMethod:=xlPinYin End If Sheets("東京").Select Range("B5:B200").Select Selection.NumberFormatLocal = "yyyy/m/d"     Rows("5:5").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .ShrinkToFit = False .MergeCells = False End With このあとに式を入れて、罫線を入れてコピーして、というコードが入っています。 どうぞ宜しくお願い致します。

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

    別シートに印刷用のレイアウトを作成し、更に別シートで印刷設定を行っています。 その印刷設定のページには、印刷開始顧客番号 印刷終了顧客番号とセルを作り、そこで顧客番号を指定して連続印刷したいのですが、今の状況だと、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

  • VBAでエラー時にメッセージを表示したい

    こんばんわ! エクセルのVBAについて質問です。 以下のように組み込みDATAシートからフィルターをかけて抽出シートへ結果を表示するようになっていますが、DATAシートにデーターがない状態でするとエラーになりますがその際にDATAシートにデーターが入っていませんとメッセージボックスが出る様にするにはどうすればいいでしょうか? まだまだ勉強中の身ですので教えて頂ければ有難いです。 お手数ですが宜しくお願いします。 Sub 抽出() Application.ScreenUpdating = False Sheets("抽出").Activate Cells.Clear Sheets("抽出").Range("A1").Value = Sheets("DATA").Range("A2").Value Sheets("抽出").Range("B1").Value = Sheets("DATA").Range("B2").Value Sheets("抽出").Range("C1").Value = Sheets("DATA").Range("C2").Value Sheets("抽出").Range("D1").Value = Sheets("DATA").Range("D2").Value Sheets("DATA").Range("A3").CurrentRegion.AdvancedFilter _ Action:=xlFilterCopy, _ CriteriaRange:=Sheets("検索").Range("A1:D2"), _ CopyToRange:=Sheets("抽出").Range("A1"), _ Unique:=False Sheets("抽出").Columns("A:D").AutoFit Application.ScreenUpdating = True End Sub

専門家に質問してみよう