こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルのマクロの実行場所(セル)の指定(初心者)

こんにちは。いつもお世話になっております。
ここで色々教わりながら、本も参考に色々試行錯誤しながらあがいている超初心者です。
下記のマクロを個人ブックに保管して、複数あるブックのセルに書式設定をしようとしています。
超初心者故マクロのコードが書けないので、マクロの記録で下記の動作をマクロにしようとしました。

文書Noと入力した日付の整合性をチェックし、外れた場合(例:2017年4月なら、Noは1704からら始まらないと)青斜体にしたい。

一応正常に動くことは確認したのですが、この書式設定を実行するセルがブックによってちがっています。
下記の例は入力日をA1に入れることにしていますが、実際には列も行も違っています。(さらにはこれで設定した書式を、書式のコピーで下に必要な行数分コピーすることになります) 
「相対参照で記録」とか、できたマクロのコードの指定セルの$を取ってみるとか思いつくことは試行してみたのですが、うまく行きません。
選択しているセルに設定する為には、何処をどう修正すれば良いのでしょう?

対象ブックが500、使用頻度が高く当面書式設定したいブックが200近くあるので何とかマクロで対処したく宜しくお願いします。

Sub 文書Noと日付()
' Keyboard Shortcut: Ctrl+d
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=LEFT($A$1,4)<>TEXT(TODAY(),""yymm"")"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Font
.Bold = False
.Italic = True
.Color = -65536
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
End Sub

投稿日時 - 2017-04-14 12:44:50

QNo.9317437

困ってます

質問者が選んだベストアンサー

ANo.1です。

> 土日だったため試行できずにいましたが、今試したところ、マクロの実行はカーソルのある位置(アクティブセルというのでしょうか?)に書式設定されるのですが、書式設定の式中のセルの指定が空白 LEFT( ,4)<>TEXT・・になっています。

コードはコピペしました?それとも手打ち?
手打ちでしたら変数「sAddress」のつづりを間違えている可能性が高いと思います。
ご確認ください。

投稿日時 - 2017-04-17 20:26:27

補足

度々のご回答ありがとうございます。 お手数をお掛けします。
朝一で再度コードをコピペして確認したところ、意図したとおりに動くことを確認しました。
前回もコードはコピペしたのですが、sが抜けたのでしょうか?

非常に助かりました。
先ずはこれで作業を進めようと思います。

実は、この続きの作業も有るのですが、当方の実力では折角教えて頂いても持ち腐れになる可能性もあるので、出来そうなこから1つずつ動作確認しながら作業するつもりで質問させて頂きました。
マクロは超が付く初心者なので回答者様からの指摘を確認しながら、1つずつです。

入門書も購入したのですが、実務的にはなかなかな追いつかずなもので、ついここで質問させていただいています。

このマクロの続きの作業は、このセルの書式設定を下まで書式コピーすることなのですが。
下に引っ張る範囲がシート毎に違っているので、まずは開始セルにマクロで書式設定して、後は「書式コピー」で何とか。

恐らくRangeで指定すれば一発で、と思いますが、今度は当該の書式設定の仕方が分からず、まずは確実に任意の1つのセルに設定して、後は書式コピーで作業することを考えました。
次に選択した範囲への「書式のコピー」をマクロにする手も有りかと思いますが、どうせ2度手間なら、書式のコピペで対応した方が当方には向いているかと、言う段階です。

投稿日時 - 2017-04-18 09:21:45

お礼

今、作業を開始する前に少し練習を兼ね検証してみたのですが、上記の書式のコピペは不要だと分かりました!

これで作業を開始させていただきます。

助かりました。 
また宜しくお願い致します。

投稿日時 - 2017-04-18 10:49:21

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

なんというか、この処理についての意義がよく伝わってこないので、
解説はしませんが・・・

Dim myAdd As String
    myAdd = Selection(1).Address(rowabsolute:=False, columnabsolute:=False)
    With Range(Selection, Selection.End(xlDown))
        .FormatConditions.Add Type:=xlExpression, _
                Formula1:="=Left(" & myAdd & ", 4)<>TEXT(TODAY(),""YYMM"")"
        .FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
        With Selection.FormatConditions(1).Font
            .Bold = False
            .Italic = True
            .Color = -4165632
            .TintAndShade = 0
        End With
        .FormatConditions(1).StopIfTrue = False
    End With

