いつもお世話になっております
下記のコードは
シート4にあるデータを
シート1に貼り付けるコードなのですが、
シート4にあるデータはオートフィルタで
抽出されています。
抽出されているのだけを シート1に貼り付けたいので図化、
全て貼り付けてしまいます。
わかる方おしえてくれませんでしょうか
Dim x
Dim wS4 As Worksheet
Set wS4 = Worksheets("4")
With wS4
x = wS4.Range("B2", .Cells(Rows.Count, 2).End(xlUp)).Resize(, 5).Value
End With
Dim wS As Worksheet
Set wS = Worksheets("1")
With wS.Range("B5")
.Clear
End With
With wS4
For i = 1 To .Cells(Rows.Count, 2).End(xlUp).Row
If .Rows(i).Hidden = False Then
With wS.Range("B5")
.Resize(UBound(x), UBound(x)) = x
End With
End If
Next
End With
Set wS4 = Nothing
Set wS = Nothing
No.1ベストアンサー
- 回答日時:
こんばんは
コードを読むと何をなさりたいのか・・・分かりません
配列xの作り方か・・取り出し方を説明するべきか?
(ご質問のコードは少し添削しています)
①
x = .Range("B2", .Cells(.Rows.Count, 2).End(xlUp)).Resize(, 5).Value
フィルターの絞り込みに関係なく指定しているセル範囲の値をすべて配列に代入しています。
もっとも、表示セルのみを纏めてVariant配列に入れることは出来ません
表示範囲のみを配列に入れる方法は後で
②
With wS4
For i = 1 To .Cells(Rows.Count, 2).End(xlUp).Row
If .Rows(i).Hidden = False Then
With wS.Range("B5")
.Resize(UBound(x), UBound(x)) = x
wS4表示行でwS.Range("B5")基準で配列xを出力していますが
For i = 1 To で何度も同じ処理を行う事が希望なのでしょうか?
もし、配列は1行のみ(複数行でも良いけれど)で繰り返すなら
Range("B5")は変数であるはず・・または、ResizeはOffsetなのか?
もし1つでも非表示行があったら・・と言う事であれば、処理後 Exit for が必要ですね
For i = 1 To .Cells(Rows.Count, 2).End(xlUp).Row
If .Rows(i).Hidden = False Then
のコードがなぜ必要なのかが分かりません。
単純にwS4の絞り込んだ範囲をwS.Range("B5")基準範囲に代入するのであれば、コピペの方が簡単です・・(範囲指定・・Ctrl+g・・などから基本となるコードの記録も出来るかと・・)
しかし、処理速度などを考慮し配列にしたいと言う事であれば、
一例です
Dim x()
Dim wS4 As Worksheet
Set wS4 = Worksheets("4")
Dim i As Long, j As Long
Dim Rng As Range, r As Range
Dim wS As Worksheet
Set wS = Worksheets("1")
With wS4
Set Rng = .Range("B2", .Cells(.Rows.Count, 2).End(xlUp)).SpecialCells(xlCellTypeVisible) '1列の可視セル範囲
ReDim x(1 To Rng.Count, 1 To 5) 'Resize(,5)
For Each r In Rng
i = i + 1
For j = 1 To 5
x(i, j) = r.Cells(1, j) 'r基準のcell位置
Next
Next
End With
With wS
.Cells.ClearContents
.Range("B5").Resize(UBound(x, 1), UBound(x, 2)) = x
End With
No.2
- 回答日時:
オートフィルタでデータを抽出し、別シートに貼り付ける
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/p …
こちらの際とは最初の頃参考になりましたよ。
配列での処理って事に拘るのであるなら、確か少し前にも質問立ててませんでしたか?
その時どうなったのかはわかりません。
⇒既に解決済みになってたと思います。
少なくとも配列変数:x に格納したデータ量より
>If .Rows(i).Hidden = False Then
この分少なくなりますよね?
だから別の配列が必要でしょうけど、非表示を除外するなら結局配列を調べるのではなくセルオブジェクトを調べるので、あまり意味がないような感じが個人的にします。
また手作業でやってみると、非表示かどうかは関係なく『表示されている物だけ』コピペできることが確認出来ますよ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Excel(エクセル) vba 転記するときの最終行について 2 2022/09/03 09:31
- Visual Basic(VBA) 形式を選択して貼り付け 以下のコードで「元」シートと「先」シートのA列に同じ値があったら指定範囲をコ 5 2022/11/11 07:30
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) worksheets & rows メソッドは失敗しました。のエラー回避のやり方 1 2022/06/07 13:58
- Visual Basic(VBA) 【VBA】特定のワードが入っている行全体を塗りつぶしたい 4 2022/04/20 15:22
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) 集計シートA列のコードと一致する右に並んだシート名(コード)の3行目から10行目をコピーして貼り付け 4 2022/08/18 15:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 検索して一致したセル...
-
別のシートから値を取得するとき
-
同じ作業を複数のシートに実行...
-
ユーザーフォームに入力したデ...
-
シートが保護されている状態で...
-
シートをコピーして コピーした...
-
エクセルで通し番号を入れてチ...
-
イベントの違いを教えてください。
-
ExcelVBA シート名を複数セルか...
-
VBA 存在しないシートを選...
-
コマンドボタンをクリックでシ...
-
Excel VBA マクロ あるフォルダ...
-
Excel マクロについての相談
-
特定の文字を含むシートだけマ...
-
XL:BeforeDoubleClickが動かない
-
Excelマクロのエラーを解決した...
-
エクセルのマクロについて教え...
-
エクセルVBA Ifでシート名が合...
-
vbaマクロについて シート1のA...
-
vbaでworksheetfunctionでの複...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別のシートから値を取得するとき
-
ユーザーフォームに入力したデ...
-
Excelマクロのエラーを解決した...
-
excelのマクロで該当処理できな...
-
同じ作業を複数のシートに実行...
-
ExcelVBA シート名を複数セルか...
-
【ExcelVBA】全シートのセルの...
-
Excel マクロについての相談
-
VBA 存在しないシートを選...
-
実行時エラー'1004': WorkSheet...
-
特定の文字を含むシートだけマ...
-
ExcelのVBAのマクロで他のシー...
-
ブック名、シート名を他のモジ...
-
XL:BeforeDoubleClickが動かない
-
VBA 複数の各シートに行を追加...
-
エクセルのシート名変更で重複...
-
【Excel VBA】Worksheets().Act...
-
シートが保護されている状態で...
-
Excel VBA 複数行を数の分だけ...
-
for 文の 繰り返し処理に使える...
おすすめ情報