3日がかりのその仕事、3分で終わらせる方法教えます!
パソコンスキルの心技体

オートフィルは、かなりすごいぞ(その1) – Excelマクロ・VBA

2012年1月20日
  • このエントリーをはてなブックマークに追加
  • follow us in feedly

エクセルマクロ・VBA達人養成塾 小川です。

キューバ旅行記、その87です。

エクセルマクロ達人養成塾塾長ブログ-ハバナに戻ってくると、天気は荒れ模様でした。

ハバナに戻ってくると、天気は荒れ模様になりそうな気配でした。
マタンザスを出たあたりでそれは感じていたのですが…。

このあと、超大雨になります。

エクセルマクロ達人養成塾塾長ブログ-バラデロで予約していたホテルに向かいます。

バラデロで予約していた「ホテルセビージャ」ホテルに向かいます。

このホテル、キューバでも由緒正しい老舗で、キューバ革命前には、アル・カポネが借り切って拠点としていたらしいです。

何を隠そう、キューバ初日に飛び込みで「部屋はないか?」と聞いて、断られたホテル。

エクセルマクロ達人養成塾塾長ブログ-「ホテルセビージャ」というホテルに向かってます

革命博物館の近くを抜けて、歩いていきます。
なんか、雲行きを見ていると、雨に降られるのとホテルにつくのと、いい勝負な感じの気配。。。

エクセルマクロ達人養成塾塾長ブログ-革命博物館の前を通り

..と思っている間にも、どんどん怪しい雲行きに。

塾長のキューバ旅行記、最初から読みたい方はこちらから


オートフィルは、かなりすごいぞ(その1) – Excelマクロ・VBA

エクセルのオートフィル機能をマクロで使うといろいろ便利です。

関連記事: For NextよりAutofillのほうがかなり高速! – Excelマクロ・VBA

ということで、今日は、「オートフィルは、かなりすごいぞ(その1)」ということで、その第1弾を。

ただし、かなりどうでもいい四方山話(よもやまばなし)的なことなので、「へー」て感じで聞き流してください。