こんな感じにしてやれば、アクティブセルから下方向の
データが入力されている範囲に一気に条件付き書式を設定できます。


質問して回答を得るのは良いことですが、
中に「何が書いてあるのか」理解しないと意味が無いように思います。
ま、それ以前にエクセルの基本機能を知ることの方が大事ですけどね。
例えば今回の案件について、
このマクロ「のみ」が複数回走るとどうなるか?
このマクロを走らせる前にやっておくべき処理があるんですが、何でしょう??
その辺りも考えておかないとダメですよ。

投稿日時 - 2017-04-17 16:49:47

補足

tsubu-yukiーさん
いつもお世話になっております。
何度も適切な回答を頂いていますので、質問の背景などすこし説明したい、と思ったら長文になってしまい更に申し訳なく。。。

(1)ご指摘の件は、なんとか中身を理解したいと勉強を始めているのですが。。
今回のような比較的簡単(小生でもマクロなら簡単にできると思われる)作業ですら、入門書からでは追い付かず、実践的にマクロの記録(これは入門書で覚えました)を利用してそれの組合せを試行錯誤している状況です。

(2)ご指摘の「マクロのみを複数回繰り返す」は今回の試行錯誤で既に経験済みの内容かと?
設定がどんどん増殖するような感じになってしまう現象の事でしょうか?
当方はこれを確認して(あっさり)自己解決をあきらめてここで質問させてもらった次第です。

(3)必要な前処理については、当然ですが全く思いつきません。

後、関数はこれまで色々使っていますが、そろそろ限界かと、マクロを始めました。

今後もしばらく(あといくつかの作業に関して)ここでお世話になると思いますので、何卒よろしくお願い致します。

(4)目的は、複数の人が毎日使用する多数のエクセルシートへの誤入力防止です。
例として、文書Noの最初のいくつかの数字が日付なのですが、20170418、1704、201704、704、0428、等々依頼部署によって違っており、これを間違えると結構大きな問題になるので、各シートに規則を外れた場合のアラームを設定しようとしています。
このNoは他のシート以外にもワードの文書等にも、あちこちに転記されるのですが、この転記に関してはほとんど関数とリンクで何とか対応したのですが、元のNoの入力間違いもたまに発生するので、今回の書式設定をしようとしているのですが、限界を感じてこれまで見ない様にしていたマクロを勉強し始めた次第です。

入門書で、マクロの自動記録にはまったのですが、やはり自動記録では限界があり。
対象ブックが当面200、全部で500程度あり、これまでは手作業で対応していたのですが、どうしてもマクロを使用したくなります。

質問が抜けが多くお手数をおかけしますが、今後とも宜しくお願い致します。

投稿日時 - 2017-04-18 10:22:47

お礼

ご丁寧な回答ありがとうございます。
当方に使えるマクロには限界が有りますので、試行錯誤しながら、手作業と併用で、コスパ(時間/効果)の良いところで妥協しながらの作業になります。
今後とも宜しくお願い致します。

投稿日時 - 2017-04-18 11:27:50

ANo.1

必要最低限の修正にするならこんな感じでしょうか。

Selection.FormatConditions.Add Type:=xlExpression, Formula1:= "=LEFT(A1,4)<>TEXT(TODAY(),""yymm"")"



sAddress = Replace(Selection.Address, "$", "")
Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=LEFT(" & sAddress & ",4)<>TEXT(TODAY(),""yymm"")"

自分の作業で使うためでしたらこの程度で十分だと思いますが、誰かに使ってもらうのでしたら、複数セルを選択した場合などの処理を追加する事をお勧めします。

投稿日時 - 2017-04-14 15:02:10

補足

mt2015-さん
早々のご回答ありがとうございます。
土日だったため試行できずにいましたが、今試したところ、マクロの実行はカーソルのある位置(アクティブセルというのでしょうか?)に書式設定されるのですが、書式設定の式中のセルの指定が空白 LEFT( ,4)<>TEXT・・になっています。
ここに選択したセルを入れれば完成なのですが。。。
お手数ですが補足の程宜しくお願い致します。

投稿日時 - 2017-04-17 13:51:43