- ベストアンサー
EXCELマクロ セルの内容を置き換えたい
- マクロ初心者です。EXCELマクロを使用して、セルの内容を置き換えたいです。
- sheet1とsheet2にそれぞれ異なるデータがあり、sheet1の番号とsheet2の番号をマッチングさせて、同じデータの場合、sheet1の番号のセルにsheet2の品名を上書きするマクロを作成したいです。
- たくさんのデータが入ったexcelファイルで、番号と品名のデータをマッチングさせて上書きするマクロを作成したいです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
ん? >ハイパーリンクも置き換える いいえ。この方式ではそういう事は想定外なので,また新しく全く違うアプローチを考える必要があります。 たとえば。 Sub macro1_Hyper() Dim h As Range For Each h In Worksheets("Sheet2").Range("A2:A" & Worksheets("Sheet2").Range("A65536").End(xlUp).Row) Worksheets("Sheet1").Cells.Replace _ what:=h, _ replacement:="=HYPERLINK(""" & h.Offset(0, 1).Hyperlinks(1).Address & """,""" & h.Offset(0, 1) & """)", _ lookat:=xlWhole Next End Sub #言うまでもないことですが,「出来ない」というお話は全くありません。 ヤリタイ事が変われば,どうしたらそれができるかも当然違ってきますという事です。 しかも具体的なやり方は,大概の場合思いつく限り沢山山ほどあります。一つ切りの「ベスト」な方策なんてのは「やらない言い訳」以外の何ものでもありません。 ご自分でも,どんなアイデアでも一向に構わないですから「こうしたらできるかな」というのをもう一度考えてみて,考えをまとめてからそれをマクロに翻訳して自分のやりかたを形にしてみてください。
その他の回答 (3)
- web2525
- ベストアンサー率42% (1219/2850)
すでに答えは出てるようですが、マクロにこだわらないのであれば sheet3 A1セルに =IF(ISERROR(MATCH(Sheet1!A1,Sheet2!$A$1:$A$3,0)),Sheet1!A1,VLOOKUP(Sheet1!A1,Sheet2!$A$1:$B$3,2,0)) あとは範囲にドラッグ 結果をコピーして値のみで貼り付けでも可能
お礼
アドバイスありがとうございます。 VLOOKUPやMATCHなどは単発で使う機会は多いのですが、 このような組み合わせで使えるのですね。勉強になります。
- keithin
- ベストアンサー率66% (5278/7941)
問答無用で置換してしまうので十分です。 sub macro1() dim h as range for each h In worksheets("Sheet2").range("A2:A" & worksheets("Sheet2").range("A65536").end(xlUp).row) worksheets("Sheet1").cells.replace what:=h, replacement:=h.offset(0, 1), lookat:=xlwhole next end sub #余談ですが >可能でしょうか? できないと思ったのですか?
お礼
お答え頂きありがとうございます。 是非やってみます。 >できないと思ったのですか? 「きっとできるんだろうなぁ」とまんじりと思ってはみたものの、 いざコードを書き始めると、細部が思いつかず・・という感じでした。 やってみます!
補足
もうひとつアドバイス頂けますでしょうか。 後出しで申し訳ないのですが・・・・ sheet2の「品名」のセルですが、ハイパーリンクを設定しているのです。 ハイパーリンクの内容もそっくり持ってきてもらいたいのですが、 表示文字列しかコピーされませんでした。 設定されているハイパーリンクの内容も持ってきて置き換える方法がございますでしょうか?
- hallo-2007
- ベストアンサー率41% (888/2115)
>このようなマクロを作成するのは可能でしょうか? 出来ます。コードについてはある程度、ご自身で検討してみてください。 動作としては、Sheet1の全てのセルに対して繰り返し実行 実行する内容は、Sheet1のセルの値を検索値として、Sheet2からVlookup関数などを利用して置き換える。 といった手順になると思います。 別案ですが Sheet3を準備して A1セルに =VLOOKUP(Sheet1!A1,Sheet2!A:B,2,FALSE) 或いは、=IF(COUNTIF(Sheet2!A:A,Sheet1!A1)=1,VLOOKUP(Sheet1!A1,Sheet2!A:B,2,FALSE),Sheet1!A1) とか入れて右へ下へいっぱいコピィしては如何でしょうか?
お礼
早速のアドバイスありがとうございます。 やってみます!
お礼
ご教授ありがとうございました。 書いても書いても思う通りに動かず、かなり煮詰まっておりました。 本当に感謝しております。 実際にうごかしてみました。 ちょっと思ったのと違う結果もありますので (これは表を作った前任者が残していったバグ。ハイパーリンクをクリックするとエクセルが落ちる!などなど) 検証してみようと思います。 ありがとうございました。