• ベストアンサー

エクセルマクロについて質問

エクセルで添付画像のようなマクロを考えています。 マクロに詳しいかたお願いいたします。 マクロ以外はなしでお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

 回答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)
回答No.5

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 'マクロの中に記載されている各シート名を正しく修正する事 ファイルメニューから終了してエクセルに戻る シート上にオートシェイプの図形等でボタン絵柄を配置しボタンにする 右クリックしてマクロの登録でマクロを登録する。

yoshimitsu525
質問者

お礼

回答ありがとうございます。 こういうやり方もあるのですね。 使わせていただきます。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

 ワークシート関数を使った方が余程簡単に出来ると思いますが、何故敢えてマクロに拘るのでしょうか?  例えば、下記のワークシート関数を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

yoshimitsu525
質問者

お礼

回答ありがとうございます。 下に書いたように数式を使わない方法を考えてました。 説明がたらずすみませんでした。

  • f272
  • ベストアンサー率46% (8469/18132)
回答No.2

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

yoshimitsu525
質問者

お礼

他のやり方もする場合があるため数式を入力できません。 説明がたらずすみませんでした。

  • FEX2053
  • ベストアンサー率37% (7991/21371)
回答No.1

添付画像が良く見えないので、どうしようもないです。 ご自身の言葉でテキストとして書き出してください。 テキストとして書き出すことが、マクロのコーディングの 仕様になりますので。

関連するQ&A