- ベストアンサー
エクセルマクロについて(Office Onlineのカレンダーテンプレート)
エクセルのマクロについてわからない点がありますので、どうか教えて頂けないでしょうか。 Windows XP Pro、Office XPの環境で、マイクロソフトのOffice Onlineで下記の2007年カレンダーをダウンロードしました。 http://office.microsoft.com/ja-jp/templates/TC102096441041.aspx?CategoryID=CT101425251041 そこで、例えば1月のカレンダーの1日の「1」のセルを最初に選択しておきます。 ここからマクロを相対参照で記録開始し、方向キーで右へ1つ移動させてマクロの記録を終了します。 そして記録したマクロを実行すると、私の記録した動きではないようなのです。 具体的に言うと、例えば「2日」の位置からマクロを実行すると、「赤口」だけ選択して欲しいのに、「赤口」とその右の「3」の2つの部分が選択されてしまうのです。 この動きが私には理解できずに困っているのです。 何故このような結果になってしまうのでしょうか。 マクロに詳しい皆さん、どうかよろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
質問のテンプレートダウンロードしてみました。 おかしい原因は、結合セルでマクロ記録しているからです。 結合セルだとセル範囲を余分にとってしまいます。 で、どうすればいいかお分かりですよね。 質問のマクロ記録を結合してないセルですればいいわけです。 例えば、 セルP1を選択しておいてマクロ開始(相対参照) 方向キーで右へ一つセル移動、そして終了。 これで上手くいきます。
その他の回答 (2)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。#1 のWendy02です。 >たったこれだけのことも記録マクロの限界を超えている、 というよりも、VBAは、「結合セルとマクロとは相性が悪い」と覚えておいたほうがよいです。結合セルが入ると、非常に手数が多くなります。 マクロの仕組みが分かって記録マクロを作るというのは、以下のようなコードの場合は、テクニックとしては有効でも、その必要はありませんね。 ActiveCell.Offset(, 1).Select 少しでもよいから、本格的なVBAの言語を学んだらよいかと思います。
お礼
再度のご回答、どうもありがとうございます。 返答が遅れた事をどうかお許しください。 5年位前まではVBAである程度大きなプログラムも組んでいたのですが、記録マクロは殆ど行った事がなく、今回本当に久しぶりに使ってみたのです。 カレンダーの日付の数字を大きくして「大安」などの文字を日付の下に配置するマクロを簡単に記録してみようと試みたのですが、2,3分で出来るだろうと考えていた事がうまくいかず、悩んでしまいました。 落ち着いて考えてみると原因はすぐに判明したのですが、「記録マクロ」ってこんなものだったの?と、思ってしまったのです。 結合セル以外にも記録マクロと相性の悪いものが多分あるはずなので、これから少し調べてみようと思います。 ご助言、どうもありがとうございました。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 単に、右に行くだけですから、マクロにしなくても、右の矢印キーで動かせばよいと思いますが、こういうのは、記録マクロの範囲でもないけれど、マクロ(VBA)にするには、あるレベルが必要になると思います。 うまくいかないのは、記録マクロでは、次のセルの範囲を取っているだけだからです。 Sub RightMoving() If Intersect(ActiveCell.Offset(, 1), Columns("AY")) Is Nothing Then ActiveCell.MergeArea.Offset(, 1).Select ElseIf InStr(ActiveCell.Offset(6, -3).Value, "平成") = 0 Then ActiveCell.Offset(6, -44).Select '次の月 Else ActiveCell.Offset(13, -44).Select End If End Sub
補足
回答ありがとうございます。 >うまくいかないのは、記録マクロでは、次のセルの範囲を取っているだけだからです。 という意味がよくわからないのですが、所詮「記録マクロ」だけではうまくいかないこともある、たったこれだけのことも記録マクロの限界を超えている、ということなのでしょうか。
お礼
ご回答ありがとうございます。 仕事の都合で返答が遅れた事をどうかお許しください。 結合セルを含んだ場合の記録マクロの性質を理解できました。 以前はVBAで大きなプログラムも組んでいたんですが… お恥ずかしい限りです。 ご助言、深く感謝いたします。