• 締切済み

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/17068)
回答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

  • VBA 他シートを参照しているセルのコピー

    お世話になります。 以下のシートがあります。 [sheet a]    A     B        C      D     E 1 2004 2005 2006 2007 2008 2 =b!A2 =b!C2 =b!E2 =b!G2 =b!I2 3 10 15 16 4 11 4 12 30 20 9 2 5 =SUM(A3:A4) =SUM(B3:B4) =SUM(C3:C4) =SUM(D3:D4) =SUM(E3:E4) [sheet b] A B C D E  F G H I J 2004 2005 2006 2007 2008 1 あ1 い1 う1 え1 お1 か1 き1 く1 け1 こ1 2 あ2 い2 う2 え2 お2 か2 き2 く2 け2 こ2 ・・・・・・・・・ [sheet a]F列以降に入れるデータは、VBA(マクロ)を使って、別のブックから取り出しています。 (例) F1…=E1+1(E1の数式をコピー) F3,F4…任意の値(別のブックからコピー) F5…=SUM(F3:F4)(E5の数式をコピー) 1行目,5行目の場合は左のセルをコピーして数式を貼り付けると、列が自動的に列が変わりますが、2行目の場合は元のシートを1行おきに参照しているので、単純にコピーしただけでは正しい数式が入りません。 2行目の参照をVBAで作るには、どのようにしたらいいでしょうか。 よろしくお願いします。

  • 【VBA】特定の条件でセルをコピー

    VBA初心者です 特定の条件を満たすセルの隣接する指定のセルをコピーして別のシートへ貼付けたいです 【sheet1】 A   B   C   ~   F  G 1   2   あ   ~   3  あり 2   1   い   ~   7  なし 3   2   う   ~   4  あり 5   3   え   ~   6  あり 6   2   お   ~   5  なし 7   1   か   ~   3  あり 8   3   き   ~   7  なし 9   2   く    ~  8  なし といったデータのうち、G列が「あり」の行の C~Fの値を別のシートへ以下のように貼り付けたいです 【sheet2】 A   ~   D  E あ   ~   3  _ う   ~   4  _ え   ~   6  _ か   ~   3  _ 全くの初心者です よろしくお願いします

  • VBA 特定の行を別シートへコピー・削除

    下記のように、VBAで特定の行を抽出して別シートへコピーし、コピーした行については元リストデータを削除したいです。 具体的には、【出荷sheet】(C列注文番号は、出荷があった時に入力済)へ、注文番号に対応する行を【リストsheet】から抜き出してコピーし、コピー後は、【リストsheet】から該当行を削除したいです。 検索により調べてもうまく合致する回答が見当たらず困っています。 VBAの理解度は未熟ですが、何卒ご教授いただけると幸いです。 【リストsheet】 A列 B列  C列   D列 ・ ・ ・ J列 No. 日付 注文番号  品名 ・ ・ ・ ・ 1  1/1   A111   鉛筆  ・ ・ ・ ・ ←コピー後、削除  2   1/2   B222   ペン  ・ ・ ・ ・ 3    1/5  C555 消しゴム・ ・ ・ ・ ←コピー後、削除  ・ ・   ⇓ 【出荷Sheet】 A列 B列  C列   D列 ・ ・ ・ J列 No. 日付 注文番号  品名 ・ ・ ・ ・ 1  1/1 A111   鉛筆   ・ ・ ・ ・ 3   1/5   C555 消しゴム・ ・ ・ ・

  • sheet1から抽出しsheet2へコピーをVBAで

    VBA初心者です。色々本など見たのですがどうして良いか判らず質問させて頂きます。 sheet2のA1にデータを入力したら、sheet1のA列に同じデータがあるかどうか探してある場合は、その行をsheet2の6行目からコピーをさせたいのですが、 (1)sheet1のデータは下に追加していきます。 (2)sheet2のデータ貼り付けは詰めて貼り付けていきたい。 sheet1  A   B    C 1 -  -   -   2 -  -   - 3 -  -   -    4 社名 商品名 入荷数 5 A社    ○    10 6 B社    △    5 7 C社    ■    20 8 A社    ×    30 9 D社    ○    10  ・ ・   ・    ・ ・ ・   ・    ・ ・ ・   ・    ・ sheet2  A   B    C    1 A社  -   -  2 -   -   -  3 -   -   -  4 -   -   -  5 社名 商品名 入荷数 6 A社    ○    10 7 A社    ×    30 ・ ・   ・    ・ ・ ・   ・    ・ ・ ・   ・    ・ -はブランクセル 色々試したのですが、sheet2にコピーはされてもブランクの行が詰まらないなど上手くいかないため教えて頂きたく質問させて頂きました。 宜しくお願いいたします。

  • VBAで他のシートの特定の列を検索・コピーし、貼り付ける。

    お世話になります。 VBA初心者です、よろしくお願いいたします。 掲題にありますとおり、他のシートの特定の列を検索(抽出?)しアクティブになっているシートの特定の列に貼り付ける作業を自動で行わせたいと思っております。複数ある行の中から必要な行だけを抽出して、貼り付けるのでフォーマットを整えると思っていただければ結構です。具体的には、 [Sheet1]のデータ↓( | ←は罫線と思ってください。列の順番は毎回A→Zの順番とは限りませんが、記載内容は同じです。) A | B | C | D | E … | Z 1 | 2 | 3 | 4 | 5 … |26 a | b | c | d | e … | z 1a| 2b| 3c| 4d| 5e… |26z これらのデータから、特定の必要な列を選んで[Sheet2]に貼り付けを自動で行わせたいのです↓。 [Sheet2]B,G,A,W,O,Iのデータのみ必要な場合 B | G | A | W | O | I 2 | 7 | 1 | 23| 15| 9 b | g | a | w | o | i 2b| 7g| 1a|23w|15o| 9i 行数は最大で500行を超えます。HLOOKUPを各セルに書き込んで置けばよいのですが、ドッラグでは式が正しく書き込めなくて。。。 "=HLOOKUP(A1,Sheet1!A:Z,2,0)"←"A1"はA2,A3,A4となるのですが"2"がずっと2のままなので。 [Sheet1]の特定の行のコピー&ペーストなのですが、[Sheet2]の貼り付け先が1行目からではないので、何かしらの工夫が必要だと思うのですが。。。 たとえば Columns("B:B").Select Selection.Copy Sheets("Sheet2").Select Cells(2, 1).Paste こう言う事って出来ませんよね? 私の意は伝わりましたでしょうか?なにとぞよろしくお願いいたします。

  • シート内の一部のセルを別シートにコピー

    Excelのマクロ(VBA)の記載方法について お分かりになる箇所だけでも結構ですので、 どなたかご教授を願い致します。 シートX   A    B   C  1 data1 data2 data3 2 x   data7 data8 3 data4 data5 data6 4 data7 data8 data9 シート Y   A   B   C    D 1 length 3  (任意) (任意) 2 xxxx (任意) (任意) (任意) 3 zzz  (任意) (任意) (任意) 4 (空白)(任意) (任意) (任意) 上記のような2つのシート(同一Excelファイル内)があって、 シートXの一部のセルを次の条件(1~4)でシートYにコピーしたい場合 1.コピー元の列の数は、シートYの "length"と書かれたセルの右となりの数字   とする(上記では3なので、A,B,C列をコピー対象) 2.コピー元の行の数は、シートXの1~4行目までとするが、   シートXのA列のセルが"x"だったら、その行は全てコピーしない。 3.コピー先(Y)の列は、コピー元(X)の列と一つずれてコピー(BならCに、CならDに) 4.コピー先(Y)の行は、シートYのA列で1行からで始めて空白セルになった行からコピー開始。 (上記では、A列で空白セルのある4行目からコピー) 上記条件で、下記のシートYを作成したいのですが、 この場合どようなマクロ(VBA)で実現できますでしょうか。 コピー結果(シートY)  A     B   C   D 1 length  3  (任意) (任意) 2 xxxx  (任意) (任意) (任意) 3 zzz   (任意) (任意) (任意) 4 (空白) data1 data2 data3 5 (任意) data4 data5 data6 6 (任意) data7 data8 data9

  • Excel VBA で条件を満たしたセルの値を別のシートに貼り付けるには?

    VBA初心者です。700行くらいあるリストの中から所属別の名簿を作りたいのですが、マクロを使えば簡単に出来ますか? データは、 A列にNO.、B列に氏名、C列に所属 となっていて、C列の所属ごとにSheet2,Sheet3・・・にB列の氏名だけの名簿を作りたいのです。 例えば、C列が”総務課”の人の氏名(B列)をSheet2のCell("A2")から行方向に、C列が”会計課”の人の氏名はSheet3のCell("A2")から行方向に という感じです。 Do~Loop を使ってみたり、If~Then を使ってみたりするのですがうまく貼り付けられません。 データの最終行が変化するので範囲の指定もよく分かりません。 どなたか教えて下さい。

  • 複数シートの値を一括コピー

    Excel上で以下の動作をさせたいと思っています。(VBA) ・ExcelAとExcelBにはそれぞれ複数シートが存在する。 ・ExcelAにはExcelBのシート名と同じ名前のシートが存在する。 ・ExcelB側からボタンを押下して、ExcelBと同じ名前のExcelAのシートの値を一括でExcelBにコピーする。 ・コピーする範囲(行・列)は、シートごとに異なる(場合によって動的に変化)。  そのため、ExcelBのあるシートに、各シートのコピー範囲の開始列・終了列をそれぞれ保持しておき、都度変更可能とする。  行については、開始行は常に固定だが、終了行は値が入っている行までとする。 たとえば、ExcelA・Bに「い」「ろ」「は」の3つのシートがあるとします。 「い」のシートのコピーは、B2:H35(35行目まで値が入っている) 「ろ」のシートのコピーは、C2:G59(59行目まで値が入っている) 「は」のシートのコピーは、D2:E1025(1025行まで値が入っている) としたい場合、ExcelBの特定のシートに  シート名|開始 |終了 |   い  | B | H |   ろ  | C | G |   は  | D | E | と入力しておき、シートごとに動的にコピーの範囲を変えたいのです。 シートが2つや3つであれば、個別にコードを作成してもいいのですが、シートの数が50以上と多いため、何とか1つにまとめたいのです。 また、コピー後の処理の関係上、ExcelBの、い・ろ・はの各シートに、ExcelAの値を参照する式(='[ExcelA.xls]い'!$B$2など)を入れることはできません。 (これができれば、こんなに悩むことはなかったのですが・・・) よろしくお願いします。

  • VBAにて範囲選択およびコピーの方法について

    連休中失礼いたします。VBA初心者です。 VBAにて範囲選択の方法およびコピーの方法について教えてください。 (1)範囲選択の方法  まず最初の条件としてD列における値が1.0以上(数値表記は少数点)の場合に限り、 それに該当する行をコピー(A~D列)したいのですが… この方法をVBAの式で表したいのです。  範囲選択として求めたい範囲は、下表で行くとRange(”A3:D6”)の範囲を選択したいのです。  ※D列における値が1.0以上の条件の指定までは、何とかできてそうな感じなのですが、   その条件を満たす、範囲選択がうまくできません。 (2)コピーの方法  (1)で選択した範囲を、選択sheetを変更して貼り付けたいのですがどのようにしたらよろしいでしょうか??       A列     B列     C列      D列 1行    13     10      10      0.5 2行    10     8       7       0 3行    11     9       7       1.0 4行    9      25      18      1.5 5行    8      43      23      1.5 6行    7      12      23      1.0 7行    6      23      43      0.5  8行    15     23      54      0 … …

  • VBAの

    VBAで特定の列で文字マッチングをして、ヒットした行をシートAからシートBにコピーしたいと考えています。 単にセルの値を全コピーするだけなら可能です。しかし、このときにシートAが何行、何列あるか分からない場合、可変長なシートAを特定の列で文字マッチングをして、シートBにコピーするためにはどのようにすればよいのでしょうか?