先日表の並び替えでVBAを教えていただいたのですが、
できればもう少し詳しくご教授願いたいと思います。
【前回の質問】
同じ請求書内に含まれる情報をひとつの請求書列の横に並べて配置したいのですが。
請求書 製品 価格 個数
aaa AAA 200 10
aaa BBB 400 10
aaa CCC 300 5
bbb AAA 100 50
bbb BBB 500 10
請求書 製品 価格 個数 製品 価格 個数 製品 価格 個数
aaa AAA 200 10 BBB 400 10 CCC 300 5
bbb AAA 100 50 BBB 500 10
にたいして、
Sub test()
Dim LastCol_1 As Long
Dim LastCol_r As Long
Dim LastCol_Max As Long
Dim LastRow_A As Long
Dim r As Long
LastCol_1 = Cells(1, Columns.Count).End(xlToLeft).Column
LastRow_A = Cells(Rows.Count, "A").End(xlUp).Row
Application.ScreenUpdating = False
'データの並べ替え
For r = LastRow_A To 3 Step -1
LastCol_r = Cells(r, Columns.Count).End(xlToLeft).Column
If Range("A" & r).Value = Range("A" & r - 1).Value Then
Range("A" & r).Resize(, LastCol_r - 1).Offset(, 1).Copy _
Destination:=Cells(r - 1, LastCol_1 + 1)
Rows(r).Delete
End If
Next r
'見出し行の編集
With ActiveSheet.UsedRange
LastCol_Max = .Cells(.Cells.Count).Column
End With
Range("A" & 1).Resize(, LastCol_1 - 1).Offset(, 1).Copy _
Destination:=Cells(1, LastCol_1 + 1).Resize(, LastCol_Max - LastCol_1)
Application.ScreenUpdating = True
End Sub
というVBAコードをいただきました。
結果は大満足だったのすが、たとえばもし請求書columnの横に繰り返したくないcolumnがもう1列ある場合はどのようにしたらよいのでしょうか。請求書番号と同様1行に1回のみ表示させたいのです。
請求書 Year 製品 価格 個数
aaa 2007 AAA 200 10
aaa 2007 BBB 400 10
↓↓↓↓↓↓↓↓↓
請求書 Year 製品 価格 個数 製品 価格 個数
aaa 2007 AAA 200 10 BBB 400 10
お手数ですが、コメントいただければ幸いです。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
こんにちは。
以前回答した者です。
改良しましたので、お試しください。
尚、 左端の残したい列の数は変数にしたので、
以下の部分で変更できます。
IndexColNum = 2 '左端の残したい列の数
Sub test2()
Dim LastCol_1 As Long
Dim LastCol_r As Long
Dim LastCol_Max As Long
Dim LastRow_A As Long
Dim r As Long
Dim IndexColNum As Long
IndexColNum = 2 '左端の残したい列の数
LastCol_1 = Cells(1, Columns.Count).End(xlToLeft).Column
LastRow_A = Cells(Rows.Count, "A").End(xlUp).Row
Application.ScreenUpdating = False
'データの並べ替え
For r = LastRow_A To 3 Step -1
LastCol_r = Cells(r, Columns.Count).End(xlToLeft).Column
If Range("A" & r).Value = Range("A" & r - 1).Value Then
Range("A" & r).Resize(, LastCol_r - IndexColNum).Offset(, IndexColNum).Copy _
Destination:=Cells(r - 1, LastCol_1 + 1)
Rows(r).Delete
End If
Next r
'見出し行の編集
With ActiveSheet.UsedRange
LastCol_Max = .Cells(.Cells.Count).Column
End With
Range("A1").Resize(, LastCol_1 - IndexColNum).Offset(, IndexColNum).Copy _
Destination:=Cells(1, LastCol_1 + 1).Resize(, LastCol_Max - LastCol_1)
Application.ScreenUpdating = True
End Sub
No.2
- 回答日時:
#1のka_na_deです。
上部の見出し行の数も変数にしておきました。
Sub test3()
Dim LastCol_1 As Long
Dim LastCol_r As Long
Dim LastCol_Max As Long
Dim LastRow_A As Long
Dim r As Long
Dim IndexColNum As Long
Dim HeadLineNum As Long
HeadLineNum = 1 '上部の見出し行の数
IndexColNum = 2 '左端の残したい列の数
LastCol_1 = Cells(1, Columns.Count).End(xlToLeft).Column
LastRow_A = Cells(Rows.Count, "A").End(xlUp).Row
Application.ScreenUpdating = False
'データの並べ替え
For r = LastRow_A To 2 + HeadLineNum Step -1
LastCol_r = Cells(r, Columns.Count).End(xlToLeft).Column
If Range("A" & r).Value = Range("A" & r - 1).Value Then
Range("A" & r).Resize(, LastCol_r - IndexColNum).Offset(, IndexColNum).Copy _
Destination:=Cells(r - 1, LastCol_1 + 1)
Rows(r).Delete
End If
Next r
'見出し行の編集
With ActiveSheet.UsedRange
LastCol_Max = .Cells(.Cells.Count).Column
End With
Range("A1").Resize(HeadLineNum, LastCol_1 - IndexColNum).Offset(, IndexColNum).Copy _
Destination:=Cells(1, LastCol_1 + 1).Resize(, LastCol_Max - LastCol_1)
Application.ScreenUpdating = True
End Sub
ka_na_deさん、ありがとうございました。
まさに希望通りになりました!
実はVBAというものを前回の質問時まで知らなくて、
ネットで使い方を調べてみようみまねでやってみたのですが、
(実際はコピペさせていただいただけなのですが)
こんなすごいことが出来るのだととても感心しました。
ka_na_deさんのように自由自在に使える方がうらやましいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) VBA 請求書自動作成 3 2022/04/24 01:58
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) Sheet3から2つの条件でオートフィルターで抽出した個数をSheet2へ入力するマクロで、一つ目の 4 2023/01/12 23:40
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
AppActivateの使い方
-
ExcelのVBAでGoToの代わりに…
-
thunderbirdのメール設定について
-
AKB48の柏木由紀さんが総選挙で...
-
AKB前田敦子さん卒業発表時抱き...
-
アルミ缶ジュースはさびにくいか
-
AKB48って?
-
この下記のGReeeeNのメンバーの...
-
NGT48って活動してるの?存在し...
-
楽器演奏できる人に聞きます!U...
-
顕正会 脱退 顕正会を脱退した...
-
櫻坂についてです。 毎月グリー...
-
バンプの隠し曲は誰が作ってるの??
-
ブランニューソングってなんですか
-
ジェイル大橋の脱退理由 ~聖...
-
クロエ・アグニュー
-
洋楽で、すれっからしのビッチ...
-
Twitterでキンプリ脱退のメッセ...
-
山口百恵さん、松田聖子さん、...
-
シャンクスの妻ってどなたか分...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelのVBAでGoToの代わりに…
-
AppActivateの使い方
-
日置明子さん SONOさん が ...
-
akbで抜いたことありますか? ...
-
AKB48の松井珠理奈はAKBファン...
-
AKB前田敦子さん卒業発表時抱き...
-
thunderbirdのメール設定について
-
AKBの巨乳メンバー
-
アッコにおまかせ!の出演者
-
DHCPサーバの設定について
-
山本彩ちゃんのグッズはどこで...
-
堀北真希と
-
AKB48の桜の栞で歌っている人
-
第63回紅白歌合戦SKE48のメン...
-
郵便局の振込み手数料土日は?
-
モーニング娘とベリーズ工房って
-
AKB48のなかですごくこれはい...
-
新・キューティーハニーの主題...
-
6/16日放送のAKBINGOの、野菜シ...
-
AKB島崎遙香さんは なぜ「...
おすすめ情報