- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
回答No.3です。失敬しました。先程の回答には1箇所抜けている所がありました。 正しくは以下の通りです。 Sub QNo8992099_エクセルマクロについて質問() With Sheets("Sheet2") If .Range("A" & Rows.Count).End(xlUp).Row > 1 Then With .Range("B2:C" & .Range("A" & Rows.Count).End(xlUp).Row) .FormulaR1C1 = _ "=IF(ISERROR(1/(VLOOKUP(RC1,Sheet1!C1:C3,COLUMNS(C1:C),FALSE)" _ & "<>"""")),"""",VLOOKUP(RC1,Sheet1!C1:C3,COLUMNS(C1:C),FALSE))" .Value = .Value End With End If End With End Sub
その他の回答 (4)
- keithin
- ベストアンサー率66% (5278/7941)
ALT+F11を押してVBE画面を開く 挿入メニューから標準モジュールを挿入する 下記をコピー貼り付ける sub macro1() worksheets("Sheet2").select with range("B2:C" & range("A65536").end(xlup).row) .formular1c1 = "=VLOOKUP(RC1,Sheet1!C1:C3,COLUMN(),FALSE)" .value = .value .specialcells(xlcelltypeconstants, xlerrors).clearcontents end with end sub 'マクロの中に記載されている各シート名を正しく修正する事 ファイルメニューから終了してエクセルに戻る シート上にオートシェイプの図形等でボタン絵柄を配置しボタンにする 右クリックしてマクロの登録でマクロを登録する。
- kagakusuki
- ベストアンサー率51% (2610/5101)
ワークシート関数を使った方が余程簡単に出来ると思いますが、何故敢えてマクロに拘るのでしょうか? 例えば、下記のワークシート関数をSheet2のB2セルに入力してから、Sheet2のB2セルをコピーして、Sheet2のB2:C10の範囲に貼り付ければ、簡単に結果を出す事が出来ます。 =IF($A2="","",IF(ISERROR(1/(VLOOKUP($A2,Sheet1!$A:$C,COLUMNS($A:B),FALSE)<>"")),"",VLOOKUP($A2,Sheet1!$A:$C,COLUMNS($A:B),FALSE))) VBAのマクロを使って、それと同じ結果を出すのでしたら、一例としては次の様なものとなります。 Sub QNo8992099_エクセルマクロについて質問() With Sheets("Sheet2") If .Range("A" & Rows.Count).Row > 1 Then With .Range("B2:C" & .Range("A" & Rows.Count).End(xlUp).Row) .FormulaR1C1 = _ "=IF(ISERROR(1/(VLOOKUP(RC1,Sheet1!C1:C3,COLUMNS(C1:C),FALSE)" _ & "<>"""")),"""",VLOOKUP(RC1,Sheet1!C1:C3,COLUMNS(C1:C),FALSE))" .Value = .Value End With End If End With End Sub
お礼
回答ありがとうございます。 下に書いたように数式を使わない方法を考えてました。 説明がたらずすみませんでした。
- f272
- ベストアンサー率46% (8469/18132)
http://okwave.jp/qa/q8991993.html で言ったとおりVlookupで出来るんじゃないの? Sub test() r = Sheets("Sheet1").Range("a2").End(xlDown).Row - 1 Set B = Sheets("Sheet1").Range("a2").Resize(r, 3) Set a = Sheets("Sheet2").Range("a2") Do While Not IsEmpty(a) If Not B.Resize(r, 1).Find(What:=a) Is Nothing Then a.Offset(, 1) = WorksheetFunction.VLookup(a, B, 2, 0) a.Offset(, 2) = WorksheetFunction.VLookup(a, B, 3, 0) End If Set a = a.Offset(1) Loop End Sub
お礼
他のやり方もする場合があるため数式を入力できません。 説明がたらずすみませんでした。
- FEX2053
- ベストアンサー率37% (7991/21371)
添付画像が良く見えないので、どうしようもないです。 ご自身の言葉でテキストとして書き出してください。 テキストとして書き出すことが、マクロのコーディングの 仕様になりますので。
お礼
回答ありがとうございます。 こういうやり方もあるのですね。 使わせていただきます。