[[20210122145730]] 『別ファイルから入力内容と一致する部分を抽出』(助けてください) ページの最後に飛ぶ

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

 

『別ファイルから入力内容と一致する部分を抽出』(助けてください)

ファイルAにのセルB2に「2012サンプル」と入力すると、
別のファイルBから同じ文字が書かれた部分を探し、
その右のセルに入力されている3つの情報を抜き出し、
ファイルBのセルC2、D2、E2に書き出したいです。

※ファイルBの仕様↓
サンプル名   品名    種類 区分
2012サンプル サンプル12   G   開発

このように入力してあります。
この品名、種類、区分の部分をコピーして、
書き出してくれるマクロを作りたいです。

たくさん調べているのですが、全くマクロが理解できず詰んでいます。
文字列を作っていただける方はいらっしゃいますか?
お手数ですがよろしくお願いいたします…

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


>全くマクロが理解できず詰んでいます
とりあえず、動かなくてもよいので今のコードを見せてください。

処理順としては

 (1)ファイルAの××シート(シートの提示がないのでご自分で埋めてください)のセルB2に入っている値を取得する
 (2)ファイルBを開く
 (3)(2)のブックの××シート(シートの提示がないのでご自分で埋めてください)のB列を対象に、  
    (1)の値がどの【行】にあるかMatch関数などで調べる
 (4)調べた行の該当列をコピーして(1)のシートのC2に貼り付ける

という流れになりますよね。

(もこな2) 2021/01/22(金) 15:43


マクロの「マ」の字もわかっていない状態で始めていて、
ネットで似たようなことをしようとしている式を探して貼り足しているだけなので、
ぐちゃぐちになっています…申し訳ありません。

 Sub Sample()
  Application.ScreenUpdating = False
  Dim I As Long
  Dim xlBook
  Set xlBook = Workbooks.Open("ファイルB.xls") '
  I = 2
  Do While Range("A" & I).Value <> ""
    ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
    I = I + 1
  Loop
  xlBook.Close
  Application.ScreenUpdating = True
  MsgBox ("完了")
End Sub
(助けてください) 2021/01/22(金) 16:00

ちょっと難しく考えすぎな気もしますが・・・
さしあたってループ処理しようとしてるということは、調べたいのはB2セルだけじゃなないということですよね。たぶん。
そうなると、こんな感じのことをされたいのでしょうか?

 【ファイルB.xlx の 1番目のシート】
 _________A____________B__________C_______D________
  1  サンプル名       品名       種類   区分
  1  2012サンプル サンプル12   G   開発
  2  2013サンプル サンプル13   G   開発
  3  2014サンプル サンプル14   G   開発
  4  2015サンプル サンプル15   G   開発
  5  2016サンプル サンプル16   G   開発
  6  2017サンプル サンプル17   G   開発
  7  2018サンプル サンプル18   G   開発
  8  2019サンプル サンプル19   G   開発
  9  2020サンプル サンプル20   G   開発

 【ファイルA.xlx の 1番目のシート】
 ________A__________B______________C__________D_______E___
  1
  2            2012サンプル
  3            2013サンプル
  4            2000サンプル
  5            2011サンプル
  6            2022サンプル
  7            2033サンプル
  8            1000サンプル
  9            2012サンプル
 10            2012サンプル

               【 ↓ マクロ実行後 ↓ 】

 ________A__________B______________C__________D_______E___
  1
  2            2012サンプル   サンプル12   G   開発
  3            2013サンプル   サンプル13   G   開発
  4            2000サンプル
  5            2011サンプル
  6            2022サンプル
  7            2033サンプル
  8            1000サンプル
  9            2012サンプル   サンプル12   G   開発
 10            2012サンプル   サンプル12   G   開発

いろんなアプローチがあるとおもいますが、↓をステップ実行して動きを確認してみてください。
(分からない命令があったら、まずはネット検索してそれでもわからない場合は聞いてください)

    Sub 研究用()
        Dim 発見行 As Variant, 行 As Long
        Dim srcSH As Worksheet, dstSH As Worksheet

        Stop 'ブレークポイントの代わり

        Set dstSH = ThisWorkbook.Worksheets(1)                                  'ファイルA
        Set srcSH = Workbooks.Open("ファイルB.xls").Worksheets(1)   'ファイルBを開きつつ、1番目のシートをセットする

        For 行 = 2 To dstSH.Cells(dstSH.Rows.Count, "B").End(xlUp).Row
            発見行 = Application.Match(dstSH.Cells(行, "B").Value, srcSH.Range("B:B"), 0)

            If Not IsError(発見行) Then
                dstSH.Cells(行, "C").Value = srcSH.Cells(発見行, "B").Value
                dstSH.Cells(行, "D").Value = srcSH.Cells(発見行, "C").Value
                dstSH.Cells(行, "E").Value = srcSH.Cells(発見行, "D").Value
            End If
        Next 行

        srcSH.Parent.Close ' srcSHの親、つまりファイルBを閉じる
        MsgBox "終わり"
    End Sub

(もこな2) 2021/01/22(金) 19:20


コメント返信:

[ 一覧(最新更新順) ]


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