• ベストアンサー

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班と参加人数がちがうのに、【順位表】のシートに隙間なく、貼り付けるところ。 あたりです。 また、こういったものを参考するのに適した本を紹介していただけないでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • gleglegoo
  • ベストアンサー率100% (3/3)
回答No.1

別件で私は、他の人に似たような回答していますが、今回のようなものにも使えそうなので書き込みます。 以下の手順でやってみてください。 1、データをドラッグ 2、ホームの右端の「並べ替えとフィルタ」を選択 3、セルに出てきた漏斗?を選択 4、「空白のセル」のチェックを外す 5、このデータを再度ドラッグしてコピー 6、別シートに貼り付ける(その際、値だけを選択したほうがよいでしょう) こうすると、今悩んでいらっしゃる(1)と(2)の両方が解決できるのではないでしょうか? 本に関してですが、私の場合は特に参考にしているようなものがなく、適当に使って行くうちに覚えました。 あまり、参考にならずにすいません。 (^^)

freebird11
質問者

お礼

手順を真似して、マクロに保存していました。 少し応用したところ、思っていたことに近いことができました。 ありがとうございました。

その他の回答 (2)

  • WWolf
  • ベストアンサー率26% (51/192)
回答No.3

こんにちは。 例題で回答しますのでコードを参考にやってみて下さい。 (例) 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で同名を探し既存ポイントを取得し新規ポイントを足し記入。 これを変化させれば、質問者さんが意図するコードが書けると思います。頑張って下さい。

freebird11
質問者

お礼

自分にはまだVBAは敷居が高いようなので、No.1・No.2のお二方のを参考にマクロで、記録して修正するやり方を今回は取らせていただきました。 もう少し複雑なのこともできるようになりたいと思いますので、今回書いていただいたコードは次回などに応用させていただきたいと思います。 ありがとうございました。

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.2

EXCEL2007は分かりません。 EXCEL2003であれば、オートフィルターを 使えばできますよ。おそらく2007にもあると 思いますが、インターフェースが異なるので 説明できません。 EXCEL2003であれば エクセルのメニューで 「データ」→「フィルタ」→「オートフィルター」 として、ポイントの列の下三角マークをクリックして、 「空白以外のセル」を選ぶと、参加者のみ抽出できます。 あとは、別のシートにコピー&ペーストして、 並べ替えでしょうか? VBAにしたければ、まずは手動で実現させて、 その後、記録マクロを行ってみて、 そのコードをベースにVBAを修正しては、 いかがでしょうか? 空白以外のセルを抽出するVBAを 今日、回答したので紹介します。 (記録マクロを修正しているだけです。) http://oshiete1.goo.ne.jp/qa3331706.html

freebird11
質問者

お礼

オートフィルターなどはヘルプを参考にしながらやってみました。 VBAに関してはなんとなくですが、無駄そうな処理を少し削ったり、 数値を変えたりしているうちにマクロで動きました。 ありがとうございました。

