『vlookupを全行に入れたい』(なう) はじめてお世話になります。 取り急ぎスマホからなので簡易的な書き方で失礼します。 作業シートにはセルに不定行数のコードがランダムで入っており、コードに対応する名称をひっぱってくるvlookup関数を全行分入れるようなvbaを作りたいと思ってます。 簡易的なイメージは下記です。 【マスタ】 001 こぶた 002 たぬき 003 きつね 004 ねこ 【作業シート】 002 =vlookup(A1,マスタ!A:B,2,false) 004 =vlookup(A2,マスタ!A:B,2,false) 001 =vlookup(A3,マスタ!A:B,2,false) 003 =vlookup(A4,マスタ!A:B,2,false) ・ ・ ・ 手作業でするなら、一行目のvlookup関数を最下行まで引き伸ばす内容です。 作業シートの行数が不定なので、データ行数を取得し、for構文でformula関数を一行ずつ入れてくのかな、と考えたのですが、formula関数での変数の扱いがよく理解できず、質問させていただきました。 初歩的ですが困っておりますのでどうぞよろしくお願いします。 また、他にいい方法があれば教えてください。 よろしくお願いします。 < 使用 Excel:Excel2016、使用 OS:Windows10 > ---- たぶん 誤 formula関数 正 formulaプロパティ 質問自体は↓が参考になりそうです。 [[20191212163448]] 『変数を使ってマクロの記述を簡単にしたい』(ぺろ) (もこな2 ) 2019/12/19(木) 19:14 ---- 失礼しました。こちら↓の方がよいかもです。 [[20191219013822]] 『数式のコピペ』(初心者) (もこな2 ) 2019/12/19(木) 19:18 ---- もこな2様、ありがとうございます。 仰るとおり、関数ではなくプロパティです。失礼しました。 正直、1件目の一番上のものがいちばん易しく私には理解しすかったです…。 他で調べていてもR1C1がよく理解できずつまずいていたのですが、やはりこのやり方がスマートでスイショウされるかたちなのでしょうか。それとも好みレベルの問題でしょうか? 本題は解決しましたが、よろしければご意見お聞かせください。 (なう) 2019/12/19(木) 19:39 ---- 特に推奨はないです。 強いて言えば、今のご自身が理解できて、数か月後も自分でメンテナンスや応用ができる方法が一番だと思います。 いくつかサンプルコードを提供します。 【For〜Nextステートメント】を使ったループで処理する Sub さんぷる1() Dim i As Long With Worksheets("作業シート") For i = 1 To .Cells(.Rows.Count, "A").End(xlUp).Row .Cells(i, "B").Formula = "=VLOOKUP(A" & i & ",マスタ!A:B,2,FALSE)" Next i End With End Sub 【オートフィル】をマクロで行う Sub さんぷる2() Dim i As Long With Worksheets("作業シート") i = .Cells(.Rows.Count, "A").End(xlUp).Row With .Range("B1") .Formula = "=VLOOKUP(A1,マスタ!A:B,2,FALSE)" .AutoFill Destination:=.Resize(i) End With End With End Sub 複数セルに【同時入力】をマクロで行う Sub さんぷる3() Dim i As Long With Worksheets("作業シート") i = .Cells(.Rows.Count, "A").End(xlUp).Row .Range("B1").Resize(i).Formula = "=VLOOKUP(A1,マスタ!A:B,2,FALSE)" End With End Sub >R1C1がよく理解できず 賛否あるかもしれませんが、個人的には無理して使わなくていいんじゃないかとおもいます。 例示が良くなかったので誤解してしまったかもしれませんが、[[20191219013822]]のほうは、R1C1形式でもできるのかと聞かれていたので、出来ますよという意味で回答してます。 R1C1参照形式じゃなきゃできないということではありません。 さらにいうと、 Sub さんぷる4() With Worksheets("作業シート") .Range("B1").FormulaR1C1 = "=VLOOKUP(A1,マスタ!A:B,2,FALSE)" '× 「FormulaR1C1プロパティ」に「A1参照形式」で代入する .Range("B2").Formula = "=VLOOKUP(RC[-1],マスタ!C[-1]:C,2,FALSE)" '○ 「Formulaプロパティ」に「R1C1参照形式」で代入する .Range("B3").Value = "=VLOOKUP(A3,マスタ!A:B,2,FALSE)" '○ 「Valueプロパティ」に「A1参照形式」で代入する .Range("B4").Value = "=VLOOKUP(RC[-1],マスタ!C[-1]:C,2,FALSE)" '○ 「Valueプロパティ」に「R1C1参照形式」で代入する End With End Sub みたいに、Valueプロパティに数式を入れても、Excel君が「"="で始まってるから数式なんでしょ。わかってますよ」と忖度してくれますし、FormulaプロパティにR1C1参照形式で数式をいれてもちゃんと読み替えて設定してくれます。 (もこな2 ) 2019/12/19(木) 22:01 ---- とってもご丁寧にありがとうございます。 忖度してくれるエクセルにきゅんとしました。 サンプルコードもパターン別に本当にありがとうございます。 最終的にはどれも理解して、場合によって使い分けられるレベルになれるよう頑張りたいと思えました! お世話になりました。 (なう) 2019/12/20(金) 12:33