Excel (VBA)

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

 
(Windows 10 Home : Excel 2016)
入力規則の貼り付けってどうすれば…
投稿日時: 21/07/15 15:48:26
投稿者: ほなみ

失礼します、分かる方いらっしゃったら教えて頂きたいです。
 
ExcelVBAのことで、A3に設定した入力規則をA4からC列の最終行分まで貼り付けたいんです…
 
どのようにしたらいいですか?
ENDプロパティとかをどう織り込んだらいいのか分からなくて…

回答
投稿日時: 21/07/15 18:46:27
投稿者: simple

すいません。VBAのテキストはお持ちなんでしょうか。
それはテキストに絶対書いてあるはずだと思いますが
いかがでしょうか。
 
こう書いてみたけど上手くいきません、
という質問にしてもらえませんか?
私が頼むのはどうなのかと思いますが、
絶対にそのほうがあなたにとって有益だと思うのです。
いかがですか?

回答
投稿日時: 21/07/15 19:00:31
投稿者: WinArrow
投稿者のウェブサイトに移動

手操作をマウクロの記録でコードを作成してみましたか?

回答
投稿日時: 21/07/16 11:18:23
投稿者: simple

(1)
    こちらのサイトの即効テクニックにも記事があります。
    「終端セルを参照する(Endプロパティ)」
    https://www.moug.net/tech/exvba/0050088.html
 
    C列のデータがある最終行を求めるには、下のいずれかを使います。
    (a) C3セルから下にジャンプ(Ctrlキーを押しながら↓を押すことに相当)
    (b) C列の最終行から上にジャンプします。
    コードで言うと、

    (a) Range("C4").End(xlDown)
    (b) Cells(Rows.Count, "C").End(xlUp)
  ですね。
    途中にまったくの空白行がある場合には、データがある最終セルは、
        Cells(Rows.Count, "C").End(xlUp) と、下から求めるのが普通です。
 
(2)
  「A4セルを左上隅、C10セルを右下隅とする範囲」は、
      Range("A4:C10")          '@
      Range("A4","C10")        'A
      Range("A4",Range("C10"))  'B 
   いずれでもOKです。(ほかにもあります)
 
(3)この二つを組みあわせると、貼付先セル範囲を求めるコードができます。
     Dim rng As Range
     Set rng = Range("A4", Cells(Rows.Count, "C").End(xlUp))           'Bに対応
     Set rng = Range("A4:" & Cells(Rows.Count, "C").End(xlUp).Address) '@に対応
  などという書き方もできますが、最初のものが普通かと思います。
 
(4)
あとは入力規則のあるセルA3をコピーして、
上記のrngセル範囲に「入力規則を貼り付け」ればよいでしょう。
指摘があるように、適切なセル範囲を例にして、マクロ記録をとれば
コードがわかるはずです。
 
==========
「セル範囲の指定方法」は種類も多く、基本的でありながら、
結構特殊な書き方もあり、なかなか使いこなすまでに時間がかかる項目です。
また、自分で考え出すことはほぼ不可能です。(Endプロパティを使うなんて、
Excel独自のもので、誰も最初はわからないのが普通です。)
 
入門されたかたが皆さん苦労されるところであり、
これはテキストなり、サイトの記事なりをみて知って、使って慣れるしか途はありません。
 
「セル範囲の指定方法」については、
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_cell.html
がよくまとまっているので、慣れないうちはこれを常に参照するとよいと思います。
(ただし、
・例文は選択した場所を明確にするために、Selectを多用していますが、
・常にSelectするものだ、と受け止めないようにして下さい。
・実際の使用場面でSelectすることは稀です。
・Selectする前の所までに注目して下さい。

投稿日時: 21/07/20 11:49:10
投稿者: ほなみ

返信が遅くなりまして申し訳ありません。
最終行を取得してオフセットで別列にコピー、という手順で無事出来ました!
仰るようにまずはやってみてダメなら開示の元アドバイスを頂くようにした方がいいですよね、とても勉強になりました。
お陰様でご提示頂いたコードも読めるようになったのでこの質問は解決済みとさせて頂きます、本当にありがとうございました。