Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1048 / 13645 ツリー ←次へ | 前へ→

【76609】VLOOKUPで一致した場合に特定の数値を返したい vba初心者 15/2/9(月) 21:08 質問[未読]
【76610】Re:VLOOKUPで一致した場合に特定の数値を返... β 15/2/9(月) 22:12 発言[未読]
【76612】Re:VLOOKUPで一致した場合に特定の数値を返... β 15/2/10(火) 6:37 発言[未読]
【76611】Re:VLOOKUPで一致した場合に特定の数値を返... kanabun 15/2/9(月) 22:15 発言[未読]
【76614】Re:VLOOKUPで一致した場合に特定の数値を返... VBA 15/2/10(火) 10:52 お礼[未読]
【76613】Re:VLOOKUPで一致した場合に特定の数値を返... β 15/2/10(火) 8:39 発言[未読]

【76609】VLOOKUPで一致した場合に特定の数値を返...
質問  vba初心者  - 15/2/9(月) 21:08 -

引用なし
パスワード
   BOOK1とBOOK2のデータをマッチングして、
BOOK1に数字を入れたい

BOOK1とBOOK2が、両方立ち上がっています

BOOK1にコードを組み込んで実施したいと思います
BOOK1のV列とBOOK2のA列を比較し、一致するならBOOK1のU列に
1699 と数字を入れたく思います
一致しなければ何もしません

A列、U列、V列全て、2行目から始まります

VBAで行なうにはどのようにすれば良いでしょうか?

お力を貸して下さい

【76610】Re:VLOOKUPで一致した場合に特定の数値を...
発言  β  - 15/2/9(月) 22:12 -

引用なし
パスワード
   ▼vba初心者 さん:

こんばんは

シート関数を埋め込んで、そのあと値に変換しています。

Book1もBook2もシート名を"Sheet1"としています。

Sub Test()
  Dim sh As Worksheet
  Dim sh2 As String
  Dim bk2 As String
  
  'マクロブック側
  Set sh = ThisWorkbook.Sheets("Sheet1")
  
  'Book2側
  bk2 = "Book2.xlsx"
  sh2 = "Sheet1"
  
  With sh.Range("V2", sh.Range("V" & Rows.Count).End(xlUp))
    .Offset(, 1).Formula = "=IF(V2=[" & bk2 & "]" & sh2 & "!A2,1699,"""")"
    .Offset(, 1).Value = .Offset(, 1).Value
  End With
  
End Sub

【76611】Re:VLOOKUPで一致した場合に特定の数値を...
発言  kanabun  - 15/2/9(月) 22:15 -

引用なし
パスワード
   ▼vba初心者 さん:

>BOOK1のV列とBOOK2のA列を比較し、一致するならBOOK1のU列に
>1699 と数字を入れたく思います
>一致しなければ何もしません

ある列とある列の比較なら VLOOKUP より MATCH でしょうね

Sub Try1()
 Dim r As Range, u As Range
 Dim a As Range, aAddress As String
 
 With Workbooks("Book1.xls").Worksheets(1)
   Set r = .Range("V2", .Cells(.Rows.Count, "V").End(xlUp))
   Set u = r.Offset(, -1)
 End With
 With Workbooks("Book2.xls").Worksheets(1)
   Set a = .Range("A2", .Cells(.Rows.Count, "A").End(xlUp))
   aAddress = a.Address(External:=True)
 End With
 'U列に数式(V列と Book2のA列と照合して、一致したら 1699、なければ "" )
 u.Formula = "=IF(ISNUMBER(MATCH(V2," & aAddress & ",0)),1699,"""")"
 
End Sub

【76612】Re:VLOOKUPで一致した場合に特定の数値を...
発言  β  - 15/2/10(火) 6:37 -

引用なし
パスワード
   ▼vba初心者 さん:

kanabunさんの投稿で、あぁそうだったのかと理解しました。
同じ行にあるものの比較ではなく、その列にあるかどうかだったんですね。
であれば、kanabunさんの指摘通り MATCH でしょうね。
で、かりに行数が極端に多い場合(10,000行とか)は、数式埋め込みではなく
別の方式がいいかもしれません。

【76613】Re:VLOOKUPで一致した場合に特定の数値を...
発言  β  - 15/2/10(火) 8:39 -

引用なし
パスワード
   ▼vba初心者 さん:

関数を使わない処理案です。

Sub test2()
  Dim sh1 As Worksheet
  Dim sh2 As Worksheet
  Dim dic As Object
  Dim v As Variant
  Dim i As Long
  Dim c As Range
  
  Set sh1 = ThisWorkbook.Sheets("Sheet1")
  Set sh2 = Workbooks("Book2.xlsx").Sheets("Sheet1")
  Set dic = CreateObject("Scripting.Dictionary")
  
  'Book2のA列の値を格納
  
  For Each c In sh2.Range("A2", sh2.Range("A" & Rows.Count).End(xlUp))
    dic(c.Value) = True
  Next
  
  With sh1.Range("v2", sh1.Range("v" & Rows.Count).End(xlUp))
    'Book1 の U,V列を配列に格納
    v = .Cells.Offset(, -1).Resize(, 2).Value
    '配列内で重複チェック
    For i = LBound(v, 1) To UBound(v, 1)
      If dic.exists(v(i, 2)) Then
        v(i, 1) = 1933
      Else
        v(i, 1) = Empty
      End If
    Next
    'Book1に書き戻し
    .Cells.Offset(, -1).Resize(, 2).Value = v
  End With
  
End Sub

【76614】Re:VLOOKUPで一致した場合に特定の数値を...
お礼  VBA  - 15/2/10(火) 10:52 -

引用なし
パスワード
   回答して頂いた皆様

ありがとうございました。
非常に助かりました。

1048 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free