次の操作を行うマクロの構文を教えてください。

シート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に貼り付けたい


よろしくお願いします。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2010/03/14 17:25:26
  • 終了:2010/03/21 17:30:03

回答(4件)

id:SALINGER No.1

SALINGER回答回数3454ベストアンサー獲得回数9692010/03/14 17:35:40

ポイント23pt

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


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
id:nmfo4n67

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

2010/03/14 17:54:11
id:p332 No.2

p332回答回数36ベストアンサー獲得回数32010/03/14 19:50:14

ポイント23pt

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

その手順を示します。

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

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


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

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

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

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

4.シート2に貼付け

以上です。

id:taknt No.3

きゃづみぃ回答回数13537ベストアンサー獲得回数11982010/03/14 21:59:56

ポイント22pt
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に既存のところに 無条件で 行単位でコピーするようにしてみました。

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

id:gtyuji_77 No.4

gtyuji_77回答回数8ベストアンサー獲得回数02010/03/15 18:27:53

ポイント22pt

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

その手順を示します。

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

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



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

  • id:SALINGER
    >にシート1、シート2とも行と列の数を増やしたシートでは不足するデータを全部取ってこない
    どういう状況かよくわからないんのですが、例えばシート1の列を増やして実行しても
    シート2のもとからあるデータの列が増えないということでしょうか。
  • id:nmfo4n67
    シート1と2も毎日更新したいので、列は増えていきます。シート1で追加された日にちの分をシート2にとってきたいです。説明不足申し訳ありません。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません