- ベストアンサー
Excelにて、別シートからデータの一部分を選択してコピーする
XPにてexcel2007を使っています。 現在、順位表を作っているのですが、VBAというものの入門本を読んでみたのですが、いまいちやり方が分からないため質問させていただきます。 1つ目のシートに総合順位の表【シート名:順位表】を作りたいと思っています。 今、別のシート【シート名:第1回結果】に 1班 1.赤井 80ポイント 2.井上 3.上松 90ポイント 4.江藤 60ポイント 5.岡田 ・ ・ ・ 18.山根 2班 1.安藤 75ポイント ・ ・ ・ 18.渡辺 70ポイント と入力しています。3班あり、各班とも18人います。 名前が「あいうえお順」に並んでいて、参加者のみポイントが打ち込んであります。 やりたいことは、この別のシート【第1回結果】から参加した人(ポイントありの人)のみ 名前とポイントをコピーして【順位表】の表に貼り付けたいと思っています。 どうやったこのようにうまくいくのでしょうか? 自分が悩んでいるところは、 (1)今回の参加者(ポイントを記入してある人)のみを選択するところ。 (2)1班、2班、3班と参加人数がちがうのに、【順位表】のシートに隙間なく、貼り付けるところ。 あたりです。 また、こういったものを参考するのに適した本を紹介していただけないでしょうか? よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
別件で私は、他の人に似たような回答していますが、今回のようなものにも使えそうなので書き込みます。 以下の手順でやってみてください。 1、データをドラッグ 2、ホームの右端の「並べ替えとフィルタ」を選択 3、セルに出てきた漏斗?を選択 4、「空白のセル」のチェックを外す 5、このデータを再度ドラッグしてコピー 6、別シートに貼り付ける(その際、値だけを選択したほうがよいでしょう) こうすると、今悩んでいらっしゃる(1)と(2)の両方が解決できるのではないでしょうか? 本に関してですが、私の場合は特に参考にしているようなものがなく、適当に使って行くうちに覚えました。 あまり、参考にならずにすいません。 (^^)
その他の回答 (2)
- WWolf
- ベストアンサー率26% (51/192)
こんにちは。 例題で回答しますのでコードを参考にやってみて下さい。 (例) 1.シート1のA列の1行目から14行目までa~nを入力します。 2.シート2のA列には適当にa~nを入力、B列に任意にポイントを数値で入力。 3.モジュールのコードに下記コードを貼り付け。 4.コードの実行。 Sub sample() Dim Ws1 As Object, Ws2 As Object, LR1, LR2, Pa, Po Set Ws1 = Worksheets(1) Set Ws2 = Worksheets(2) LR1 = Ws1.Range("a65536").End(xlUp).Row LR2 = Ws2.Range("a65536").End(xlUp).Row For i = 1 To LR2 Pa = Ws2.Cells(i, 1).Value Po = Ws2.Cells(i, 2).Value If Po > 0 Then For j = 1 To LR1 If Ws1.Cells(j, 1).Value = Pa Then Po = Po + Ws1.Cells(j, 2).Value Ws1.Cells(j, 2).Value = Po End If Next End If Next End Sub 上記コード(変数)説明 Ws1,Ws2はワークシートを何度も書くのが鬱陶しいので変数化、LR1,LR2は各シートの必要な最終行、Pa=人、Po=ポイント For i~Nextルーチン シート2のポイントの記述されているとこの値を取得(Po)し、0でなければ人の名前(Pa)を取り、シート1で同名を探し既存ポイントを取得し新規ポイントを足し記入。 これを変化させれば、質問者さんが意図するコードが書けると思います。頑張って下さい。
お礼
自分にはまだVBAは敷居が高いようなので、No.1・No.2のお二方のを参考にマクロで、記録して修正するやり方を今回は取らせていただきました。 もう少し複雑なのこともできるようになりたいと思いますので、今回書いていただいたコードは次回などに応用させていただきたいと思います。 ありがとうございました。
- ka_na_de
- ベストアンサー率56% (162/286)
EXCEL2007は分かりません。 EXCEL2003であれば、オートフィルターを 使えばできますよ。おそらく2007にもあると 思いますが、インターフェースが異なるので 説明できません。 EXCEL2003であれば エクセルのメニューで 「データ」→「フィルタ」→「オートフィルター」 として、ポイントの列の下三角マークをクリックして、 「空白以外のセル」を選ぶと、参加者のみ抽出できます。 あとは、別のシートにコピー&ペーストして、 並べ替えでしょうか? VBAにしたければ、まずは手動で実現させて、 その後、記録マクロを行ってみて、 そのコードをベースにVBAを修正しては、 いかがでしょうか? 空白以外のセルを抽出するVBAを 今日、回答したので紹介します。 (記録マクロを修正しているだけです。) http://oshiete1.goo.ne.jp/qa3331706.html
お礼
オートフィルターなどはヘルプを参考にしながらやってみました。 VBAに関してはなんとなくですが、無駄そうな処理を少し削ったり、 数値を変えたりしているうちにマクロで動きました。 ありがとうございました。
お礼
手順を真似して、マクロに保存していました。 少し応用したところ、思っていたことに近いことができました。 ありがとうございました。