
部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列 B列 C列
商品名 商品番号 コード
モータ U-1325-L
ホルダ R-134256
また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。
やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。
部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。
自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…
Sub 別ブックから貼り付ける()
Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd
と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。
基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。
どうぞよろしくお願いします。
No.4ベストアンサー
- 回答日時:
こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
Application.ScreenUpdating = False
Dim I As Long
Dim xlBook
Set xlBook = Workbooks.Open("C:\★★\コード一覧表.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
検索のセル範囲を指定する Range("A2:B65535")
を参考にさせていただきました
ありがとうございました
みなさんのアドバイスを組合わせて、単語の意味を検索しながら
思い通りのものができました!
みなさまに感謝いたします。
No.3
- 回答日時:
>基本事項は本で学びましたが、呪文のようなコードはよく理解できません。
呪文は分らないようなので
基本的なコードしか使用していません
'サンプルコード
Sub test()
Dim x As Long, y As Long
For x = 2 To Workbooks("book1.xls").Worksheets("sheet1").Cells(Rows.Count, 2).End(xlUp).Row
For y = 2 To Workbooks("book2.xls").Worksheets("sheet1").Cells(Rows.Count, 1).End(xlUp).Row
If Workbooks("book1.xls").Worksheets("sheet1").Cells(x, 2).Value = Workbooks("book2.xls").Worksheets("sheet1").Cells(y, 1).Value Then
Workbooks("book1.xls").Worksheets("sheet1").Cells(x, 3).Value = Workbooks("book2.xls").Worksheets("sheet1").Cells(y, 2).Value
Exit For
End If
Next y
Next x
End Sub
しかし、呪文を使用しないと長くなりますね
後は自分の環境に合わせてアレンジしてください
勉強頑張って
よく理解できました!
Dimは、まとめて宣言できるものなのですね?
今までは、それぞれ行を変えて宣言していたので、
何行にもなっていました…。
また、元気にがんばれます。
ありがとうございました。
No.2
- 回答日時:
>関数ではなく、マクロで処理を希望します
生半可な知識で言ってませんか。
関数VLOOKUPでやれる。
VBAでもVLOOKUP関数は使える。
それを知った上で言ってますか。
ーー
それ(いや)なら、ややこしいほうのFindメソッドを勉強したら良い。(背伸びすることは無いと思うが。時間をかけて勉強しないと。入門本を一読して達せられるものではない。)
WEBには「VBA Find FindNext」で照会すればコード例が沢山在る。
普通は、AutoFilterを使うものではない。
この回答への補足
ネットで質問すると
ほんとうに勉強になって感謝の気持ちで一杯になるときと、
質問しなければ良かった、といやな気持ちになる両極端なことが起こります。
それでも、仕事上どうしても必要なときは嫌なことも我慢して質問しています。
相手の状況を良く知りもしないで、馬鹿にするような言い方はほんとうに失礼だと思う。何様なんでしょう。
こんな馬鹿な質問で頭にくるんなら、見ないで無視すればいいでしょう。
この質問は、今回組んだマクロの、ほんの一部の動作です。
何百枚の表を、(1)図番を規則的に書き換える、(2)セレクトケースで場合わけする、(3)別の一覧から書き換えた番号に該当する関連項目を引っ張ってくる、(4)新しい図番番号で保存する など。
他のものは組めたので、最後に残った今回の件をマクロに組み込みたかったのです。

No.1
- 回答日時:
マクロでやりたいなら、ツール、マクロの記録で実際にやりたいことを
やって記録終了とすると、自動でマクロが書かれていますので
それを見て修正していくと分かりやすいです。
でもKeyと一致する項目を探して、取得したいのであるなら
エクセル関数で簡単に出来ますけど、Vlookupとか
それが同じブックにあるのかないのかの違いなので、
Workbooks("ブック名").Worksheets("シート名").cells(セルの位置)で指定すればいいのでは。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
VBAで別ブックの列を検索し、該当があれば行ごと新規ブックにコピーしたい。
Excel(エクセル)
-
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
エクセルVBAで、条件に一致するセルへ移動
Excel(エクセル)
-
-
4
エクセルマクロで、他ブックからオートフィルタ抽出
Visual Basic(VBA)
-
5
エクセル vba ある検索値を別ブックから参照し一致したすべての行で特定の列の値を返す
Visual Basic(VBA)
-
6
【VBA】2つのシートの値を比較して条件一致したら、同じ行の隣の値を別ブックへ転記したいです。 VB
Visual Basic(VBA)
-
7
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
8
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
9
EXCEL VBA 指定したファイルが存在しない場合メッセージボックスを表示させる
Access(アクセス)
-
10
VBA 別ブックから条件に合うものを転記したいです
Visual Basic(VBA)
-
11
コンボボックスにリストが表示されません・・・
Excel(エクセル)
-
12
コンボボックス内の文字サイズ変更
Excel(エクセル)
-
13
VBAを使って検索したセルをコピーして別の場所に貼り付ける。
Visual Basic(VBA)
-
14
エクセルvbaで転記したのですが、数字のゼロが消えてしまいます。 ゼロも転記するためにはどうしたらい
Excel(エクセル)
-
15
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
16
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
17
エクセル関数>参照ファイル名をセルから呼び出す
Excel(エクセル)
-
18
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
19
マクロ 実行ボタンを押さずに常に実行
Excel(エクセル)
-
20
ファイルを閉じたままの外部参照で最終行の行数取得
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
1日に1人がこなせるプログラム...
-
VBAでファイルオープン後にコー...
-
access2003 クエリSQL文に...
-
Excelシート上で右クリックがで...
-
特定行の背景色を変えたいのですが
-
JANコードとPOSコードは同じ?
-
ACCESSユニオンクエリでORDER B...
-
Excel VBAでOpenTextのFieldInf...
-
ランタイムのいらないプログラ...
-
PreviewKeyDownイベントが2回...
-
1、Rstudioで回帰直線を求める...
-
Nullの使い方が不正です。
-
Windowsアプリケーションのお勧...
-
ASCIIコードを文字に変換したい
-
変数名「cur」について
-
プレースホルダー
-
文字コード変換(Unicode To KS...
-
パイソンプログラム
-
Exel VBA 別ブックから該当デ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
access2021 VBA メソッドまたは...
-
1日に1人がこなせるプログラム...
-
JANコードとPOSコードは同じ?
-
1、Rstudioで回帰直線を求める...
-
access2003 クエリSQL文に...
-
Exel VBA 別ブックから該当デ...
-
JavaScriptの定数名が取り消し...
-
COBOLの文法
-
VBAでファイルオープン後にコー...
-
変数名「cur」について
-
エクセルに見えない文字(JISX0...
-
オートフィルタで抽出結果に 罫...
-
Nullの使い方が不正です。
-
PreviewKeyDownイベントが2回...
-
【VB6】実行ファイルとした後、...
-
Javaの改行について
-
C# コードビハインドについて
-
Excelシート上で右クリックがで...
-
木偏に「久」
おすすめ情報