• ベストアンサー

EXCEL・VBAについておしえてください

Excel VBAで以下のようなことをしたいです。 C列に作業日が入っています。 date(today)を条件に C列で該当するセルが あればフォントの色を変えて強調させようと考えています。 それ以外は黒字フォントのままで固定です。 単独のセルだけを対象にするとうまくいので おそらく、行全体の値を取得しなければならないと 思うのですが forをつかってuboundを使っても うまくいきません。どなたかご意見をください 以下 うまくいかないコードですが のせています。  *********************** range("A1") = date set 選択範囲 = columns(C) if 選択範囲 = range("A1") then end if

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

  • ベストアンサー
  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.2

Sub ssssss() Dim rg As Range Dim Crg As Range ’対象範囲 Set Crg = Range(Cells(1, 3), Cells(Cells(Rows.Count, 3).End(xlUp).Row, 3)) ’対象範囲を1行目からC列に値のある最後まで For Each rg In Crg 選択したC列の範囲内をすべて一つずつ If rg.Value = Date Then ’日付が今日だったら rg.Interior.ColorIndex = 6 'そのセルを黄色にする End If Next End Sub もしその行のA列からF列を黄色にということでしたら rg.Interior.ColorIndex = 6 を range(cells(rg.row,1),cells(rg.row,6)).interior=6 にしてください。

tororo119
質問者

お礼

回答ありがとうございます。 書き込み内容を元に、無事VBAを 完成させることができました。 【目的】 イベントプロシージャに記述して 毎朝オープン時に当日の案件を強調させることにより作業漏れが なくなるようにしたいため 【参考になった点】 for each を使うにあたり、rg crg(該当列)の rgを作成させることが思いつかなかったため 1 TO crg(該当列)と数字の1を必ず使っていたため また、選択範囲があるわけでもないのでselectionも 違うのかなと

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

条件付書式の問題ではないかな。 そういう場合、セルの処理を繰り回すシコシコ方式でなく、範囲指定して、条件付き書式そのものをコード化するほうが良い。 例 http://t_shun.at.infoseek.co.jp/My_Page/Excel-VBA/vba_page12.htm のFotmatConditionなど 具体的には「操作をして、マクロの記録を採れ」ばどんなコードになるか分かります。 そのためにエクセルVBAがあるのです。 どんなものがあるか、日ごろから勉強するほかないです。 ーー >シコシコ方式 私が勝手に言っている名前だが、独自のロジックで1セルづつの値を問題にして処理するやり方。 初心者で少し進んだ人が、まず思いつきやすい方法。 Findメッソドなら、1セルずつIF文で聞いていく Sortメソッドならソートのアルゴリズムに則ってソートする こういうのは誤りも多いとか、考える時間がかかりコード数も多くなる。 ーー 上記は質問の路線で答えてないのは判ってます。 しかし質問者の路線で答えることは、今後のためにならないと思う。 実際に自分の現在の知識・力でVBAを使っていく方向と 一般にエクセルのVBA解説書などで載っている代表的・標準の方法の習得と 平行してやっていかないと進歩がないと思うからです。 http://meigen.shiawasehp.net/k/koushi04.html の「思う」を「行う=使う}に置き換えて見る心境です。

tororo119
質問者

お礼

回答ありがとうございます。 実は、条件付き書式を使い、today関数を使って色付けをしていたのですが 複数の条件付き書式をつかっているせいか、色が斑になってしまって うまくいかなくなっていたので、VBAで処理しようと思った次第です。 【参考になった点】 困った時はマクロの記録と取りなさいと言われたことを思い出しました。 初心者なりにVBAを記述して何となくうまくいってたので、今回の相談で もう一度VBAの参考書を見直すきっかけになりました。

全文を見る
すると、全ての回答が全文表示されます。
  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.3

Dim r As Range For Each r In 選択範囲 ... Next で、選択範囲のセルを一つずつ見ることが出来ます

全文を見る
すると、全ての回答が全文表示されます。
  • turuzou
  • ベストアンサー率33% (15/45)
回答No.1

