- ベストアンサー
EXCEL VBA 他のブックを検索し、値を代入する方法
- EXCEL VBAを使用して、他のブックを検索し、値を代入する方法について教えてください。
- 具体的には、2つのブック間で顧客コードを検索し、一致した場合に作業員コードを顧客マスタの備考フィールドに代入する処理を実装したいと考えています。
- 何か良い方法やヒントがあれば教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ブック2の列位置が分からないのですが、Aからと仮定します。 Sub 処理(ByVal 顧客コード As String, _ ByVal 作業員コード As String) Dim ブック As Workbook Dim シート As WorkSheet Dim 一致 As Range Dim 行 As Long Set ブック = Workbooks.Open("~.xls") Set シート = ブック.WorkSheets(1) Set 一致 = .Columns("A:A").Find(顧客コード) If 一致 Is Nothing Then MsgBox "そのような顧客はいません" Else シート.Cells(一致.Row, 4) = 作業員コード ブック.Save End If ブック.Close End Sub
その他の回答 (1)
- D-Matsu
- ベストアンサー率45% (1080/2394)
ワークブックをOpenすると、Workbookオブジェクトが返ってくるのでそれを取得します。 Dim targBook As Workbook Set targBook = Application.Workbooks.Open(...) で、このWorkbookオブジェクト内のWorksheetsコレクションから検索対象とするWorksheetを選択し、検索範囲をRangeで取得してそのRangeでFind、というのが検索の流れです。 Dim targSheet As Worksheet Set targSheet = targBook.Worksheets(...) Dim targRange As Range Set targRange = targSheet.Range(...) Dim foundCell As Range Set founcCell = targRange.Find(...) ここまでで対象セルが判明するので、あとはその隣のセルに値を書き込む訳です。
お礼
ありがとうございます、おかげで解決致しました。 >このWorkbookオブジェクト内のWorksheetsコレクションから検索対象とするWorksheetを選択し、検索>範囲をRangeで取得してそのRangeでFind、というのが検索の流れです。 この部分は非常に分かりやすくて頭の中の霞が晴れたようです。 本当にありがとうございました!
お礼
ありがとうございます、出来ました! なるほど、Rowを使って行を割り出す訳ですね。勉強になりました。 Set 一致 = .Columns("A:A").Find(顧客コード) の所は.Columnsがうまく動いてくれなかった為変数を用意して回避しました。 助かりました、ありがとうございます!