![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
以下のコードを使用してメーカー毎にシートを指定して振り分けているのですが
指定した分はしっかりと振り分けられるのですが指定していないメーカー名は用意したシートに
全てコピーされてしまいます。
どこが悪いか分からず、直すところを教えてもらえないでしょうか?
Sub 発注書作成()
Dim m As String, i As Long
Dim arry As Variant
m = "メーカー1,メーカー2,メーカー3,メーカー4,メーカー5,メーカー6,メーカー7,メーカー8,メーカー9,メーカー10,メーカー11"
arry = Split(m, ",")
Worksheets("出荷指図書").Activate
If ActiveSheet.AutoFilterMode = False Then
Range("C8:C18").AutoFilter
End If
'メーカーごとにコピー
Application.ScreenUpdating = False
For i = 1 To 11 'メーカーシートの数
Worksheets("出荷指図書").Activate
ActiveSheet.Range("$C$6:$C$16").AutoFilter Field:=1, Criteria1:=arry(i - 1)
Range("D9:G18").Copy
Worksheets(arry(i - 1)).Activate
Range("A11").PasteSpecial Paste:=xlPasteValues
'お客様名
Worksheets("出荷指図書").Activate
Range("D6").Copy
Worksheets(arry(i - 1)).Activate
Range("E11").PasteSpecial Paste:=xlPasteValues
'発注書印刷
If WorksheetFunction.Sum(Range("C11:C20")) <> 0 Then
ActiveSheet.PrintPreview 'PrintOut
End If
Next
Worksheets("出荷指図書").Activate
ActiveSheet.Range("$C$6:$C$16").AutoFilter
Application.ScreenUpdating = True
End Sub
![「マクロのコードについて教えてください」の質問画像](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/3/543219148_654d8c130b877/M.png)
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
下記でどうでしょうか。
フィルター後、表示された行が0なら、転記しないようにしています。
(プレビューも行いません)
フィルター後の表示行の取得は、
https://www.excel-chunchun.com/entry/20200613-ex …
をそのまま使っています。
Sub 発注書作成()
Dim m As String, i As Long
Dim arry As Variant
m = "メーカー1,メーカー2,メーカー3,メーカー4,メーカー5,メーカー6,メーカー7,メーカー8,メーカー9,メーカー10,メーカー11"
arry = Split(m, ",")
Worksheets("出荷指図書").Activate
If ActiveSheet.AutoFilterMode = False Then
Range("C8:C18").AutoFilter
End If
'メーカーごとにコピー
Application.ScreenUpdating = False
For i = 1 To 11 'メーカーシートの数
Worksheets("出荷指図書").Activate
ActiveSheet.Range("$C$6:$C$16").AutoFilter Field:=1, Criteria1:=arry(i - 1)
Dim displine
displine = ActiveSheet.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count - 1
If displine > 0 Then
Range("D9:G18").Copy
Worksheets(arry(i - 1)).Activate
Range("A11").PasteSpecial Paste:=xlPasteValues
'お客様名
Worksheets("出荷指図書").Activate
Range("D6").Copy
Worksheets(arry(i - 1)).Activate
Range("E11").PasteSpecial Paste:=xlPasteValues
'発注書印刷
If WorksheetFunction.Sum(Range("C11:C20")) <> 0 Then
'ActiveSheet.PrintPreview 'PrintOut
End If
End If
Next
Worksheets("出荷指図書").Activate
ActiveSheet.Range("$C$6:$C$16").AutoFilter
Application.ScreenUpdating = True
End Sub
回答ありがとうございます。
今、詳しくいろいろ調べたところエクセルのfilter関数でも
似たようなことができたのでそちらを使用しようと思います。
また、質問した際はご回答よろしくお願いします
No.1
- 回答日時:
こんにちは
手操作あるいはステップ実行してみれば、すぐにわかると思いますけれど・・・
そういう仕様になっているようです。
Copyメソッドは、通常は、指定された範囲内の「表示セル」だけをコピーしますけれど、「非表示の範囲だけ」を指定してコピーした場合には、そのままその範囲がコピーされるようです。
(多分、コピー対象が何も無いので、指定された範囲をコピーしているのかと)
この結果、ご質問のような事象になっているものと考えられます。
>どこが悪いか分からず、直すところを教えてもらえないでしょうか?
原因は上記ですが、ご提示のままの処理で行うのなら、フィルターの結果を判定してからコピー処理を行えば宜しいかと。
まるっきり考え方を変えても良ければ、
・元シートの一つ分のデータを、メーカー別シートに振り分ける
という処理をデータ分だけループでくりかえせば、こちらでも可能でしょう。
(こちらの場合は、フィルター操作は不要になります)
こんにちは
先日から回答ありがとうございます。
仕様の可能性もあるのですね。
フィルター操作不要の方法で作成してみようかと思います。
また、質問する際はご教授お願いします
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 転記先VBA 一致しているセルがコピーされない 5 2021/11/15 17:23
- Visual Basic(VBA) 空のシートに関数を入れたい 2 2021/12/03 15:08
- Visual Basic(VBA) EXCEL VBA シート貼り付け 3 2021/11/15 12:33
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- Visual Basic(VBA) EXCLE VBA シートクリックしたら該当シートコピー 1 2021/11/11 16:37
- Visual Basic(VBA) 転記VBA エラーが出ます 2 2021/11/15 16:08
- Visual Basic(VBA) VBA シート名が一致した場合の転記内容について 2 2021/11/15 13:07
- Excel(エクセル) Rangeメソッドは失敗しました。globalオブジェクトについて 6 2021/11/21 21:54
- Visual Basic(VBA) Excel VBAでフォルダ内の全テキストファイルの任意データを取得について 7 2021/12/18 16:00
- Excel(エクセル) vba 転記するときの最終行について 2 2022/09/03 09:31
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
サブフォルダに格納されている...
-
IF文、条件分岐の整理方法
-
VBAコードのインデント表示
-
A列に記載されているフォルダ...
-
VB.net(VB)で、フォームにExcel...
-
VBAなくなるの?
-
【ExcelVBA】インデックスが有...
-
vba アクティブシートの名前変...
-
vba 削除
-
エクセルのマクロについて教え...
-
エクセルVBAにて =A1=B1とすれ...
-
VBA 別ブックから条件に合うも...
-
時間短縮のために、テキストフ...
-
ワードVBA どの表か知ることは...
-
エクセルのマクロについて教え...
-
エクセルのVBAコードについて教...
-
VBA指定行削除
-
VBAで大量のファイルをシート名...
-
VBA 別ブックからコピペしたい...
-
配列のペースト出力結果の書式...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAなくなるの?
-
VBAでCOPYを繰り返すと、処理が...
-
vba 削除
-
プログラミング
-
Excelのマクロについて教えてく...
-
Excelのマクロについて教えてく...
-
エクセルのVBAコードについて教...
-
久しぶりのプログラミング
-
ユーザーフォームに別シートか...
-
エクセルVBAコードで教えて下さ...
-
VBA 別ブックからコピペしたい...
-
ExcelのVBAコードについて教え...
-
VBAコードについて教えてくださ...
-
vba アクティブシートの名前変...
-
Excelのマクロについて教えてく...
-
エクセルVBA
-
Geogebraの操作方法について
-
マクロの記録を使用したマクロ...
-
Excel(M365) Vlookup/セル反転(...
-
Excel 範囲指定スクショについ...
おすすめ情報