シート1のA5~E5から下へ、数式が入って数値を表示しています。
オートフィルターで選択して画面に表示されている
E列のE5から下の数値をシート2へ移したいと思います。
シート2への貼り付け方は、
A1,C1,E1戻ってA3,C3,E3と、1セルづつ開けたいです。
同一シート内でオートフィルター無しで1セルづつ開けない
3列は見付けたのですが・・・どなたか教えてください。お願いします。
Sub test()
Dim I As Long
Dim C As Long
C = 1
Application.Calculation = xlManual
Application.ScreenUpdating = False
Sheets("Sheet1").Select
For I = 5 To Cells(Rows.Count, "E").End(xlUp).Offset(1, 0).Row - 1 Step 3
Range("E" & I & ":E" & I + 2).Copy
Range("H" & C ).Select
Selection.PasteSpecial xlPasteValues, Transpose:=True
C = C + 1
Next I
Application.Calculation = xlAutomatic
Application.ScreenUpdating = True
End Sub
No.8ベストアンサー
- 回答日時:
No7です。
>E列の上から5番目の物が来てほしいのですが
処理の対象の始まりをE5セルからにすれば良いと思われます。
スマホからなのでテストも検証もできませんが、No7で対象セル範囲を求めているのは以下の部分です。
Worksheets("Sheet1").UsedRange.Columns(5).SpecialCells(xlCellTypeVisible)
これを4行分下方にスライドするのが一番簡単な対処法ではないかと思います。
具体的には
Worksheets("Sheet1").UsedRange.Columns(5).Offset(4).SpecialCells(xlCellTypeVisible)
としておけば良さそうです。
単純に範囲をずらしているだけなので、最下部に4行分の不要セルが含まれることになってしまいますが、空白を書き写しても空白になるだけのはずですので、害はないものと推測します。
No.7
- 回答日時:
No1です。
>列の挿入は2回ですみますが、行の挿入は、多すぎます。シート2は表示後印刷するだけなのです。
「行の挿入は、多すぎます」の意味がよくわかりません。
繰り返しなので、いくつあっても同じはずなのですが・・・
どうやらフィルターで選別されたセルだけをコピペしたいということらしいと、遅まきながら気が付きました。
ご提示のコードはフィルターとは無関係にコピペしているので、てっきりその内容で良いものとばかり思ってしまいました。
ご提示のコードの様にセル範囲のコピペなどで範囲をまとめて処理する方法と、一つ一つ値を代入してゆく方法などいくつか考えてみましたが、結局、単純な後者の方法が一番簡明かと思います。
すでに、No5様が同様の回答をなさっていますので、ご参考程度に。
>シート2は表示後印刷するだけなのです
とのことですので、シート2は最初に全体をクリアしています。
Sub Sample()
Dim dr, c
Set dr = Worksheets("sheet2").Cells(1, 1)
dr.Worksheet.Cells.Clear
For Each c In Worksheets("Sheet1").UsedRange.Columns(5).SpecialCells(xlCellTypeVisible)
dr.Value = c.Value
Set dr = dr.Offset(, 2)
If dr.Column > 5 Then Set dr = dr.Offset(2, -6)
Next c
End Sub
ありがとうございました。出来ました。
説明が足りずにすみませんでした。
シート2の表示の始まりA1セルに
シート1のE列の最初の物が入るのですね。
フィルターが5行目からなので、
シート2の表示の始まりA1セルに
E列の上から5番目の物が来てほしいのですが、
出来ますでしょうか?
少しいじってみましたが
どこをどのように書き換えればいいのか分かりませんでした。
もう1度お願いできますでしょうか。
よろしくお願いします。
No.5
- 回答日時:
Sub megu()
Dim r1 As Range, r2 As Range
Dim i As Long, cnt As Long, n As Integer
With Worksheets("Sheet1")
Set r1 = .Range("E5", .Cells(Rows.Count, "E").End(xlUp)).SpecialCells(xlCellTypeVisible)
End With
Set r2 = Worksheets("Sheet2").Range("A1")
cnt = Int(r1.Cells.Count / 3) * 3
n = r1.Cells.Count Mod 3
For i = 1 To cnt Step 3
r2.Range("A1").Value = r1.Cells(i).Value
r2.Range("C1").Value = r1.Cells(i + 1).Value
r2.Range("E1").Value = r1.Cells(i + 2).Value
Set r2 = r2.Offset(2)
Next
If n <> 0 Then
If n = 1 Then
r2.Range("A1").Value = r1.Cells(i).Value
ElseIf n = 2 Then
r2.Range("A1").Value = r1.Cells(i).Value
r2.Range("C1").Value = r1.Cells(i + 1).Value
End If
End If
Set r1 = Nothing
Set r2 = Nothing
End Sub
こんな感じですかね?
ちなみにフィルタがかかった状態で実行と言う事になってます。
ありがとうございました。
オートフィルターE列で選別表示なんですね。
他の列で選別したらダメなんですね。
そういう事が出来るとは知りませんでした。
説明不足で申し訳ありませんでした。
選別は主にA~D列で行います。その結果の
E列に画面表示されている物をと言う事です。
少しいじってみましたが分かりませんでした。
色々と返信し申し訳ありませんが、
どこをどのように書き換えればいいのか
もう1度お願いできますでしょうか。
よろしくお願いします。
No.3
- 回答日時:
No.2です。
老眼でよく読み切れなかったみたいですいません。
でもA5~E5を下まで(フィルタで可視セルになっている部分)を
>A1,C1,E1戻ってA3,C3,E3と、1セルづつ開けたいです
とはどういう意味なのでしょう?
貼り付ける際にって事であれば A1,C1,E1 とはどちらのシート(多分シート2とは思いますけど)を指しているのか?
そして仮にその想定があっていたとしたら、シート1のA5~E5×可視セルの行数 のどのデータをどこにって思えますよ。
コピペで値貼り付けの行列変更って部分はこの場合可能なのかと疑問はありますし・・・
No.1
- 回答日時:
こんにちは
>同一シート内でオートフィルター無しで1セルづつ開けない
>3列は見付けたのですが・
一旦、3列にしてから、一列ずつA列、C列、E列にコピペすれば、結果的に、1列おきの3列にペーストできると思いますけれど?
あるいは、シートの2の状態にもよりますが、直接シート2のA~C列に貼り付けた後、B列、C列に対して「列の挿入」を行っても同様の結果になるでしょう。
目的のセルへ直接代入しなければならないような場合は、セル範囲を纏めてのコピペは無理なので、1セルずつのループにすればよいでしょう。
(ご例示のコードのSTEP3をSTEP1にするイメージ)
セル範囲のコピペに比べると若干は時間が掛かるはずですが、行数がものすごくない限り、感覚的にはわからない程度の差だと思います。
オートフィルターで選択表示してあると、シート1で3列にしようとしても、歯抜けになってしまったり、表示されていないセルに表示がはいってしまいます。
列の挿入は2回ですみますが、行の挿入は、多すぎます。シート2は表示後印刷するだけなのです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Visual Basic(VBA) 複数シート一括作成後に、特定範囲の数式は値で貼り付けしたい 3 2022/10/07 11:18
- Visual Basic(VBA) VBA横データを縦にしたいです 2 2023/08/08 19:38
- Visual Basic(VBA) Excel VBA キーワードから列を取得して、さらに空欄行を非表示にする 3 2022/10/21 22:49
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 6 2022/06/08 12:55
- Visual Basic(VBA) 改行ごとに行を追加し、数量を分割 4 2023/07/11 16:39
- Visual Basic(VBA) 【VBA】特定のワードが入っている行全体を塗りつぶしたい 4 2022/04/20 15:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelの「0」だけ非表示、小数...
-
日付が未入力の際はゼロか、空...
-
エクセルで1月0日と表示される!!
-
エクセルで条件に一致したセル...
-
Rangeメソッドは失敗しました。...
-
(Excel)あるセルに文字を入力...
-
複数シートの同じセル内容を1シ...
-
別シートのセルを絶対参照にする
-
Excelシートの保護時にデータの...
-
エクセルの文字
-
Excelにて、カタカナだけのセル...
-
Excelで複数シートの選択セルを...
-
エクセルで20万行あるシート...
-
エクセルで、加筆修正したセル...
-
エクセルのルビがついたセルを...
-
エクセルで別シートからの最大...
-
シート参照で変数を使いたい(EX...
-
EXCELマクロで、シート間でのコ...
-
Aというブックの1というシート...
-
excelでハイパーリンクになって...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの「0」だけ非表示、小数...
-
日付が未入力の際はゼロか、空...
-
エクセルで条件に一致したセル...
-
エクセルで1月0日と表示される!!
-
(Excel)あるセルに文字を入力...
-
別シートのセルを絶対参照にする
-
Rangeメソッドは失敗しました。...
-
Excelシートの保護時にデータの...
-
複数シートの同じセル内容を1シ...
-
エクセルで、加筆修正したセル...
-
シート参照で変数を使いたい(EX...
-
エクセルで複写のように自動入...
-
Excelで複数シートの選択セルを...
-
INDIRECTを使わず excelで複数...
-
ExcelでTODAY関数を更新させな...
-
式の説明をお願いします。
-
excelでハイパーリンクになって...
-
エクセルのルビがついたセルを...
-
Excelでスクロールすると文字が...
-
エクセル ハイパーリンクで画像...
おすすめ情報