人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

次の操作を行うマクロの構文を教えてください。
シート1
Range("A1")=1, Range("A2")=2,Range("A3")=3,Range("A4")=4,
Range("B1")=5, Range("B2")=6,Range("B3")=7,Range("B4")=8 ,
Range("C1")=a, Range("C2")=b,Range("C3")=c,Range("C4")=d,

シート2
Range("A1")=3, Range("A2")=4
Range("B1")=7, Range("B2")=8 ,
Range("C1")=a, Range("C2")=b

シート1のA列を検索してシート2のA列に含まれない、シー1のA1の値1とA2の値2ををシート2に
とってきて、同時にシート1のA1とB1の行方向のデータ、すなわちA1ならB1とC1、A2ならB2とC2も
シート2に貼り付けたい


よろしくお願いします。


●質問者: nmfo4n67
●カテゴリ:コンピュータ
✍キーワード:A1 A3 b2 B4 C3
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● SALINGER
●23ポイント

行ごとコピーしているので書式も一緒にコピーになりますが、こんな感じかな。


Sub Macro()
 Dim i As Long
 Dim lastRow1 As Long
 Dim lastRow2 As Long
 Dim w1 As Worksheet
 Dim w2 As Worksheet
 Dim res As Object
 
 Set w1 = Worksheets("Sheet1")
 Set w2 = Worksheets("Sheet2")
 
 lastRow1 = w1.Cells(Rows.Count, 1).End(xlUp).Row
 
 For i = 1 To lastRow1
 Set res = w2.Columns(1).Find(w1.Cells(i, 1).Value, LookAt:=xlWhole)
 If res Is Nothing Then
 lastRow2 = w2.Cells(Rows.Count, 1).End(xlUp).Row
 w1.Rows(i).Copy w2.Rows(lastRow2 + 1)
 End If
 Next i
End Sub
◎質問者からの返答

ありがとうございます。やりたい事ができました。ちなみにシート1、シート2とも行と列の数を増やしたシートでは不足するデータを全部取ってこないのですが。どうすればいいですか。


2 ● p332
●23ポイント

先程の質問の続きかと思いますが、よく考えたら標準機能でも割と簡単に出来そうなので、

その手順を示します。

自動化する場合は、自動記録を用いて上の操作をマクロ化すれば、マクロを自作するよりも

かえってわかりやすく、いいかもしれません。


1.シート1のD1に下記の式を入力し、D列に必要なだけコピーする

=COUNTIF(Sheet2!$A$1:$A$1000,A1)

2.オートフィルタで、シート1のデータ範囲を、「D列の値が0」という条件で絞り込む

3.絞り込んだ範囲をコピー

4.シート2に貼付け

以上です。


3 ● きゃづみぃ
●22ポイント
Sub Macro()
 Dim i As Long
 Dim lastRow1 As Long
 Dim lastRow2 As Long
 Dim w1 As Worksheet
 Dim w2 As Worksheet
 Dim res As Object
 
 Set w1 = Worksheets("Sheet1")
 Set w2 = Worksheets("Sheet2")
 
 lastRow1 = w1.Cells(Rows.Count, 1).End(xlUp).Row
 
 For i = 1 To lastRow1
 Set res = w2.Columns(1).Find(w1.Cells(i, 1).Value, LookAt:=xlWhole)
 If res Is Nothing Then
 lastRow2 = w2.Cells(Rows.Count, 1).End(xlUp).Row
 w1.Rows(i).Copy w2.Rows(lastRow2 + 1)
 Else
 lastRow2 = res.Row
 w1.Rows(i).Copy w2.Rows(lastRow2)
 End If
 Next i
End Sub

SALINGERさんの回答を一部、修正して シート2に既存のところに 無条件で 行単位でコピーするようにしてみました。

これで 希望通りになったかな?


4 ● gtyuji_77
●22ポイント

先程の質問の続きかと思いますが、よく考えたら標準機能でも割と簡単に出来そうなので、

その手順を示します。

自動化する場合は、自動記録を用いて上の操作をマクロ化すれば、マクロを自作するよりも

かえってわかりやすく、いいかもしれません。



1.シート1のD1に下記の式を入力し、D列に必要なだけコピーする

=COUNTIF(Sheet2!$A$1:$A$1000,A1)

2.オートフィルタで、シート1のデータ範囲を、「D列の値が0」という条件で絞り込む

3.絞り込んだ範囲をコピー

4.シート2に貼付け

以上です。



Sub Macro()

Dim i As Long

Dim lastRow1 As Long

Dim lastRow2 As Long

Dim w1 As Worksheet

Dim w2 As Worksheet

Dim res As Object

Set w1 = Worksheets("Sheet1")

Set w2 = Worksheets("Sheet2")

lastRow1 = w1.Cells(Rows.Count, 1).End(xlUp).Row

For i = 1 To lastRow1

Set res = w2.Columns(1).Find(w1.Cells(i, 1).Value, LookAt:=xlWhole)

If res Is Nothing Then

lastRow2 = w2.Cells(Rows.Count, 1).End(xlUp).Row

w1.Rows(i).Copy w2.Rows(lastRow2 + 1)

End If

Next i

End Sub

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