直接の回答ではありません、下記も参考になりそうです。 エクセル技道場 http://www2.odn.ne.jp/excel/ の 文字の色が赤のセルをイタリックに http://www2.odn.ne.jp/excel/waza/macro.html#SEC7

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 【EXCEL2003】8つの条件がある書式設定のVBAの書き方

    VBAの書き方について御教授ください! 複数のシートに、入力値が決まっているA列とC列があります。 その入力値の組み合わせによって、入力時にA:Cのセル書式を以下のように8通りに変えたいです。 マクロの自動記録しか経験がなく調べたのですがよくわかりませんでした。 よろしくお願いいたします。 1.A列「あ」・C列なし→セル背景:黄 2.A列「あ」・C列「ア」→セル背景:黄 フォント:青 3.A列「あ」・C列「イ」→セル背景:黄 フォント:赤 4.A列「い」・C列なし→セル背景:緑 5.A列「い」・C列「ア」→セル背景:緑 フォント:青 6.A列「い」・C列「イ」→セル背景:緑 フォント:赤 7.A列なし・C列「ア」→フォント:青 セル背景:なし 8.A列なし・C列「イ」→フォント:赤 セル背景:なし

  • Excel2013VBA列選択の拡大

    ExcelVBA2013です。 列の取得でつまづいております。 お手数ですが、ご教授下さい。 下記のコードで選択範囲のコピー貼り付けは出来ていますが、列幅がコピーされていませんでした。 CC3のセルを基準にOffsetとResizeで範囲拡大してコピーしているためだと思います。 CC3の左隣のAX3:CB3はセル結合されています(○月)。(その下の4行目は日付の1~31が入力) 列は、今回はAX3:CC3まで(1月分)取得できればよいです。(可変します) MaxCol = Range("J5").End(xlToRight).Column  で列取得できます。 行の位置は、MaxRow = Range("I5").End(xlDown).Row  で取得した値です。 それで、列全体を取得しようと、 MaxCol = Columns(MaxCol).Select で最終列は取得できましたが、そこから列選択の拡大ができればと思っています。 現在は、AX3:CC237まで取得コピーして、隣の列に貼り付けで列幅が違う。 希望はAX:CCまでの列を取得選択コピーして貼り付け。 Sub SAMPLE() Dim MaxRow As Variant, MaxCol As Variant Dim r As Range, c As Range MaxRow = Range("I5").End(xlDown).Row '最終行番号 MaxCol = Range("J5").End(xlToRight).Column '最終列番号 Set c = Cells(3, Cells(3, Columns.Count).End(xlToLeft).Column) '表の右上角のセル番地を取得 c.Select c.Offset(0, -31).Resize(MaxRow - 2, 32).Copy c.Offset(0, 1) '表右上から1月分選択範囲拡大してコピー隣の列より貼りつけ End Sub

  • Excel2003でのVBA

    WindowsXPでExcel2003を使っています。 Excelにある表をマクロを使って編集したいと思ったのですが、セルの選択の設定で教えてほしい事があります。 まず、横A列~F列、縦1行~6行までの表があります。 A1セルは、空白。 B1セル~F1セルには、1~5の数字が入っています。(見出しなので全て入ってます。) A2セル~A6セルには、a~eのアルファベットが入っています。(見出しなので全て入ってます。) 表の中のデータは、ところどころにしか入っていなくて、全て埋まっていません。 また、横A列~F列というのは固定なのですが、縦1行~6行までという行数は変動します。 この表で、A2セルからF6セルまでを選択したいのですが、行が変動するのでA6とかF6とかでは指定できません。 Range("A2").Select Selection.End(xlDown).Select これで、A2セル~一番下の行(ここではA6セル)まで選択した後、F列まで(列の数は固定です。)選択するにはどうしたらよいのでしょうか? 右下のセルは、空白なので困っています。 Range(Selection, Selection.Next).Select こんなものを考えましたが、これでは一つ右隣しか選択できません。 これを少しいじればいいのではないかと思うのですが、全然違う方法でもかまいません。 どなたか教えていただけないでしょうか? 宜しくお願いします。

  • Excel2010VBA:Find、日付形式の一致

    Excel2010VBAでワークシートのE列 (関数:=IF(AND(A2<>"",B2<>"",C2<>"",D2<>""),DATE(A2,B2,C2)+D2,"")) とマクロの変数「日時1(a)」が一致すると処理を行うプログラムを作りました。(この場合一致するのは「2011/1/2 23:01」です。) E列とマクロの変数「日時1(a)」は両方とも日付形式で、「2011/1/2 23:01」で一致するはずなのですが変数「範囲」が「Nothing」で一致しません。 ■ワークシート ------------------------------------------------------------------------- A    B C D    E 2011  1 2 23:01  =IF(AND(A2<>"",B2<>"",C2<>"",D2<>""),DATE(A2,B2,C2)+D2,"") ------------------------------------------------------------------------- ■コード ------------------------------------------------------------------------- Dim 日時1(1 To 999999) As Date, 範囲 As Range With Workbooks("ブック.xlsm").Worksheets("シート") Do Set 範囲 = .Range(Cells(2, 5), Cells(527041, 5)).Find(What:=日時1(a)) If Not 範囲 Is Nothing Then ~ End If ~ ------------------------------------------------------------------------- これを一致させるためにはどうしたらいいのでしょうか? 回答よろしくお願いします。

  • エクセル VBA セル範囲の一部解除

    rangeオブジェクト型変数にセル範囲を代入した後、一部のセルを解除したいのです。 グラフを描くためにc列とE列をデータに散布図を描こうとしてます。セル範囲の選択はrange型変数に代入しました。しかしゼロ以下の値のセルは削除したいのです。 for each c in datacell if c.value <0 then c.value="" next c 上記のようにすると目的は達しますが、ワークシート上の値も削除されてしまい、好ましくありません。良い方法はないでしょうか?

  • エクセルVBAで

    いつもお世話になります。 Range("a1:C5,E5:H10").Select Selection.ClearContents この選択範囲をそれぞれ5列ずつづらしていきたいのですがfor文を使って出来るでしょうか? セルが1つならcells(1,5n)とすればいいのですが,範囲が連続で複数の場合(rangeを使った場合)はどうすればいいのでしょうか。

  • エクセルVBAについて、ある領域の中のセルが変化したらマクロが実行され

    エクセルVBAについて、ある領域の中のセルが変化したらマクロが実行される方法を教えて下さい。 下記のようなイメージです。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If ActiveCell.Columns("A:A") Then 上記のようなイメージで2通り教えて下さい。 ・A列が選択された時 ・A列のうちで例えばA3セル以降が選択された時 宜しくお願いします。

  • VBA(Excel)セルの罫線について・・・

    VBAで、セルに罫線をつけたいのですが、選択範囲の外枠だけに罫線を ひきたいのに、選択範囲内全ての罫線がひかれてしまいます。 以下のようなものを実行しました。 Public sub Sample() Range("A1:C3").Select With Selection .BorderAround .Borders.ColorIndex = 1 '線の色を黒にする .Borders.Weight = xlThin '線を細い線にする End With End Sub どうしたら、選択範囲の外枠だけに線をひけるでしょうか? よろしくお願いします。

  • エクセル VBA 範囲指定方法

    エクセルVBA初心者です。 以下の範囲指定について教えてください。 一つの表のK列の一番下のセル(不定)を選択→Range("K65536").End(xlUp).Select その選択されたセルからA3(固定)まで範囲を選択したいのですが、不定セル:固定セル の範囲指定方法が分かりません。 よろしくお願いいたします。

  • VBA 並び替え

    たびたびお世話になります 選択範囲の並べ替えを行いたく こちらで教わった方法で セル位置の取得を行い Set r = Columns("A").Find("b1", lookat:=xlWhole, After:=Range("A" & Rows.Count)) Set rr = Columns("A").Find("bm123-1", After:=r, Searchdirection:=2) その取得した位置を元に並べ替えを行いたい 範囲選択をしています Range(r, rr.Offset(, 14)).Select その後並び替えを実施したいのですが Selection.Sort Key1:=Range(r.Offset(, 14)) この様にしてみましたが 実行時エラー1004が返されてしまいます どのようにすれば 並び替えができるのでしょうか よろしくお願いします

専門家に質問してみよう