名称 /数量/種類
りんご/1/食べ物
自動車/2/乗り物
a/3/アルファベット
バナナ/4/食べ物
消防車/6/乗り物
b/5/アルファベット
上記の様な表で種類の列を基準に、「食べ物」のある行だけ集めて別のシートにコピーして、「乗り物」のある行だけ集めて別のシートにするということはできますか?
下記のように考えてみましたが上手くいきませんでした。
質問内容が上手く説明ができないため
分かりづらいかもしれませんが、
もし、お分かりになりましたら教えてください。
------------------------------
Sub test2()
Dim i As Long
For i = 2 To 7
Select Case Cells(i, 3).Value
Case "食べ物"
Rows(i).Select
Selection.Copy
Sheets("食べ物").Select
Rows(i).Select
ActiveSheet.Paste
Case "乗り物"
Rows(i).Select
Selection.Copy
Sheets("乗り物").Select
Rows(i).Select
ActiveSheet.Paste
Case Else
Rows(i).Select
Selection.Copy
Sheets("その他").Select
Rows(i).Select
ActiveSheet.Paste
End Select
Next
End Sub
No.1
- 回答日時:
方法はいくつもあると思いますが、提示されたコードを使わせて頂きました。
Sub test2_Next()
Dim i As Long
Dim i1 As Long
Dim i2 As Long
Dim i3 As Long
i1 = 1: i2 = 1: i3 = 1 '振分先各シートの先頭行数
For i = 2 To 7
Select Case Cells(i, 3).Value
Case "食べ物"
Rows(i).Copy Sheets("食べ物").Rows(i1)
i1 = i1 + 1
Case "乗り物"
Rows(i).Copy Sheets("乗り物").Rows(i2)
i2 = i2 + 1
Case Else
Rows(i).Copy Sheets("その他").Rows(i3)
i3 = i3 + 1
End Select
Next
End Sub
ご参考になれば幸いです。
すばやい回答ありがとうございました。
貼り付けるときに一行目から貼り付けるということが
未熟ながら分からなかったので、教えていただいて助かります。
丁寧な言葉も初心者の私はありがたいです。
本当にありがとうございました。
No.2ベストアンサー
- 回答日時:
こんなのではどうでしょうか?
一番の問題は、最初は元データのシートがselectされているけれど、その後別のシートが選ばれるので、2回目からそれが選択されていない事だと思います。
また、「別のシートにコピー」で「Rows(i).Select」とすると、集計がとびとびになってしまうと思います。
Sub test2()
Dim i As Long
For i = 2 To 7
Sheets("Sheet1").Select '元データのあるシートを選ぶ
Select Case Cells(i, 3).Value
Case "食べ物"
Rows(i).Select
Selection.Copy
Sheets("食べ物").Select
Cells(Rows.Count, 3).End(xlUp).Offset(1, 0).EntireRow.Select
If Cells(1, 3).Value = "" Then Rows(1).Select '1行目から書く場合
ActiveSheet.Paste
Case "乗り物"
Rows(i).Select
Selection.Copy
Sheets("乗り物").Select
Cells(Rows.Count, 3).End(xlUp).Offset(1, 0).EntireRow.Select
If Cells(1, 3).Value = "" Then Rows(1).Select '1行目から書く場合
ActiveSheet.Paste
Case Else
Rows(i).Select
Selection.Copy
Sheets("その他").Select
Cells(Rows.Count, 3).End(xlUp).Offset(1, 0).EntireRow.Select
If Cells(1, 3).Value = "" Then Rows(1).Select '1行目から書く場合
ActiveSheet.Paste
End Select
Next
End Sub
ちなみに、シートの選択以外は同じ作業をしているので、こんな風にできると思います。
Sub test3()
Dim i As Long
For i = 2 To 7
Sheets("Sheet1").Select '元データのあるシートを選ぶ
Rows(i).Select
Selection.Copy
Select Case Cells(i, 3).Value
Case "食べ物", "乗り物"
Sheets(Cells(i, 3).Value).Select
Case Else
Sheets("その他").Select
End Select
Cells(Rows.Count, 3).End(xlUp).Offset(1, 0).EntireRow.Select
If Cells(1, 3).Value = "" Then Rows(1).Select '1行目から書く場合
ActiveSheet.Paste
Next
End Sub
足りない点をご指摘ありがとうございました。
とても分かりやすく書いてくださって助かります。
また省略したコードも勉強になります。
本当にありがとうございました。
No.3
- 回答日時:
Cells(i, 3).Value
とか
Rows(i).Select
は、上位オブジェクトが省略されています。
省略した場合、Activesheetが上位オブジェクトになります。
1回目に
Sheets("食べ物").Selectしているので
Activesheet = Sheets("食べ物")
ということになります。
コピー元シートをSelectすれば問題は解決します。
For i = 2 To 7
Sheets("コピー元のシート名").Select '★追加してください
最初は、どうしてもSelectしますが、多くの場合、Selectしなくても大丈夫です。
そのためには、上位オブジェクトを省略せず明記してやる必要があります。
試しに作ってみました。
With 文で元のシート名を
.Cells(i, 3).Value
とか
.Rows(i).Copy
に修飾しています。
あと、貼り付け先のシート名も変数化しています。
Sub sample1()
Dim i As Long
Dim ws As String
With Sheets("元のシート名")
For i = 2 To 7
Select Case .Cells(i, 3).Value
Case "食べ物"
ws = "食べ物"
Case "乗り物"
ws = "乗り物"
Case Else
ws = "その他"
End Select
.Rows(i).Copy Sheets(ws).Rows(i)
Next
End With
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA シート間の転記で、条件の追加コードの書き方について教えて下さい。 13 2023/02/26 09:31
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) VBAで、シート間の転記するコードをFOR~NEXTで教えてください。 9 2023/04/30 20:04
- Visual Basic(VBA) 【VBA】特定のワードが入っている行全体を塗りつぶしたい 4 2022/04/20 15:22
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- Visual Basic(VBA) 改行ごとに行を追加し、数量を分割 4 2023/07/11 16:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
新宿三丁目駅からメトロプロム...
-
山手線の1車両の長さ
-
「情報がおりる」の「おりる」...
-
電車内で急病人が出たとき、電...
-
電車定期券を2枚に分ける必要が...
-
電車の中でPCやってて下車する...
-
電車での対処方法
-
電車の室内の高さ(天井高)
-
大崎駅で埼京線からりんかい線...
-
何故わざわざ出入り口で立ち止...
-
手取り16万、家賃85000...
-
飲み会でほとんど連絡つかず深...
-
電車でたまに、異常に臭い人が...
-
電車内のアナウンスで「2分少...
-
舞浜駅から原宿へ行くにはどの...
-
することがない日は
-
エレベーターに関する入る、乗...
-
異常な確率で運が悪い
-
ランドマークタワーから赤レン...
-
電車でキョロキョロする奴
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
電車定期券を2枚に分ける必要が...
-
「情報がおりる」の「おりる」...
-
大崎駅で埼京線からりんかい線...
-
飲み会でほとんど連絡つかず深...
-
電車での対処方法
-
電車の中でPCやってて下車する...
-
改札を出ないと往復してOK?
-
舞浜駅から原宿へ行くにはどの...
-
西武新宿駅→都営新宿線へ乗り換え
-
何故わざわざ出入り口で立ち止...
-
電車内で急病人が出たとき、電...
-
電車の室内の高さ(天井高)
-
ランドマークタワーから赤レン...
-
富士急ハイランドの乗り物って...
-
新宿三丁目駅からメトロプロム...
-
手取り16万、家賃85000...
-
電車で…座席を…泣
-
終電を乗り過ごす人又はそんな...
-
武蔵野線の朝のラッシュ状況を...
-
子育てするなら東戸塚or戸塚?
おすすめ情報