関連するQ&A

  • エクセル・順位関係のデータ抽出

    エクセルの関数に関する質問です。 名前 1点数 1順位 2点数 2順位 ○○  ○   ○   ○   ○  ○○  ○   ○   ○   ○  ○○  ○   ○   ○   ○  となっている表がsheet1にあったとき、1順位と2順位のいずれかが20位以内に入る人のデータだけを集めた表を、sheet2に抽出したいです。関数などを用いて、sheet1の表にデータを入れ込めば一発で結果がsheet2に表示されるようなフォーマットを作りたいのですが、方法を教えてください。

  • エクセルで、別シートの人名に番号を振る方法について

    エクセルで、別シートの人名に番号を振る方法について エクセルで、ただの人名一覧シート(偉い人順)と、カレンダー状にセル内に名前を入れているシート(日直の当番表)があります。 カレンダー上で、その人が全体で何番目に偉い人なのか、一目でわかるように名前の側に(名前の上でも横でもどこでも)番号を振りたいです。一目で順位が確認できるようにしたいだけなので、綺麗なセルにならなくても、どのような形でもいいのです。 一覧シートの順位番号を、カレンダーの名前の側に振ることはできますでしょうか? 一覧シートの名前の横に順に上から12345...と番号付することだけはできるのですが、それ以降どうすればいいかわかりません。。 分かる方いらっしゃいましたらよろしくお願いします。

  • EXCELでデータを拾い出して別のシートに反映させたい

    私は、EXCELで社員の携帯電話使用料を調べようと思い、表を作っているのですが、一つわからない事があり質問します!!Sheet1にま、社員の携帯電話番号と使用者の名前を入れた表を作ったのですが、それをSheet2で作業をするときに、電話番号を入れたら、その人の名前が隣りのセルに勝手に入力されるようにしたいのですが、どのようにすれば、それが出来るのでしょうか?どなたか詳しくおしえていただけないでしょうか?また、詳しく載っているホームページでもありましたら、教えてください!! よろしくお願いしまーすm(__)m

  • Excel マクロ 検索結果を別シートにコピー

    Excel2010の「ホーム」タブの「編集」グループより「検索と選択」の「検索」で住所録の「名前」を検索しています。 「検索する文字列」に「名前」を入力して「すべて検索」をクリックすると検索結果がでますが、検索結果の表示方法が「セル番地」だけを表示しているため一つ一つそのセルをクリックして内容を確認しています。 これを検索された複数のデータを住所録一覧表の項目名に合わせてまとめて別シートにコピーしたいのですが・・・。 Sheet1に次の項目名で住所録を作成しています。 A列:会社名 B列:名前 C列:住所 D列:電話番号 「名前」で検索して、検索されたデータのA列からD列までのデータを別シート(Sheet2)の同じ表にコピーしたいのです。 名字だけの検索ですので結果が複数ある場合は、すべての検索結果を数行にわたってコピーできればいいのですが・・・。 このメニューのコマンドを使わなくても、何か他の方法でVBAの例があれば教えていただきたいと思います。 宜しくお願いします。

  • 名前を基準に別シートで自動で反映させたい

    名前を基準に別シートで自動で反映させたい シート毎に第一回大会、第2,3,4大会となっております。 第一大会 A列  B列 C列  D列 ア君  52  51  合計 イ君  49  53  102 ウ君  62  65  127 オ君  65  64  129 1大会で大体20名おり、毎回数名入れ替わります。 また順位表のため、毎回参加している方の名前の位置もバラバラです この状態で 別シート(仮にシート5として) A列には 名前順不同 手入力。 B列に  1大会目合計を名前から判断して自動で反映 C列に  2大会目合計を名前から判断して自動で反映 以下4大会まで 参加していない人は"―"と表示させたいのですが。 このような関数式はあるのでしょうか? ニュアンスが伝え方が下手くそで申し分けありません。

  • エクセルで 1つのシートにデータを入力しておき、

    エクセルで 1つのシートにデータを入力しておき、 別のシートで そのデータを抽出する場合 どのように設定すればいいか教えてください。 たとえば、データのシートには 会員番号、名前、会費残高 が一覧になっており、 会員個人あてに 会費残高表を 送付したいときに、 一人ずつ 入力するのではなく、 会費残高表のひな型を作っておいて、データシートの一覧の人が、順番に印刷できるような・・ 以前、使ったことがある(誰かが作ってくれた)ので、可能と思います。

  • エクセルで別シートの数値が一致するか参照法は?

    エクセル2007です 説明が難しいのですが… 毎日書きかえるシートとそれをまとめているシートの計算結果部分が一致するかチェックしたいのです。 シート1のB列に名前、L列に計算結果の数値 (1日分で毎日書き換え) シート2のC列に名前、R列に計算結果の数値 となっています。(シート1のまとめ的な表です) 共通するものは名前の文字だけで 例えばシート2のC1に「田中」、R1の計算結果数値は シート1のB列のどこかにある「田中」と同行のL列にある数値とイコールか否か。 最終的にIF関数でアラートを出すつもりですがその前に どうやってこの2つの数値の位置を特定すればいいものか、行き詰っています。 どんな式を入れればいいでしょうか。

  • 【エクセル・VBAコードの書き方】データの抽出

       1位   2位     3位     4位     5位 A   B        25 C              30            18 D E   11 VBAの初心者であります。 上のエクセルの表において、以下の作業を自動的に行なえるようなVBAのコードを教えて頂けると有り難く思います。 まず表の説明からしますと、 A~Eは人の名前を表しています。 1~5位は彼らの順位(ある競争)です。 数値が四つ(25、30、18、11)ありますが、 この四つの数値のなかで、20以上のものだけが、別のシートに自動的に入力されるようにしたいです。 かつ、その20以上の数値の位置(例えば25であれば、B、2位)もそのシートに入力されるようにしたいのです。 例えば別のシートでは以下のようにデータを表したいです。 名前    順位    数値  B     2位     25  C     3位     30 感覚的にはif 文とLoop文を用いると思うのですが、、うまくコードが組めません。 そもそもこれらの作業をVBA(マクロ)に組むことができますでしょうか。 宜しくお願いいたします。

  • エクセルで2つのシートに同じ名前があれば印をつける

    シート1はイベント参加者名、シート2は注文者です。 どのイベントに参加した人が注文しているか調べたいのです。 注文者シートの氏名列にイベント参加者と同じ名前があれば、印をつけたいと思います。 イベント参加者のシートは    A          B   会場番号       氏 名 一人の人が何回もイベントに参加している場合は想定していません。 別シートに抜き出すのではなく、注文者シートに列を追加してそこに会場番号が表示されたらすごくうれしいです。 どうぞよろしくお願いします。

  • エクセルVBAで 指定のデーターを指定のシートへ書き込む方法

    入力する表が 下記の通りです 日付  氏名    内容 1   Aさん   12345 2   Bさん   23456 3   Cさん   34567 2   Aさん   56789 3   Bさん   98765 5   Aさん   34986 というような表です シート名は"Aさん"という名のシートと"Bさん"というシートと"Cさん"という名のシートがあります。 そのAさんという名のシートには 日付  内容 1    2    3 4 5 6 というような 表があります。これは"Bさん""Cさん"ともいっしょです この"Aさん""Bさん""Cさん"の名前を判別して、その"内容"をAさんならAさんのシートの同じ日付の"内容"に書き込みたいのです。 結果としては、 Aさんのシート 日付  内容 1   12345 2   56789 3 4 5 6   34986 としたいのです。  どなたかよい方法御座いましたら宜しくお願い致します。

専門家に質問してみよう