GoGoマクロのブログ

初心者向けマクロ講座「Go!Go!マクロ」の筆者三太郎の公式ブログです。

セルを選択する方法のあれこれ

2021-06-11 10:27:30 | マクロ作成のコツ

-------------------------
今日おすすめのコンテンツ
-------------------------


セルを選択する方法のあれこれ

エクセルをよく使い慣れた皆さんであれば、
エクセルでセル選択の重要性はよくわかってる
思いますから、

上記のページに書いてあるマクロでのセル選択方法
のあれやこれや、よくこれ押さえおいてくださいね。

ちなみに、

私は、普段の仕事でVBAの開発をする際には、
上記にも出てくる Resize というやつを多用する
ことが多いのですが、

それに更に、その先に出てくる

ActiveCell.Resize

これを使うと、ユーザーの自由度が上がります。

なので、特に他人が使うマクロを作る場合には、
ユーザーの(マクロ使う人の)使い勝手を考えて、
いろいろ選択の仕方を検討してみてください。

世の中のソフトの使い勝手の良し悪し言うのは、
作り手の良し悪し(どれだけ使う人の目線に立って
考えてつくったのかー)、それで決まります!


それと、一つ「裏ワザ」的な話にはなりますが、、

マクロが少々できるようなってきた皆さんは、
上記のページに出てくる Range や Cells という
やつをよく使う思いますけど、

言ってみれば、

Range は縦方向に処理する場合に便利なもので、
Cells は横方向の処理に便利です。

縦方向に処理する場合、

データの数が(行数が)分からない(毎回変わる)
と言った場合に、この講座で何度も何度も繰り返し
勉強してきた「固定を可変に変える」のやり方の、

Range("A2").Select → Range("A" & i).Select

これで、ループの中が単純な変更で済むわけです。

が、これが横方向にデータ数が(列数が)毎回変わる
という場合になりますと、上記のような Range では
可変にはできませんですから、Cells の方を使うこと
になります。

けど、元来、エクセルいうソフトは縦方向の処理に
優れたソフトです。(例えば、オートフィルターは
横方向には処理出来ない、とか。)

それは、Excelがと言うよりもデータベースの宿命
なので、例えば、DBソフトのAccessで横方向が(項目
数が)その都度可変というデータ構成はないわけです。

Excelの場合は、稀に結構よくある横長の表で、
しかも、列数がその都度変わる表を処理する場合です。

その場合、

作業用のシートを1つ設けて、
そこに元データを縦横入れ替えて貼り付けて、
作業シート上で縦長でーたとして処理をして、
そして元のシートに戻す、

というやり方です。この方法ですと、

横方向には出来ないオートフィルターもできますし、
並べ替えの機能もわざわざオプション設定の必要もなく、
何でも普段通りに(縦長で)処理することが出来る
ようなるわけです。

第一、マクロの記録で書いた Range の部分を
わざわざ Cells に書き直すといった手間も掛かり
ませんから、直し間違えのリスクが減らせます。

手順としては、下記の貼り付け操作にオプションを
指定したコピッペをマクロの記録するだけです。
(×往復2回)

「貼り付け」→ 「形式を選択して貼り付け」→ 
[行/列の入れ替え]にチェックを入れる。

そうすると、具体的に作ったコードの例で見ると、
(以下は、3行の可変横長データでの例です。)


Sub Macro1()
    Sheets("Sheet1").Select
    Rows("1:3").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Sheet2").Select
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
End Sub

Sub Macro2()
    Sheets("Sheet2").Select
    普段の縦長データの処理と同じ
End Sub

Sub Macro3()
    Sheets("Sheet2").Select
    n = Cells(Rows.Count, "A").End(xlUp).Row
    Range("A1:C" & n).Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Sheet1").Select
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
End Sub

Sub 実行マクロ()

    Call Macro1    '横を縦にコピッペする
    Call Macro2    '縦方向に普段の処理をする
    Call Macro3    '縦を横に戻すコピッペをする

End Sub


こんな具合となりまして、上記の Macro2 の 
「縦長データの処理」の中身は、普段と全く同じに、
オートフィルターなど何でも使えるようなるわけです。

ベテランの皆さんで、横長データ、且つ列数が不特定の表を
マクロで処理しなければならない場面がもしありましたら、
この方法、是非お試しあれ!


コメント    この記事についてブログを書く
« なぜ、多くの人がマクロを組... | トップ | 失敗しない為のループの通な... »
最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

マクロ作成のコツ」カテゴリの最新記事