[[20200503110827]] 『貼りつけ』(たら) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『貼りつけ』(たら)

教えてください。
宜しくお願いします。

シート1はデータです。
シート2セルB10〜Y21に値貼り付けしたいです。

 1.シート2のセルX30がシート1のX列の値と同じなら
   シート1のY列に「1」がある行のB列からY列までを
  シート2の範囲X列の10〜21行目までの該当の行に貼りたい

 2.シート2セルX30の番号がそれ以降のデータは表示させたくない

下記のようにしたいです。

【シート1(データ)】
  A B ・・・  W Y X
1 項目名・・・・・・・・
・ あ い 1 2 ・・・ 1 0201
・ ウ い 4 2 ・・・ 1 0202
・ え お 1 2 ・・・ 3 0202
・ ウ お 3 2 ・・・ 1 0203
・ ・・・・・・・・   1 0204

・ あ い 1 2 ・・・ 1 0210
・ あ え 2 2 ・・・ 1 0211
・ い い 1 2 ・・・ 3 0211
・ あ う 3 2 ・・・ 1 0212

【シート2(貼付け先)】
  A B ・・・  W Y  X
1 項目名・・・・・・・・
・        
10  あ い 1 2 ・・・ 1 0201←X列にはあらかじめ番号が入っている
11  ウ い 4 2 ・・・ 1 0202
12  ウ お 3 2 ・・・ 1 0203
13  ・・・・・・・・    1 0204
・  ・・・・・・・・ ・ ・
19  あ い 1 2 ・・・  1 0210
20             0211←(セルX30以降のデータは表示しない)
21             0212←(セルX30以降のデータは表示しない)

30             0210←ここは可変する
               (セルX30以降のデータは表示しない)

初心者です。コードの書き方がむつかしすぎて
宜しくお願いします。

Public Sub test()

Dim strSerch1 As String
Dim strSerch2 As String
Dim lngLastRow As Long
Dim i As Long, j As Long

'検索
strSerch1 =
strSerch2 =

'Sheet2の10行目に
j = 10

With Worksheets("Sheet1")

lngLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row '最後行
For i = lngLastRow To 2 Step -1
'同じならSheet2に
If .Cells(i, ).Value = strSerch1 And .Cells(i, ).Value = strSerch2 Then
Worksheets("Sheet2").Cells(j, 2).Value = .Cells(i, 1).Value
j = j + 1

End If

Next i

End Wit

End Sub

< 使用 Excel:Excel2016、使用 OS:unknown >


なぜ、X列とY列の順番が逆なのですか。

シート1のY列が1をオートフィルタで抽出して、
シート2にコピー値貼り付けではだめなのでしょうか。

(マナ) 2020/05/03(日) 17:50


すいません。
YXは逆で入力誤りです。X→1など Y→0201などです。

オートフィルターでもいいのですが

  シート2のセルY30がシート1のY列の値と同じなら
   シート1のX列に「1」がある行のB列からX列までを
  シート2のY10〜Y21までの間にある該当する行に貼りたい
 その時、シート2セルY30の番号がシート2の範囲Y10〜Y21行目までのうち
 該当の行のそれ以前は表示して、それ以降のデータは表示させたくないのです。

【シート2(貼付け先)】

   A B ・・・  W   X  Y
 1 項目名・・・・・・・・ 
 ・         
 10  あ い 1 2 ・・・ 1 0201←(セルX30以前のデータは表示する) 
 11  ウ い 4 2 ・・・ 1 0202←(セルX30以前のデータは表示する)  
 12  ウ お 3 2 ・・・  1 0203←(セルX30以前のデータは表示する) 
 13  ・・・・・・・・ 1 0204←(セルX30以前のデータは表示する) 
 ・  ・・・・・・・・ ・ ・ ←(セルX30以前のデータは表示する) 
 19  あ い 1 2 ・・・ 1 0210 
 20            0211←(セルX30以降のデータは表示しない) 
 21            0212←(セルX30以降のデータは表示しない) 

 30            0210←ここは可変すると上記のように表示が変わる
               

 

(たら) 2020/05/03(日) 19:49


>オートフィルターでもいいのですが

なら、その手順をマクロにすればよいのですが
実際のデータで問題ないか、まずは手作業で確認してみてください。

(マナ) 2020/05/03(日) 20:58


ありがとうございます。
確認しましたところ、別件でも使いたくオートフィルターではない方法でお願いしたいです。
シート2のY30がシート1のY列と同じであればB列〜X列の行を、シート2の指定の場所に値のみ貼り付けしたい。
シート1のデータのある行目は()書きに記入しました。2001は2001からみて1行目2002以降は17行ずつ上の行の値もとりたい。

シート2Y30の値   シート1                           シート2

 2001→      Y列に2001があるB〜Xまでの行の値(2001から見て1行目)→  B10〜X10に貼付  

   

 2002→       Y列に2001があるB〜Xまでの行の値(2002から見て上18行目)→  B10〜X10に貼付
              Y列に2002があるB〜Xまでの行の値(2002から見て1行目)→   B11〜X11に貼付
 2003〜も同様

 2012→      Y列に2001があるB〜Xまでの行の値(2012から見て上188行目)→ B10〜X10に貼付
            Y列に2002があるB〜Xまでの行の値(″171行目)→  B11〜X11に貼付
            Y列に2003があるB〜Xまでの行の値(″154行目)→  B12〜X12に貼付
            Y列に2004があるB〜Xまでの行の値(″137行目)→  B13〜X13に貼付
            Y列に2005があるB〜Xまでの行の値(″120行目)→  B14〜X14に貼付
            Y列に2006があるB〜Xまでの行の値(″103行目)→  B15〜X15に貼付
            Y列に2007があるB〜Xまでの行の値(″86行目)→  B16〜X16に貼付
            Y列に2008があるB〜Xまでの行の値(″69行目)→  B17〜X17に貼付
            Y列に2009があるB〜Xまでの行の値(″52行目)→  B18〜X18に貼付
            Y列に2010があるB〜Xまでの行の値(″35行目)→  B19〜X19に貼付
            Y列に2011があるB〜Xまでの行の値(″18行目)→  B20〜X20に貼付
            Y列に2012があるB〜Xまでの行の値(2012から見て1行目)→  B21〜X21に貼付
   

(たら) 2020/05/06(水) 23:53


こんな流れで考えてはどうでしょうか。

1)シート2のY10の値を、シート1のY列から検索
2)見つかったセルと同じ行のB〜X列をコピー
3)シート2のY10と同じ行のB〜X列に貼り付け

4)シート2のY11の値を、シート1のY列から検索
5)見つかったセルと同じ行のB〜X列をコピー
6)シート2のY11と同じ行のB〜X列に貼り付け

以下、シート2のY21まで繰り返し

(マナ) 2020/05/07(木) 12:41


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.