質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.49%

Excel VBA 特定列を検索対象にかけて別シートに転記をして、一覧にしたい

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 944

score 17

Excel VBA 初心者です。お手柔らかによろしくお願いします。
(当方、Excel2013 32bit版を使用しております)

前提・実現したいこと

テストの得点の打ち込みと集計をしようとしています。
そこで、受験番号とテストの得点を縦に並べた"英語_得点"というシートがあります。

"英語_得点"

受験番号 得点
100A 20
200A 40
300A 60
500A 100

このシートの他に"国語_得点"と"数学_得点"という同様のシートもあります。

このデータを"得点一覧"というシートに移動させたいのです。
"得点一覧"シートの完成予想図は以下の通りです。

"得点一覧"

名前 受験番号 英語 国語 数学
安藤太郎 100A 20 60 40
伊藤次郎 200A 40 60
梅村三郎 300A 60 80
江口四郎 400A 60
太田五郎 500A 100 80

上記のように、テストを受験しない人もいるので、その部分は何も記入せずに穴が空いています。
例えば、"英語_得点"で受験番号が400Aが抜けていますが、"得点一覧"にはその部分を空白にしたいのです。

そこで、"英語_得点"の受験番号を検索値として、"得点一覧"の受験番号の一覧を検索範囲として検索して、行番号を取得、シート名を変数として指定をし、その交差点に得点を入力したいと考えております。


私はVBAの知識は皆無であり、独学で模索しているので、どのようにググって良いのかすら、よくわかっていない状態です。
teratailで調べて、解決に近づく以下の投稿を見つけまして、色々と数字をいじったりしてみましたが、やりたいことが違うことやコードがよく分からなかったため、質問させていただいた次第です。

vba 行と列を指定→検索して値を転記
ExcelのVBAで他のシートのデータを検察し、値を置換したいです。

大変厚かましいですが、ご教授いただければ幸いです。
よろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    2019/07/11 03:09

    複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

回答 2

checkベストアンサー

+2

ワークシートのVLOOKUP関数の入力は出来ました。

それができているなら、
得点の範囲を選択して、コピー、貼り付けのオプションで値のみ貼り付けにしたらどうでしょう。

式か値に変換されますので、動作がもっさりはなくなるかと。

科目別得点シートのデータが変化したときに、式を入力しなおすので面倒という場合は、上記の操作をVBA化すればいいでしょう。

Public Sub 得点転記()
    Dim i As Long
    Dim rng As Range
    With Worksheets("得点一覧")
        For i = 3 To 5
            Set rng = .Range("A1").CurrentRegion.Columns(i)
            Set rng = rng.Offset(1).Resize(rng.Rows.Count - 1)
            rng.Formula = _
                "=IFERROR(VLOOKUP(B2," & _
                rng.Cells(0, 1).Value & "_得点!A:B,2,False),"""")"
            rng.Value = rng.Value '式を値に変換
        Next
    End With
End Sub

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/07/11 02:21

    返信遅れて申し訳ないです。

    わざわざコードを組んでくださり、ありがとうございます。
    正常に動きました。

    For文の i の数字をいじることで、応用が効くことができて、大満足です。
    私の言葉足らずの話から汲み取っていただいて感謝しております。

    本当にありがとうございました。助かりました。
    BAにさせていただきました。

    キャンセル

+1

VLOOKUP関数 を使えば済むのでは?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/07/10 19:24

    スクロールが原因で遅いならスクロールさせなきゃいいじゃない?
    WorksheetFunction使いたくない理由が遅いからなのか、それともWorksheetFunction自体を使いたくないのか
    WorksheetFunction自体を使う事に抵抗は無いのならエクセル漁って自分がどんなやり方してたか確認して回答しますが笑
    ただそれも何秒以上の動作で遅く感じるかによるしデータ件数によるので、なので何秒以上だと遅く感じるか聞きました。

    キャンセル

  • 2019/07/11 02:17

    そもそもWorksheetFunctionを使いたくないのです。

    仰ってたVLOOKUPのこと、をワークシートに式として入れる関数のことだと思っていましたが、多分hentaimanさんと話が食い違っているように思えます。
    ワークシートに式として入れると、自動計算される影響なのか、動作がモッサリとするので、VBAで一発で実現できればと思ったのです。

    言葉足らずで失礼しました。

    キャンセル

  • 2019/07/11 03:05

    いや、ワークシートに式で入れる必要ないんですけど。WorksheetFunctionを使ってVBAで一発で出来ると思うんだけど、どうして一発で出来なくなるのかが全く分からない・・・
    自分もVBA知識ゼロの状態の状態から誰にも教わらずGoogle頼りに気合で業務をこなした程度の知識なので、質問の意図理解出来てないかもしんなかったですね

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る