現在別のカテゴリーで教えていただいたマクロなのですが、
Sheet1に入力されたデータをSheet2に転記するマクロに苦しんでおります。週明けには解決したいのでこのカテゴリーにも質問することにしました。
現在の状況は以下の通りです。
Sheet1
A B C D
1 日付 氏名 成績 区分
2 9/23 佐藤 95 優
ここでマクロを実行すると
Sheet2
A B C D E F G
1 1組 2組
2 田中 佐藤 小林 近藤 三浦 遠藤
3 9/19 90
4 9/21 80
5 9/21 95
6 9/21 95
7 9/22 95
となって欲しいのですが、同じ日付で続けて入力すると
Sheet2
A B C D E F G
1 1組 2組
2 田中 佐藤 小林 近藤 三浦 遠藤
3 9/19 90
4 9/21 95 80 95
5 9/21
6 9/21
7 9/22 95
となってしまいます。
マクロは
Sub Macro001()
'まず日付を転記します
Range("A2").Select
Selection.Copy
Sheets("sheet2").Select
Range("A65536").Select
Selection.End(xlUp).Select
ActiveCell.Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Sheets("sheet1").Select
Application.CutCopyMode = False
Range("C3").Select
'続いて転記します
Dim x As Long
Dim y As Integer
x = Application.Match(Sheets("sheet1").Range("a2"), Sheets("sheet2").Columns(1), 0)
y = Application.Match(Sheets("sheet1").Range("b2"), Sheets("sheet2").Rows(2), 0)
Sheets("sheet2").Cells(x, y) = Sheets("sheet1").Range("C2")
End Sub
です。
どうかよろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
補足入っていたんですね。
Sub test()
Dim r As Range
Dim col As Long
With Worksheets("Sheet2")
Set r = .Range("A" & Rows.Count).End(xlUp).Offset(1)
If r.Row < 3 Then Set r = .Range("A3")
col = Application.Match(Worksheets("Sheet1").Range("B2").Value, _
.Range(.Range("B2"), .Cells(2, Columns.Count).End(xlToLeft)), 0)
Worksheets("Sheet1").Range("A2").Copy r
r.Offset(, col).Value = Worksheets("Sheet1").Range("C2").Value
End With
Set r = Nothing
End Sub
ご参考になれば。(名前がない時のエラー処理はしてませんけど)
No.2
- 回答日時:
n-junさんには勉強させて戴いています、先日は有難う御座いました。
質問者さん、失礼いたしました
本題です
処理的には、そんなに難しいことではないと思います
もっと簡単に考えてみては
最初は手作業を、そのままの順序でマクロ化したほうが、覚えやすいと思いますよ
手順としては
1 Sheet1の各データを覚える
2 Sheet2で日付列の最初の空白行を見つけ、何行目かを覚える
3 空白行に日付を入力
4 氏名を元に列を探し、何列目かを覚える
5 覚えた行列を元に、成績を入力
こんな感じではないでしょうか
これを参考にマクロを作成してみます
’------------------------------------------------
Sub test()
Dim 行 As Long
Dim 列 As Long
Dim 日付 As String
Dim 氏名 As String
Dim 成績 As Integer
'1 Sheet1の各データを覚える
'各データを変数に代入します
Sheets("sheet1").Select
日付 = Range("A2").Value
氏名 = Range("B2").Value
成績 = Range("C2").Value
'2 Sheet2で日付列の最初の空白行を見つけ、何行目かを覚える
Sheets("sheet2").Select
'開始行を3行目に設定しています
行 = 3
'日付列の空白行を探します Do ~ Loop
Do
'セルが空白("")かどうか調べます If ~ End If
If Cells(行, 1).Value = "" Then
'セルが空白の場合の処理
'3 空白行に日付を入力
Cells(行, 1).Value = 日付
'繰り返し処理を終了します
Exit Do
End If
'セルが空白でない場合の処理、次行へ
行 = 行 + 1
Loop
'4 氏名を元に列を探し、何列目かを覚える
'開始列を2列目に設定しています
列 = 2
'氏名を元に列を探します Do ~ Loop
Do
'氏名が同じかどうか調べます If ~ End If
'同じであれば、繰り返し処理を終了します
If Cells(2, 列).Value = 氏名 Then Exit Do
'違っていれば、列を1つ右へ
列 = 列 + 1
Loop
'5 覚えた行列を元に、成績を入力
Cells(行, 列).Value = 成績
End Sub
’---------------------------------------
自分で理解できない処理(コマンド)は使用すべきではないと思います
後々、メンテナンスが出来ないからです
変数も日本語はお薦めできないのですが、なれないうちはありかなと思います
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
B列の最終行までA列をオート...
-
Worksheets メソッドは失敗しま...
-
vba 2つの条件が一致したら...
-
Cellsのかっこの中はどっちが行...
-
Excelで、あるセルの値に応じて...
-
【Excel VBA】 B列に特定の文字...
-
マクロについて。S列の途中から...
-
VBScriptでfindを使うには??
-
SetDlgItemTextの使い方について
-
☆エクセル マクロ 範囲の値を上...
-
エクセルVBA シートモジュール...
-
VBA 何かしら文字が入っていたら
-
VBAを使って検索したセルをコピ...
-
IIF関数の使い方
-
【VBA】2つのシートの値を比較...
-
エクセルVBAで『A列』に新...
-
【Excel VBA】カンマと改行コー...
-
複数処理 Worksheet_Change(ByV...
-
VBAで、離れた複数の列に対して...
-
VBAのFind関数で結合セルを検索...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
B列の最終行までA列をオート...
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
vba 2つの条件が一致したら...
-
Cellsのかっこの中はどっちが行...
-
URLのリンク切れをマクロを使っ...
-
文字列の結合を空白行まで実行
-
データグリッドビューの一番最...
-
【VBA】2つのシートの値を比較...
-
VBA 何かしら文字が入っていたら
-
IIF関数の使い方
-
VBAを使って検索したセルをコピ...
-
Changeイベントでの複数セルの...
-
VBAの構文 3列置きにコピーし...
-
VBAのFind関数で結合セルを検索...
-
【Excel VBA】 B列に特定の文字...
-
VBAで指定範囲内の空白セルを左...
-
VBAでのリスト不一致抽出について
-
セルに値が入っていた時の処理
-
VBAコンボボックスで選択した値...
おすすめ情報