
いつもお世話になっております
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列のみ
を抽出させる場合どのようにしたらよいのか、アドバイスをお願いします
できたら、抽出後、印刷までできるようなやり方がもっと簡単なのがあれば、教えていただけると助かります
色々勉強してはいるのですが、今一つわからないので、よろしくお願いします
No.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
で良い
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
vba 2つの条件が一致したら...
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
Changeイベントでの複数セルの...
-
B列の最終行までA列をオート...
-
VBA 何かしら文字が入っていたら
-
【VBA】2つのシートの値を比較...
-
Cellsのかっこの中はどっちが行...
-
IIF関数の使い方
-
C# dataGridViewの値だけクリア
-
VBAを使って検索したセルをコピ...
-
エクセル 2つの表の並べ替え
-
VBAコンボボックスで選択した値...
-
二つのリストを比べて部分一致...
-
VBAのFind関数で結合セルを検索...
-
DataGridViewに空白がある場合...
-
VBAで、特定の文字より後を削除...
-
VBAで指定範囲内の空白セルを左...
-
【Excel VBA】カンマと改行コー...
-
VBAでのリスト不一致抽出について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで、あるセルの値に応じて...
-
Worksheets メソッドは失敗しま...
-
Cellsのかっこの中はどっちが行...
-
vba 2つの条件が一致したら...
-
【VBA】2つのシートの値を比較...
-
B列の最終行までA列をオート...
-
IIF関数の使い方
-
URLのリンク切れをマクロを使っ...
-
VBAを使って検索したセルをコピ...
-
DataGridViewに空白がある場合...
-
VBA 何かしら文字が入っていたら
-
VBAのFind関数で結合セルを検索...
-
複数の列の値を結合して別の列...
-
VBAでのリスト不一致抽出について
-
データグリッドビューの一番最...
-
VBAで指定範囲内の空白セルを左...
-
rowsとcolsの意味
-
【Excel VBA】 B列に特定の文字...
-
VBAで、特定の文字より後を削除...
-
エクセル 2つの表の並べ替え
おすすめ情報