- ベストアンサー
(VBA) 横並びを縦並びに
- VBAを使って、データの並びを横から縦に変更する方法について質問します。
- 質問の内容は、特定のVBAコードを実行することで、データシートの並びを変更する方法を尋ねています。
- 具体的には、指定したシートのデータを別のシートにコピーし、行と列を入れ替えて並び替える方法について知りたいとのことです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
削除された質問の方で回答したのですが、同じことを書くのも疲れるのでかいつまんで LastRowNum2の件は 前回と今回の最終行が同じとは限らないので初期化はいいと思います。 ソートについては、ユーザーフォームで対応することが考えられますが、毎回違うソートをするとも思えないので、最初に利用者に聞いてそれを固定すればいいと思います。利用者で変更というのはコードを書き替えてくれたらいいですねという意味です。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
前質問で、締め切り勅語に回答ボタンを押して、無効になった。 今回の名指しの回答者ではないが、簡単と思うので、コードを挙げる。 == 例データ Sheet1 A2:H4 123 藤田 2022/4/4 A 2022/5/9 B 2022/6/9 F 689 斎藤 2022/3/8 C 2022/8/5 D 168 田中 2022/5/5 E 2022/8/6 F このように同性格のデータ例が2つ以上ないか書いてないところが、経験不足を思う画像では、そういう点が、分からず、質問として不完全。普通2組で終わらないのではないか。 == 標準モジュールに Sub test01() Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") sh2.Columns(3).NumberFormat = "yyyy/mm/dd" k = 2 lr = Range("A10000").End(xlUp).Row MsgBox lr For i = 2 To lr rc = Cells(i, 1000).End(xlToLeft).Column '最右列検知 MsgBox rc For j = 3 To rc Step 2 sh2.Cells(k, "A") = Cells(i, "A") sh2.Cells(k, "B") = Cells(i, "B") sh2.Cells(k, "C") = Cells(i, j) sh2.Cells(k, "D") = Cells(i, j + 1) k = k + 1 Next j Next i End Sub == 結果 Sheet2 A2:D8 123 藤田 2022/04/04 A 123 藤田 2022/05/09 B 123 藤田 2022/06/09 F 689 斎藤 2022/03/08 C 689 斎藤 2022/08/05 D 168 田中 2022/05/05 E 168 田中 2022/08/06 F == 他の方法として、紙ベースで、表データができている場合切り貼りする要領で、手動で下の部分にコピペして、全体を番号+氏名でソートしたら仕舞ではないか? その時、まずA,B列の番号+氏名を全行をコピーし、各データ列に挿入する(空白列2列作り、そこに番号+氏名をずれないように張り付ける。) 其の後E,F,G,H列をコピーして、A-D列の最終行の直下部へ貼りつける。これを繰り返す。 VBA云々を、色々言うより、これが一番早いよ。
- kkkkkm
- ベストアンサー率66% (1719/2589)
メール届いてないですか ■対応理由 他の会員や投稿について言及している内容が含まれていたと判断したため。 で質問が削除されましたので今回も削除されると思います。
お礼
kkkkkmさん、回答ありがとうございます。 削除理由は、「スレ主さんは、----- 」が以下に該当する為とメイルがありました。 他の会員や投稿について言及している内容が含まれていたと判断したため。 ※具体的に対象が特定されていない場合や、単なる興味のみで他意が無い場合でも、 該当する会員の方が不快な思いをしたり、Q&Aの趣旨にそぐわない議論に発展するおそれがあるため、ご遠慮いただいております。 今回の件で私も対応が判ったので次回同じことが無いように書き込みに注意をしたいと思います。 >ソートについては、----- 利用者で変更というのはコードを書き替えてくれたらいいですねという意味です。 回答の意味理解しました。 imogasiさん、ロジックの回答ありがとうございます。