間違っても、「実務に直結する、役立つ知識を仕入れられる」なんて思わないように ヾ(´ー`)ノ

まず、原則。

オートフィルはメソッドで、以下の構文を取ります。

expression.AutoFill(Destination, Type)

expression、Destinationのところでは、セルを指定すると思っておけばOK。

Destinationには、expressionで指定された範囲が含まれていなくてはならない。

例えば、以下の、[1]の要領。

Sub SetNum()
Range(“C1”).Value = 1
Range(“C2”).Value = 2
Range(“C1:C2”).AutoFill Destination:=Range(“C1:C65536”), Type:=xlFillDefault ‘[1]
End Sub

そして、引数Typeには、以下の値を取り得る。ヘルプから、ちょっと加工して引用。

  • xlFillDefault
    Excel がターゲット範囲を入力するために使用する値と形式を決定します。
  • xlFillCopy
    ソース範囲からターゲット範囲に値と形式をコピーし、必要に応じて繰り返します。
  • xlFillSeries
    ソース範囲の値をターゲット範囲に連続する数値として適用します (たとえば、’1, 2′ は ‘3, 4, 5’ となります)。 形式はソース範囲からターゲット範囲にコピーされ、必要に応じて繰り返されます。
  • xlFillFormats
    ソース範囲からターゲット範囲に形式のみをコピーし、必要に応じて繰り返します。
  • xlFillValues
    ソース範囲からターゲット範囲に値のみをコピーし、必要に応じて繰り返します。
  • xlFillDays
    ソース範囲の曜日名をターゲット範囲に適用します。形式はソース範囲からターゲット範囲にコピーされ、必要に応じて繰り返されます。
  • xlFillWeekdays
    ソース範囲の平日の名前をターゲット範囲に適用します。形式はソース範囲からターゲット範囲にコピーされ、必要に応じて繰り返されます。
  • xlFillMonths
    ソース範囲の月の名前をターゲット範囲に適用します。形式はソース範囲からターゲット範囲にコピーされ、必要に応じて繰り返されます。
  • xlFillYears
    ソース範囲の年をターゲット範囲に適用します。形式はソース範囲からターゲット範囲にコピーされ、必要に応じて繰り返されます。
  • xlLinearTrend
    数字間の関係が加法であると仮定して、ソース範囲からターゲット範囲に数値を適用します。たとえば、’1, 2,’ は ‘3, 4, 5’, となります (各数字は、直前の数字になんらかの値を足した結果であるものとします)。形式はソース範囲からターゲット範囲にコピーされ、必要に応じて繰り返されます。
  • xlGrowthTrend
    ソース範囲の数字間の関係が乗法であるものとして、ソース範囲からターゲット範囲に数値を適用します。たとえば、’1, 2,’ は ‘4, 8, 16’, となります (各数字は、直前の数字になんらかの値を掛けた結果であるものとします)。形式はソース範囲からターゲット範囲にコピーされ、必要に応じて繰り返されます。

特に明示的に指定しないと、 xlFillDefaultを設定したのと同じになる。

つまり、以下の[a]と[b]が言っていることは実質同じ。

Sub SetNum()
Range(“C1:C2”).AutoFill Destination:=Range(“C1:C65536”), Type:=xlFillDefault ‘[a]
Range(“C1:C2”).AutoFill Destination:=Range(“C1:C65536”) ‘[b]
End Sub

で、では、「Type:=xlFillDefault」以外のオプションで、何かおもしろいものはないか?というお話。

今日は、これを取り上げたい↓
< br />xlFillSeries

xlFillSeriesは、加算を実行してくれる。

以下のマクロを実行して欲しい。

Sub Fill_xlFillSeries()
Range(“A1”).Value = 1
Range(“A2”).Value = 2
Range(“A1:A2”).AutoFill Destination:=Range(“A1:A10”), Type:=xlFillDefault ‘[1]

Range(“B1”).Value = 1
Range(“B1”).AutoFill Destination:=Range(“B1:B10”), Type:=xlFillDefault ‘[2]

Range(“C1”).Value = 1
Range(“C1”).AutoFill Destination:=Range(“C1:C10”), Type:=xlLinearTrend ‘[3]

Range(“D1”).Value = 1
Range(“D2”).Value = 3
Range(“D1:D2”).AutoFill Destination:=Range(“D1:D10”), Type:=xlLinearTrend ‘[4]
End Sub

結果はどうなるかとというと、こんな感じ↓。


|A列 |B列 |C列 |D列 |
--------------------------------
1 行目 |1 |1 |1 |1 |
--------------------------------
2 行目 |2 |1 |2 |3 |
--------------------------------
3 行目 |3 |1 |3 |5 |
--------------------------------
4 行目 |4 |1 |4 |7 |
--------------------------------
5 行目 |5 |1 |5 |9 |
--------------------------------
6 行目 |6 |1 |6 |11 |
--------------------------------
7 行目 |7 |1 |7 |13 |
--------------------------------
8 行目 |8 |1 |8 |15 |
--------------------------------
9 行目 |9 |1 |9 |17 |
--------------------------------
10行目 |10 |1 |10 |19 |
--------------------------------

何がすごいかっちゅーと。

[2]で実行されたマクロでは、B列に入っている値は1です。
通常のオートフィルでは、[1]のように、(エクセル画面上の操作で行っても)最低でも2つのセルに別々の値を入れないと、自動的に加算された値は入っていきません。

なんですが。

[3]のように、

Type:=xlLinearTrend

を指定すると、起点になるセルの値ひとつだけを入力すればOK、というわけ。

かつ、[4]のように、2つ以上のセルに値を入れてからの実施でも、加算の度合いを考慮した値を入れてくれます。

くり返しますが、こんなの、覚える必要はまったくないです。

だって、それって、以下のどちらの書き方をするかっていう議論なんですが。

Range(“A1”).Value = 1
Range(“A2”).Value = 2
Range(“A1:A2”).AutoFill Destination:=Range(“A1:A10”), Type:=xlFillDefault ‘[x]
Range(“A1”).Value = 1
Range(“A1”).AutoFill Destination:=Range(“A1:A10”), Type:=xlLinearTrend ‘[y]

[x]のほうは、自動記録で作ったマクロを削っていけばそのまま作れますが。

[y]のほうは、それよりさらに1行削れますが、 Type:=xlLinearTrend って書かなくてはなりません。

人に見せるときにはちょっとカッコいいかもしれません。
なんですが…。たぶん、カッコいい以外に、特に使い道ないです。

こんな余計な知識を抱えておけるリソースがあるなら、実務に直結するノウハウを頭に入れたほうがいいと思います ヾ(´ー`)ノ


お知らせ:

人気のセミナー2つを、久しぶりに開催します。受講受付開始しました。ふるってご参加ください☆

「親指シフト達人養成塾」
「エクセルデータ分析7つの上級技」 (あと2名)

「エクセルデータ分析」は、ほとんどリピータの方だけで埋まってしまいまして、早くも、残席2つだけとなりました。

親指シフトも、あと5名くらいです。


●塾長のTwitterはこちらです↓。フォローお待ちしていますね。
 http://twitter.com/kanjizaibosatsu

●無料PDFレポート「誰もが知っているWindowsの、誰も知らない12の技」
 http://www.exvba.com/freereport/index.php

●法人研修のお問い合わせはこちら
 https://sv86.wadax.ne.jp/~exvba-com/closed/toiawase_houjin.php

●ジーザス小川の個人サイト「こねこねのさいと」へはこちらから
 http://www.exvba.com/

キーワード

コメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

最新の記事

人気記事

最新記事

カテゴリ

最新コメント

タグクラウド