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

連続していない複数セルを選択する – Excelマクロ・VBA

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

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

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

キューバ屈指の外人向けリゾート地バラデロから、マタンザスを経由して、バスでハバナに向かいます。

エクセルマクロ達人養成塾塾長ブログ-バスの中はこんな感じ。

バスの中はこんな感じ。

エクセルマクロ達人養成塾塾長ブログ-道路の中央分離帯に咲く花。

道路の中央分離帯に咲く花。
エクセルマクロ達人養成塾塾長ブログ-カリブ海の海 ヾ(´ー`)ノ

カリブ海の海 ヾ(´ー`)ノ

エクセルマクロ達人養成塾塾長ブログ-そして、マタンザスに到着。

そして、マタンザスに到着。

エクセルマクロ達人養成塾塾長ブログ

駅前のバスロータリーにて。
そういえば、バスがマタンザスからハバナに向かうとき、しばらくの間iPhoneのカメラを回しっぱなしにして、動画を撮ったのだった。

機会を見て、どんな感じの街だったのかも紹介したいと思う。
塾長のキューバ旅行記、最初から読みたい方はこちらから


連続していない複数セルを選択する – Excelマクロ・VBA

ちょっと前のブログで、以下のようなプログラムを紹介しました。

複数セルに値を入れる処理を高速化したい – Excelマクロ・VBA

複数セルでの処理を高速化したい-その2 Unionメソッドを使用する Excelマクロ・VBA

Sub KaihenCode3()

Dim wsSche As Worksheet

Dim dtTo As Date

Dim cHiduke As Long

Dim cName As Long

dtTo = #1/1/2012#

Set wsSche = Worksheets("スケジュール")



Dim rB As Range

Set rB = wsSche.Range("C13,C16,C19,C22,C25,C28,C31,C34,C37,C40,C43") '[*]



Dim rTgt As Range '[a]

Do While Month(dtTo) = 1

cHiduke = Day(dtTo)

'入力月の日付を入力

wsSche.Range("C10").Offset(, cHiduke).Value = Day(dtTo)

'曜日を入力

wsSche.Range("C11").Offset(, cHiduke).Value = WeekdayName(Weekday(dtTo), True)

If Weekday(dtTo) = 1 Or Weekday(dtTo) = 7 Then

'[b]

If rTgt Is Nothing Then

Set rTgt = rB.Offset(, cHiduke)

Else

Set rTgt = Union(rTgt, rB.Offset(, cHiduke))

End If

'



End If

dtTo = DateAdd("d", 1, dtTo)

Loop

'[d]

With rTgt

.Value = "○"

.Font.Size = 11

.Font.Bold = True

.HorizontalAlignment = xlCenter

End With

End Sub

で、このとき、[*]にあるコード。

ちょっと解説します。

エクセルシート上の連続する複数のセルを指定するときの方法としてメジャーなのは、以下の方法。

Range("C3:F5").Select '[a]

あとは、以下をマスターしておけばいいかな。

Range(Range("C3"), Range("G8")).Select '[b]

「自分で書けるようになるため」という目的で言うと、あとは、とりあえず無視してもいいかと思います。

他にも、ネットを探すとマニアックな指定方法についていろいろ書いている人を見かけますが…。

まあ、たくさん知ったからといって、少なくとも、自分で書く分には、メリットがある訳でもないですし。

既存のプログラムのメンテナンスをするとき、人が書いたコードの中に他の書き方が出てきたら、それから興味があればネットで調べてみてください。

で。

あとは、「連続する複数のセル」を指定するとき、どう書くのか、というところなんですが。

Range("A1, C3, E5").Select '

で。

これ、分かりにくいですけど、引数はひとつです。

ダブルクオートの位置に注意です。
慣れないうちやりがちな失敗は、以下。

Range("A1", "C3", "E5").Select '[d]

↑これだと、そもそもRangeプロパティが、引数を最大2つしか取らないので、実行時エラーとなります。

(”A1″, “C3”, “E5” という3つの引数を受け取る形になっている)
ややこしいのは、「Rangeプロパティは、引数を最大2つしか取らない」とは書きましたが、それは逆に言うと、「2つまでなら取り得る」ということ。

そして、2つの引数の両方ともを文字列とした以下は、一応動作する、ということです。
Range(“A1”, “E5”).Select ‘[e]

↑実行してみると分かりますが、上記のプログラムは、セルA1~E5の範囲を選択します。

(詳しい説明は省略しますが、なぜかというと、Rangeプロパティの2つの引数には、「セル」または「セルを指定する文字列」をあてればよいから)
..ちょっと、脱線してしまった。

それで、「連続する複数のセルを指定するとき、どう書くのか」ということで、以下のコードの解説に戻るんですが。

Range("A1, C3, E5").Select '

こういうの、作るときは、自動記録をすると簡単です。

(というか、どう書けばよいのか記憶が曖昧だったら、自動記録してみるのがよい)

例えば、上記

のコードであれば、自動記録をしつつ以下の作業をすれば、用意に欲しいサンプルを取得できます。

[1] セルA1をクリック

[2] [Ctrl]キーを押しながら、セルC3をクリック

[3] [Ctrl]キーを押しながら、セルF5をクリック

まー、いつも言っていますが、「分からないことがあったら、自動記録を使いましょう!」ということです。


お知らせ:

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

「親指シフト達人養成塾」

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

ではでは (^^)/~

キーワード

コメント

3 thoughts on “連続していない複数セルを選択する – Excelマクロ・VBA

コメントを残す

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

最新の記事

人気記事

最新記事

カテゴリ

最新コメント

タグクラウド