Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
離れた複数列の削除方法
投稿日時: 23/04/02 16:24:35
投稿者: MMA

複数の離れた列を削除するために、以下の通りに作成しましたが、エラーが発生します。
 
Range("A:C", "L:N", "P:Q").Delete
 
2つの範囲であればエラーは発生しませんでした。
離れた3つの列範囲を指定して削除をすることはできないのでしょうか?
 
初歩的な質問で申し訳ないですが、どなたか教えていただけると助かります。

回答
投稿日時: 23/04/02 16:57:49
投稿者: taitani
投稿者のウェブサイトに移動

当方、M365 ですが再現できませんでした。
ちなみに、
Range("A:C,L:N,P:Q").Delete
でも、同じエラーが発生しますか?
 
もしくは、列保護が設定されているとか。

回答
投稿日時: 23/04/02 17:41:51
投稿者: WinArrow

こちらExcel2019です。
>Range("A:C", "L:N", "P:Q").Delete
は、エラーになります。
>Range("A:C,L:N,P:Q").Delete
は、OKです。

回答
投稿日時: 23/04/02 22:56:47
投稿者: simple

結論は既に示されているように、Range("A:C,L:N,P:Q").Delete
という書き方にすることだと思います。
 
ちなみに、参考までにおききしますが、
> Range("A:C", "L:N", "P:Q").Delete
> 2つの範囲であればエラーは発生しませんでした。
とのこと。
Range("A:C", "L:N").Delete
ではどの列が削除されると想像していますか?
Deleteではなく
Range("A:C", "L:N").Selectのほうが分かりやすいかも知れない。
想定と実際には隔たりがありませんでしたか?
その理解をしていただくことが、このテーマを考えるうえで基本的なものになると思います。

回答
投稿日時: 23/04/03 12:46:38
投稿者: simple

Applicationのrangeプロパティ
https://learn.microsoft.com/ja-jp/office/vba/api/excel.application.range
worksheetのrangeプロパティ
https://learn.microsoft.com/ja-jp/office/vba/api/excel.worksheet.range
のヘルプを参照してください。
詳細について不明なところがあっても、とりあえず目を通してください。
 
引数は、最大で2つまでです。
 
●Range(Cell1)と書くとき、
> 範囲の名前を指定します。 A1 形式の参照をコード記述時の言語で指定します。
> 範囲名には、範囲を表す演算子 (:)、共通部分を表す演算子 (スペース)、または複数の範囲を表す演算子 (,) を含めることができます。
 
●Range(Cell1,Cell2)と書くとき、
> Cell1 および Cell2 には、単一のセル、列、行、またはその他のセル範囲を含む Range オブジェクトを指定できます。
> 多くの場合、 Cell1 と Cell2 は、返される範囲の左上隅と右下隅の単一セルです
 
# ちなみに、確認されましたか?
# Range("A:C", "L:N")と書くと、それは実際にはRange("A:N")と同じです。D:K列も含みます。

投稿日時: 23/04/03 22:08:06
投稿者: MMA

多くの皆様お返事いただきありがとうございます。
ご教示いただいた通り、Range("A:C,L:N,P:Q").Deleteでエラーは発生しませんでした。
また、これでは想像していたものとは異なりました。EntireColumn.Deleteを使用することで無事完成しました。
 
 
simple様にいただきましたHPを拝見しましたが、今の私には理解ができませんでした。
 
Range("A:C", "L:N")と書くと、それは実際にはRange("A:N")と同じです。D:K列も含みます。
→こちらについても試してみました。確かにA列〜N列まで選択されてしまいました。
この理由についても理解不足のため、引き続き勉強していきます。
 
ご教示いただきました皆様ありがとうございました。感謝申し上げます。