質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

4回答

992閲覧

Excel VBAで列削除をしたい

NextToYou

総合スコア28

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

1クリップ

投稿2019/04/26 05:35

前提・実現したいこと

Excel VBAで列削除をしたい

発生している問題・エラーメッセージ

ちょっと調べて分からなかったので質問させてください。

ABCDEF
1
2
3
4

とあった場合にDの列を削除したいです
RemoveDuplicatesのサンプルを見ると
横の行を削除サンプルは出てくるのですが
縦の列を削除する方法が分かりません

縦の列を削除する方法はないのでしょうか

補足情報(FW/ツールのバージョンなど)

Excel 365(Excel 2016)
VBA

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

torisan

2019/04/26 05:42

開発タブのマクロの記録では駄目なのでしょうか。
guest

回答4

0

RemoveDuplicatesのメソッドは、行方向のみ機能し、列方向には機能しません。

一旦シートのデータを全部コピーして、新規のワークシートを作成して、
行列を入替して貼り付け。
そして、重複データの削除を行い、そのままコピー。
元のシートに戻って、行列を入替して、貼り付けすればいいのでは。

VBA

1Public Sub testA() 2 3 Dim ws As Worksheet 4 5 Worksheets("Sheet1").Select 6 Cells(1, 1).Select 7 ActiveCell.CurrentRegion.Copy 8 Set ws = Sheets.Add 9 ws.Cells(1, 1).Select 10 Selection.PasteSpecial Transpose:=True 11 ActiveCell.CurrentRegion.Select 12 ActiveCell.CurrentRegion.RemoveDuplicates Columns:=Array(1, 2, 3, 4), Header:=xlNo 13 Selection.Copy 14 Sheets("Sheet1").Select 15 Selection.PasteSpecial Transpose:=True 16 17 Application.DisplayAlerts = False 18 ws.Delete 19 Application.DisplayAlerts = True 20 Set ws = Nothing 21 22End Sub 23

ただし、RemoveDuplicatesメソッドの引数のColumnsに、配列の変数を指定するとエラーになって動きません。
もし、列が変動するのであれば、マクロでは操作せず、手作業で作業すべきと思います。
マクロで実行しても、手作業で実行しても、対して時間は変わりません。

投稿2019/05/05 08:30

kai_keitai

総合スコア344

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

今、出ているttyp03さん、coco_bauerさんの回答は「前提・実現したいこと」で書いたとおりの(他の条件がない)列削除の方法です。
RemoveDuplicatesを出しているということは何か条件がありそうですが、例示されたテーブルは2行が完全一致していますから使えますが、そうでない場合、RemoveDuplicatesを使えるかどうかは判断できません。

RemoveDuplicatesと縦横以外同じ条件で、横の行の削除ではなく、縦の列を削除するのならば、Transpose関数で縦横変換してからRemoveDuplicatesを呼び出し、再度Transpose関数を使えばよさそうです。

条件が違うのならば自分で条件にマッチするかをチェックし、条件がマッチする場合にcolumnsまたはrange指定でdeleteするしかないです。具体的なやりかたは条件をもっと明示してもらわないと説明のしようがありません。

投稿2019/04/30 02:02

sage

総合スコア1216

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

例えば、"B列"を消したかったら、以下の2行のコードでOK

Columns("B:B").Select 'B列を選択 Selection.Delete Shift:=xlToLeft '選択されているところ(B列)を削除(.DELETE)して、空いたところ(B列)には右にある列を左に移して埋める

Columns("B:B")の列をしているところ"B:B"を変えたら、複数の行でも消せる。(例えば、"B:B"を"B:G"に変えたら、2列目から7列目までの6列を消せます)

投稿2019/04/26 05:49

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

VBA

1Range("D:D").Delete

もしくは

VBA

1Columns(4).Delete

投稿2019/04/26 05:48

編集2019/04/26 05:49
ttyp03

総合スコア16996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問