スマホに会話を聞かれているな!?と思ったことありますか?

いつもお世話になっております

Excelシートで、次のような表を作っています


[Sheet1]
A/B/C/D/E
センター/氏名/生年月日/契約開始日/契約終了日

※契約終了日のセルには計算式が入っていて、契約開始から18か月後の日付が出るようにしています。
また、G1セルに「契約終了月」、G2に「18」と入っています

そこで、[Sheet2]に必要な行のみを抽出し、印刷するまでをしたいのですが、どのようにしたら良いのかわかりません


今できているのは、こんな感じです

Private Sub CommandButton1_Click()
Worksheets("Sheet2").Select
Worksheets("Sheet2").Range("A:E").Clear
With Worksheets("Sheet1")
.Range("A:E").Copy Worksheets("Sheet2").Range("A1")
.Range("A:E").AdvancedFilter _
Action:=xlFilterCopy, _
criteriarange:=.Range("G1:G2"), _
CopyToRange:=Worksheets("Sheet2").Range("A:F"), _
unique:=False
End With
If Application.CountA(Worksheets("Sheet2").Range("A:A")) > 1 Then
MsgBox "今月末で契約終了です", vbOKOnly + vbInformation, "確認"
If MsgBox("印刷しますか?", vbYesNo + vbQuestion, "印刷") = vbYes Then
Worksheets("Sheet2").PrintOut
End If
Else
MsgBox "今月で契約終了となる方はいません", vbOKOnly + vbInformation, "確認"
End If
Sheets("top_page").Select
Range("A1").Select
End Sub

※top_pageシートでコマンドボタンをクリックするとマクロ実行できるようにしています


連続する列の抽出の仕方はわかるのですが、例えば
A列、B列、E列のみ
を抽出させる場合どのようにしたらよいのか、アドバイスをお願いします

できたら、抽出後、印刷までできるようなやり方がもっと簡単なのがあれば、教えていただけると助かります

色々勉強してはいるのですが、今一つわからないので、よろしくお願いします

A 回答 (1件)

まず表題が>、必要な列を抽出する方法


となっているが
むしろ、必要な行を抽出する方法 、でしょう。その後不要列は表示しないを希望らしいがまず、行の抜き出しの問題でしょう。
ーー
まずデータ例が挙げられていないことが困る。
コードだけ書き連ねて、何をしたいのか書いてないのは、回答者にコードを読み解けとなって、質問する立場としては良くない。
>criteriarange:=.Range("G1:G2"), _
のRange("G1:G2"), _の中身が書いてないので、テストも「やりにくい。
ーーー
>A列、B列、E列のみ
を抽出させる場合どのようにしたらよいのか、アドバイスをお願いします。
不要列を削除ないしは非表示にしてはどうですか。
エクセルのフィルタ、フィルタオプションの設定では必要項目は指定できないのではないかな。
もしどうしてもやりたいなら、Sheet1の各行について、条件に合って居るかIF分で判断し、合致しておれば
必要な列だけ、Sheet2に書き出す。
このコードも常々回答で示している。
その場合は
シート名を明示してセルデータを扱うこと
コピー貼り付けでなく、代入文でセルの値を持っていくで済ませる。書式が必要なら下行、や最後などで別途手当てする。
のが初心者にはわかりやすいと思う。
Sub test04()
Sheets("Sheet1").Range("F5").Copy Destination:=Sheets("Sheet2").Range("C5")
End Sub
のようなことも可能だが。
セル単位でデータを扱うこと。ただし複数列対象Copyでも連続する列ではCopyが使えるが。列数が多くなければセル単位に統一しては。
ーー
>抽出後、印刷までできるようなやり
データが完成したあとの印刷のコードは、、マクロの記録を採れば判る。
Worksheets("Sheet2").PrintOut
はシートのPrintOutだが、(シート).Range(・・).Printout
を学んでは。
多分唯一データ情況で場合によって変わるのは、最終行(データ行数)だけでしょう。
これをとらえるコードなど毎日ここに出ている。
Googleで「エクセル VBA 最終行」で照会して見ること。
ーー
>Worksheets("Sheet2").Select
Worksheets("Sheet2").Range("A:E").Clear
のようなSelect方式は早く改めること(マクロの記録から来る、クセ)
Sub test03()
Worksheets("Sheet2").Range("A:E").Clear
End Sub
で良い
    • good
    • 0
この回答へのお礼

ありがとうございます。
削除か非表示で考えてみます。

お礼日時:2011/02/22 11:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報