• 締切済み

VBA シートの違う特定のセルの値をコピーする

エクセルVBA初心者です。 シート1の(A,1)にデジカメと表記があり、同じ行のB~Hの列にそれぞれの数字が入っていたとします。 それをシート2のA列の適当な行(例えばA,15)にデジカメという表記があった場合に、シート1の(B,1)~(H,1)の値をシート2の(B,15)~(H,15)にコピーする方法をご存じな方、教えて下さい。 単純なコピー&ペーストは「マクロの記録」で可能かと思いますが、シート2に「デジカメ」の項目があった場合に、シート1の元データから同じ「デジカメ」の項目を探しだし、コピーしたいのです。 なにぶん、初心者で勉強中なものですから、表記等適切でないものがありましたら申し訳ありません。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.3

>(B,15) B15のセル、で判る。>(B,15)と表記するのはあまり見かけない。 それでこういう書き方をしているということは、エクセルそのものの使用経験が少ないのでは。そんなレベルでVBAをやるのは勧められない。 関数(VLOOKUP関数や、MATCH関数とINDEX関数の組み合わせで出来るだろう。 そういう問題の場合、順序として関数でやるものではないかな。 ーーー VBAでやる場合 処理ロジック、というものをてんで質問に書いてない。これを質問者が独力で、生み出せるように訓練しないと、1問2問教えてもらっても、当面の問題に人に頼っただけ。 色色あると思うが (1)総なめ法(存在する可能性のある対象全行をデジカメかとIF分で聞く) (2)Findメソッドを使う(検索に当たる)。マクロの記録が採れてコードがどういうものかわかるが、FindNextとのからみが難しいので初心者には難しい。WEBには多数コード例がある。 「VBA Find」でWEB照会すること。 (3)VBAで関数VLOOKUP、MATCH関数などを使って、デジカメなどのあり場所(普通は行番号)を見つける。 Application.WorkshhetFunction これでWEB照会のこと。 (4)エクセル操作のフィルタを、VBAで使う(マクロの記録が採れる)

hisasahi
質問者

お礼

ご回答ありがとうございます。 ご指摘を受けましたとおり、社会人となり初めてエクセルを利用し、 使用経験は一年程度です。 現在、会社では残業規制等で業務の効率化が進められており、担当業務 を少しでも短時間で終わらせるよう、藁にもすがる気持ちでネットで質問いたしました。 回答者様のおっしゃるよう、まだまだ勉強不足であることを実感しました。 回答者様の教えていただいた方法をヒントに、自分の力となるよう 勉強いたします。 アドバイス、身に染みました。 どうもありがとうございました。

  • myRange
  • ベストアンサー率71% (339/472)
回答No.2

Sheet2の1行目は見出しとします。 '------------------------------------------- Sub Test()  Dim R As Long  Dim myCell As Range  Sheets("Sheet2").Select  For R = 2 To Cells(Rows.Count, "A").End(xlUp).Row   Set myCell = Sheets("Sheet1").Range("A:A").Find(Cells(R, "A").Value, , xlValues, xlWhole)   If Not myCell Is Nothing Then     myCell.Resize(1, 9).Copy Cells(R, "A")   End If  Next R End Sub '-------------------------------------------- 以上です。

hisasahi
質問者

お礼

ご回答ありがとうございます。 プログラムまで回答いただき、大変感謝しております。 "A"というのは適切なセル番地を入れるという意味ですよね? ご記述いただいたメソッド等を本で理解し、VBAでエクセルを動かせるようにします。

  • cradoll
  • ベストアンサー率50% (7/14)
回答No.1

VBAを利用しなくてもExcelの関数で実現可能な場合もあります。 この場合A列(A,1デジカメ A,2○○ A,3 □□・・・)の内容が昇順で並んでいる場合はVLOOKUP関数で実現できます。 試しに質問内容通りにデータが入っているとした場合 シート2のB,15に =VLOOKUP($A15,Sheet1!$A$1:$H$1,2,FALSE) と入力してください。 どうしてもVBAで実現したいのであればまた回答できればいたします

hisasahi
質問者

お礼

ご回答ありがとうございます。 早速、VLOOKUP関数をためしてみました。 私のコピーしようとしている表は実際はもう少し複雑なため(デジカメの下にも同じようなフォームで「一眼レフ」という項目があると想像して下さい)多少苦労はしましたが、望んでいた結果を得ることができました。 勉強させていただき、ありがとうございます。

関連するQ&A