[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『行範囲が変動する場合の範囲指定と変数宣言』(はんりん)
集計データの日付エラーが無いか確認するためのマクロを作ろうとしています。
最終行にあります”Selection.AutoFill Destination:=Range("AB5:AC1000")”
の"AB5:AC1000"の部分を"AA"の表示されているデータに合わせて範囲指定したいのですが集計日によって行範囲が変動する場合の範囲指定方法を教えて頂けないでしょうか。
"AB""AC"の列は空白行となっております。
変数の宣言方法につきましてもご教示頂けませんでしょうか。
宜しくお願いします。
Sub 搬出日チェック()
Columns("B:B").Select Selection.EntireColumn.Hidden = True Columns("D:X").Select Selection.EntireColumn.Hidden = True Columns("Y:Y").EntireColumn.AutoFit Range("AB4").FormulaR1C1 = "搬入日-搬出日" Range("AC4").FormulaR1C1 = "許可日-搬出日"
Range("AB5").FormulaR1C1 = _ "=IF(RC[-27]="""","""",IF(RC[-27]-RC[-25]<=0,""O.K."",""搬出日エラー""))"
Range("AC5").FormulaR1C1 = _ "=IF(RC[-28]="""","""",IF(RC[-3]-RC[-26]<=0,""O.K."",""搬出日エラー""))" Range("AB5:AC5").Select Selection.FormatConditions.Add Type:=xlTextString, String:="搬出日エラー", _ TextOperator:=xlContains Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Font .Color = -16383844 .TintAndShade = 0 End With With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .Color = 13551615 .TintAndShade = 0 End With Columns("AB:AC").EntireColumn.AutoFit Selection.FormatConditions(1).StopIfTrue = False Selection.AutoFill Destination:=Range("AB5:AC1000")
End Sub
< 使用 Excel:Excel2010、使用 OS:Windows7 >
纏めると、
Sub 搬出日チェック()
Columns("B:B").EntireColumn.Hidden = True Columns("D:X").EntireColumn.Hidden = True Columns("Y:Y").EntireColumn.AutoFit Range("AB4").FormulaR1C1 = "搬入日-搬出日" Range("AC4").FormulaR1C1 = "許可日-搬出日"
With Range("AA5", Range("AA" & Rows.Count).End(xlUp)) .Offset(, 1).FormulaR1C1 = _ "=IF(RC[-27]="""","""",IF(RC[-27]-RC[-25]<=0,""O.K."",""搬出日エラー""))" .Offset(, 2).FormulaR1C1 = _ "=IF(RC[-28]="""","""",IF(RC[-3]-RC[-26]<=0,""O.K."",""搬出日エラー""))"
With .Offset(, 1).Resize(, 2) .FormatConditions.Add Type:=xlTextString, String:="搬出日エラー", _ TextOperator:=xlContains .FormatConditions(.FormatConditions.Count).SetFirstPriority With .FormatConditions(1).Font .Color = -16383844 .TintAndShade = 0 End With With .FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .Color = 13551615 .TintAndShade = 0 End With .EntireColumn.AutoFit .FormatConditions(1).StopIfTrue = False End With End With End Sub
こんな感じになります。
(ウッシ) 2016/11/22(火) 16:29
僕が書いたらこんな感じです。
参考になれば。。。
Sub 搬出日チェック()
Dim Rng As Range '操作対象セル範囲
Columns("B").EntireColumn.Hidden = True Columns("D:X").EntireColumn.Hidden = True Columns("Y").EntireColumn.AutoFit
Set Rng = Range(Range("AA5"), Cells(Rows.Count, "AA").End(xlUp)) Set Rng = Rng.Resize(, 2).Offset(, 1)
With Rng .EntireColumn.ClearContents .Cells(0, 1).Value = "搬入日-搬出日" .Cells(0, 2).Value = "許可日-搬出日" .Columns(1).Formula = "=IF(A5="""","""",IF(A5-C5<=0,""O.K."",""搬出日エラー""))" .Columns(2).Formula = "=IF(A5="""","""",IF(Z5-C5<=0,""O.K."",""搬出日エラー""))"
.Worksheet.Cells.FormatConditions.Delete .FormatConditions.Add Type:=xlTextString, _ String:="搬出日エラー", _ TextOperator:=xlContains With .FormatConditions(1) .Font.Color = -16383844 .Interior.Color = 13551615 End With .EntireColumn.AutoFit End With End Sub (まっつわん) 2016/11/22(火) 16:49
ご教示ありがとうございます。
Dim Rng As Range '操作対象セル範囲・・・を宣言すれば宜しいのですか。
変数の宣言方法が何を対象とすれば良いのか?理解できずに困っております。
変数ですから入れ物に入れる対象物なのでしょうが…それが??の状態で。
ありがとうございます。
(はんりん) 2016/11/22(火) 17:09
操作するのはセルですから、
セル自体を対象にします。
Excel VBAでは特にRangeオブジェクトと呼ばれます。
変数には値だけではなく、オブジェクトと呼ばれるもの(セル、シート、ブック等)も代入できます。
宣言としては
Dim 変数名 as Range
~~~~~ ↑ここで変数の型をRangeオブジェクトとする。
対して、変数にオブジェクトを代入するときは
set 変数名 = Range("A1")
~~~
↑Setステートメントを明示します。
(まっつわん) 2016/11/22(火) 17:18
ちょっと難しい概念ですが、ぜひ理解してください
(まっつわん) 2016/11/22(火) 17:26
丁寧なご教示ありがとうございます。
概念・・・頭の固い私には大変難しそうですが参考書を見ながら理解につとめたいと思います。
ありがとうございます。
(はんりん) 2016/11/22(火) 17:30
ご教示ありがとうございます。
Offsetの使い方以前この質問箱でご教示頂いたのですが応用の仕方が理解できていませんでした。
先程から、ウッシ様へのお礼コメントが3回ほど続けて反映されておりませんでした。
申し訳ございません。
(はんりん) 2016/11/22(火) 17:34
>>AB5:AC1000"の部分を"AA"の表示されているデータに合わせて範囲指定したいのですが
この部分のみでいえば、 Selection.AutoFill Destination:=Range("AB5:AC1000")
この "AB5:AC1000" を "AB5:ACなんとか" にするわけですね。 VBAの記述としては "AB5:AC" & なんとか になります。 じゃぁ、なんとか はどう記述するか。 AA 列のデータ最終セルの行番号 ということですね。 これは Range("AA" & Rows.Count).End(xlup).Row で求めることができます。
ですから、合成すれば
Selection.AutoFill Destination:=Range("AB5:AC" & Range("AA" & Rows.Count).End(xlup).Row)
こんな書き方をしてもOKですね。
(β) 2016/11/22(火) 17:36
範囲指定の方法ご教示ありがとうございます。
以前にもご教示頂いたのですが、中々応用する理解力が乏しく。
大変助かります。ありがとうございます。
(はんりん) 2016/11/22(火) 17:40
http://www.itmedia.co.jp/im/articles/0703/06/news125.html
視覚的に確認するには、
僕のサンプルをステップインで実行し、
Set Rng = Rng.Resize(, 2).Offset(, 1)
の行を実行した後、ローカルウィンドウで
Rngの左の「+」をクリックすると、何が代入されたか確認出来ます。
そこに入っているものが、Rangeオブジェクトの一部です。(見れないものもあります。)
(まっつわん) 2016/11/22(火) 18:22
5分で絶対に分かるオブジェクト指向少し拝見しました。
これから、じっくりと読ませて頂きます。
ローカルウィンドウの使用方法ご教示ありがとうございます。
「+」をクリックしてみましたが、目が点になりました。
何がどうなっているのか?
オブジェクト指向を理解するのは大変なんですね。
牛歩以下の歩みとなりますが読んでまいります。
これからも、宜しくお願いします。
皆様 ありがとうございます。
(はんりん) 2016/11/24(木) 15:23
なのでその中から、
フォントの名前を知りたければ、
Fontを探して、また左の+をクリックして、
表示されたNameのところを見ればいいわけです。
それを見る作業をコードで書くと、
Sub test()
Dim Rng As Range
Set Rng = Range("A1")
MsgBox Rng.Font.Name End Sub
となります。
(まっつわん) 2016/11/24(木) 16:01
ローカリエリアでの確認何となく
メッセージボックスへの指示がフォントネームなら
Font→Name→MS Pゴシックへと導き出される訳ですね。
この部分だけですが何となく、おぼろげながら分かったような分かっていないと
思いますが、この先の展開をどうすれば良いのか先程ご教示いただきましたオブジェクト指向
をじっくりと読み進めます。
ありがとうございます。
(はんりん) 2016/11/24(木) 16:21
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.