
はじめまして、下記のように、Excelでマクロを組みたいのですが
組み方がわかりません。
ご教授願えませんでしょうか。
MS Ofiice2010 生徒数500名ほど
シート1には生徒の生徒番号、氏名などがあります。
A B C D
1 生徒番号 氏名 備考
2 120001 田中
3 120002 山田 試験時休み
4 T120009 相田 転入
シート2には生徒の成績表:生徒番号、氏名、国語、算数、理科、社会
生徒番号でソートされていません。
A B C D E F
1 生徒番号 氏名 国語 算数 理科 社会
2 120001 田中 80 65 65 75
3 T120009 相田 90 85 80 80
シート1の生徒番号でシート2生徒番号を検索して、該当したら成績を
シート1の検索した生徒番号のD列以降にコピーしたいのですが
A B C D E F G
1 生徒番号 氏名 備考 国語 算数 理科 社会
2 120001 田中 80 65 65 75
3 120002 山田 試験時休み
4
5
10 T120009 相田 転入 90 85 80 80
お手数ですが、ご教授願えますでしょうか。
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
こんばんは!
関数ではダメですか?
Sheet1のD2セルに
=IF(COUNTIF(Sheet2!$A:$A,$A2),VLOOKUP($A2,Sheet2!$A:$F,COLUMN(C1),0),"")
という数式を入れオートフィルで列方向・行方向にコピー!
これで大丈夫だと思いますが・・・
※ どうしてもVBAでやりたい場合は、一例です。
Alt+F11キー → メニュー → 挿入 → 「標準モジュール」を選択 → VBE画面に
↓のコードをコピー&ペーストしてマクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)
Sub Sample1() 'この行から
Dim i As Long, n As Long, c As Range, wS1 As Worksheet, wS2 As Worksheet
Set wS1 = Worksheets("Sheet1")
Set wS2 = Worksheets("Sheet2")
For i = 2 To wS1.Cells(Rows.Count, 1).End(xlUp).Row
Set c = wS2.Columns(1).Find(what:=wS1.Cells(i, 1), LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
n = c.Row
wS2.Cells(n, 3).Resize(1, 4).Copy wS1.Cells(i, 4)
End If
Next i
End Sub 'この行まで
こんな感じではどうでしょうか?m(_ _)m
No.5
- 回答日時:
「教授する」などと言う程の大それた内容では決してないのですが、
せめて「教示」にくらいはなるかと思いますので、数点を。
参考)http://blogs.wankuma.com/jeanne/archive/2005/11/ …
> Excelでマクロを組みたいのですが組み方がわかりません。
質問の主文はコレですね。
Alt+F11 でVBEが起動しますので、
やりたいこと(質問文中の処理)をコードに落として書いていけば組めます。
「EXCEL マクロ」で検索すると、
この辺りを解説したサイトがジャンジャン見つかります。
「やり忘れていた冬休みの宿題」と思って、勉強なさるとよろしいのでは?と思います。
子供たちは今日あたり必死になっていることでしょうしね。
ま、「この程度」で良ければ、VLOOKUP関数で十分です。
例えば、田中くんの国語(シート1のD2セル)には
=VLOOKUP(A2,シート2!$A:$F,3,FALSE)
田中くんの算数(シート1のE2セル)には
=VLOOKUP(A2,シート2!$A:$F,4,FALSE)
理科社会も同様に作って、下までコピーしてやると出来上がり。
シート2に該当生徒番号が無かったらエラーを返すので、
その考慮はIF関数でも使えばOKです。
どうしてもマクロを使いたい・・
と言うか、「マクロで作れ」とおっしゃるのであれば
Sub Test()
On Error Resume Next
Sheets("シート1").Activate
For i = 2 To Sheets("シート1").Cells(Rows.Count, 1).End(xlUp).Row
For j = 1 To 4
Cells(j + 3, i) = WorksheetFunction.VLookup(Cells(1, i), Sheets("シート2").Range("A1").CurrentRegion, j + 2, False)
Next
Next
End Sub
こんな感じで提示しておきます。
ここから発展させるのも然程難しくはありません。
どちらにしても、VLOOKUP関数が便利ですよ。
解説は、みなさんが親切に教示くださっている通りです。
No.4
- 回答日時:
確認したいのですが、御質問文中のコピー後の例において、A4:C5の範囲が空欄となっていますが、これは、元々その範囲内には何も入力されていなかっただけであり、
「Sheet2に存在しない行のデータは消去しなければならない」という訳ではないと考えても宜しいのでしょうか?
もし、そうであるのならば、次の様なマクロは如何でしょうか?
Sub Macro ()
Dim lr As Long
lr = Application.WorksheetFunction.Match("*?", Sheets("Sheet1").Columns("B:B"), -1)
Sheets.Add After:=Sheets(Sheets.Count)
With Sheets("Sheet1").Range("D1:G" & lr)
.FormulaR1C1 = _
"=IF(ISERROR(1/(VLOOKUP(RC1,Sheet2!C1:C6,COLUMNS(Sheet2!C1:C[-1]),FALSE)<>"""")),"""",VLOOKUP(RC1,Sheet2!C1:C6,COLUMNS(Sheet2!C1:C[-1]),FALSE))"
.Value = .Value
End With
End Sub
No.3
- 回答日時:
ちなみにまぁ私もわざわざマクロとか使わずとも、ふつーに関数だけでやっつけた方が遥かに簡単だと思います。
ただしご相談では説明が不十分ですが、「0点を取った」のと「一部科目を休んだので点数が記入されていない」のでは全然意味が違いますので、
シート1のD2:
=IFERROR(IF(VLOOKUP($A2,Sheet2!$A:$F,COLUMN(C2),FALSE)="","",VLOOKUP($A2,Sheet2!$A:$F,COLUMN(C2),FALSE)),"")
右にコピー、下にコピー
のように細かく計算してやる必要があります。
#逆に
例えば数学の試験の日に休んだので点数が無いのを単に0点としてしまっているのなら
=IFERROR(VLOOKUP($A2,Sheet2!$A:$F,COLUMN(C2),FALSE),"")
だけでいいです。
No.2
- 回答日時:
データタブの統合という機能で寄せ集めさせる事ができますが、敢えてマクロでやりたいなら
sub macro1()
worksheets("Sheet1").select
range("D:G").clearcontents
range("A:A").copy range("D1")
range("D:D").consolidate sources:="Sheet2!C1:C6", function:=xlsum, toprow:=true, leftcolumn:=true, createlinks:=false
range("D:E").delete shift:=xlshifttoleft
end sub
といった具合になります。
マクロを参考に(=マクロでやらせている通りに手を動かして)、統合の機能も手で操作して練習してみて下さい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- MySQL 下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 第二回模試の3科目の各得点と合 1 2023/04/25 18:02
- Excel(エクセル) マクロか関数で処理したいのですが、教えて頂けませんか。 8 2022/10/31 15:18
- MySQL 下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「名前(first name) 1 2023/06/24 13:03
- 数学 データの分析と標準偏差 5 2022/03/25 12:55
- Excel(エクセル) EXCEL 関数を教えてください。(A列の同じ値が複数ある場合vlookupで出来ますか) 4 2022/12/07 20:54
- MySQL 下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「A,B組の女子の氏名のよみ。 1 2023/05/16 15:28
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- ホテル・旅館 大人の修学旅行ツアーが企画されて、新幹線では、修学旅行の方向幕。宿泊施設は相部屋無しで1名1室OKた 3 2023/03/26 13:25
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・昔のあなたへのアドバイス
- ・字面がカッコいい英単語
- ・許せない心理テスト
- ・歩いた自慢大会
- ・「I love you」 をかっこよく翻訳してみてください
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・はじめての旅行はどこに行きましたか?
- ・準・究極の選択
- ・この人頭いいなと思ったエピソード
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【マクロ】毎回、ファイル名が...
-
シートをコピーして シートに...
-
エクセルの複数シートの保護を...
-
特定のシートの削除を禁止した...
-
別シート参照のセルをシート毎...
-
エクセルでファイルを開いたと...
-
前の(左隣の)シートを連続参...
-
条件に応じて特定の行を非表示...
-
【Excel関数】値が合致するセル...
-
Excelのシートを、まとめて表示...
-
Excel、同じフォルダ内のExcel...
-
【Excel マクロ】 同一book内で...
-
VBAで条件によりフォントサイズ...
-
複数シートの特定の位置に連番...
-
Accessのスプレッドシートエク...
-
エクセルのシート名をリスト化...
-
シートを追加・名前を次月に変...
-
エクセル 計算式も入っていない...
-
Excel2007で、太字にした行のみ...
-
EXCEL:同じセルへどんどん足し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
シートをコピーして シートに...
-
エクセルのマクロで指定条件一...
-
【マクロ】毎回、ファイル名が...
-
エクセルのマクロ設定について...
-
EXCELVBA データを自動で別シー...
-
Excelでシート名と最終更新日を...
-
Excel VBA 検索して該当行を抽出
-
エクセルの複数シートの保護を...
-
別シート参照のセルをシート毎...
-
前の(左隣の)シートを連続参...
-
Excelで金銭出納帳。繰越残高を...
-
エクセル 計算式も入っていない...
-
特定のシートの削除を禁止した...
-
EXCEL:同じセルへどんどん足し...
-
エクセルでファイルを開いたと...
-
シート番号からシート名を取得する
-
シートの保護のあとセルの列、...
-
エクセルVBAでパスの¥マークに...
-
Excel、同じフォルダ内のExcel...
-
エクセルで前シートを参照して...
おすすめ情報