Excel VBA(列全体のセルの処理)の質問です。

このQ&Aのポイント
  • Excel VBAを使用して、一つの列の全セルに対して処理を行いたいです。
  • セルが文字列の場合は何もせずに次の行に進み、数字の場合は数字の大きさに応じて背景色を変えたいです。
  • 行の選択は「Columns("C:C").Select」として、背景色の指定は条件分岐を使用して実装する予定です。
回答を見る
  • ベストアンサー

Excel VBA(列全体のセルの処理)の質問です。

Excel VBA(列全体のセルの処理)の質問です。 初心者です。 やりたいことは、一つの列(C列とします)の各セルに整数もしくは同一文字列がセットされています。行数は不定ですが、全行に渡って処理したい。 処理はセルが文字列なら何もしないで、次の行に移る。 数字なら、数字の大きさに従って背景色を変える(0,1-10,11-20とか)。 セルの書式は 標準 になっています。 行の選択は => Columns("C:C").Select 背景色指定はこんな感じかと思っています。 Dim delay As Long if delay = 0 Then ColorIndex = 10 Pattern = xlSolid ElseIf delay ... Then : Else : End If 列全体に渡って実行する方法、各セル値を取り出してやる方法がわかりません。 宜しく、お願いします。

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

  • ベストアンサー
回答No.3

Excel には「マクロの記録」という便利な機能もあります。 それを使ってできたコードを十分ながめることは結構いい勉強になります。 また、Excel VBA の書籍も一冊購入すべきでしょう。 やはり一から基礎を勉強することが必要です。 急がば回れです。 あと、Excel には「インテリセンス」という機能があります。 そこで出てこないコードをいくら書いても動くはずがありません。 インテリセンスの候補として出てこないならば、それはすでに 間違ったコードです。 インテリセンスが機能するようにコーディングするには 「ActiveSheet」などという表現を避けることです。 Dim ws As Worksheet Set ws = Worksheets(1) ws. のようにしていけば、ピリオドを打った瞬間にインテリセンスが働いて 入力候補が出てきます。 ということは、入力候補にならないようなコードはダメだということです。

その他の回答 (2)

回答No.2

こんばんは。 でたらめなコードを書いて「やりたいことは次のコードのようです。」 と言われてもさっぱりわからないので、動かないコードを見せられるよりも やりたいことを日本語で説明してもらった方がこちらはわかりやすいです。 「整数もしくは同一文字列がセットされています」も非常に分かりにくいですね。 特に「同一文字列がセットされています」とはいったいどういうことですか? できればExcelのシートを画像として貼りつけるとかしてください。

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

>ColorIndex = 10 (オブジェクト).(プロパティ)=定数 (オブジェクト).(メソッド) 引数 などのオブジェクトの考えが判っていないようだ。 >Columns("C:C").Select ではデータのない多数の行も無駄な処理をしてしまう。 まだVBAの課題をやるには早すぎると思う。 例題集などを本で見習うべき段階と思う。 ーー また質問の件は、質問者が気づいていないだろう、色々なVBAの必要な知識が必要だ。 質問の件は色々な方法があるが、 Sub test02() Dim cl As Range d = Range("C65536").End(xlUp).Row MsgBox d For Each cl In Range("c2:C" & d) If IsNumeric(cl) Then If cl > 10 Then cl.Interior.ColorIndex = 3 MsgBox cl End If Next End Sub はわざと10を超える、だけの区画にしている。 上記のコードの意味を理解し、2区間、3区間にふやすコードを勉強してください。

関連するQ&A

  • エクセル2003 VBAマクロにて 背景色 白色の抽出

    エクセル2003のマクロでセル背景色にて抽出したいのですが 背景色が白色(空白)の抽出ができません。 背景色別に 他セルに文字を自動記入したいのですが、 背景色が白(collorindex=0)の認識をしてくれません。 カラーインデックスでは、白は「0」か「2」になっているので その値でマクロを組んでも認識してくれないようです。 どのようにすればよいのでしょうか? 以下に私(素人)のマクロ文(一部)です。ご指摘お願い致します。 Dim 行番号 As Integer 行番号 = 7 Do Until Cells(行番号, 1).Value = "" If Cells(行番号, 9).Interior.ColorIndex = 5 Then Cells(行番号, 14).Value = "3号機"   ElseIf Cells(行番号, 9).Interior.ColorIndex = 7 Then Cells(行番号, 14).Value = "4号機" ElseIf Cells(行番号, 9).Interior.ColorIndex = 0 Then Cells(行番号, 14).Value = "未加工" End If 行番号 = 行番号 + 1 Loop

  • ある処理を列全体でループ処理させたい(Excel)

    あるExcelファイルで隠し文字みたいなものが、セルの最後に 含まれているファイルがあるのですが、その状態のセルがある 場合、認識可能な文字に置換させたいです。 例えば、列A行2のセルの最後にある隠し文字(Ascw143)が あった場合、@に置換させるには、下のようにすれば対応可能 ですが、これをA列全体に適用させる場合、どのようにループ 処理を組めばよいか教えてください。 Sub test() If AscW(Right(Range("A2"), 1)) = 143 Then Range("A2") = Range("A2") & "@" End If End Sub なお、Excelですが、2010を使用しています。

  • エクセルVBAについて

    エクセルVBAについて 下記のようなマクロで、選択したセルの、列の背景色の切り替えを行いたいと思っています。 が、写真のように、塗りつぶしを行いたいセルが結合しているところと、 そうでないところがあり、列全体に、うまく塗りつぶしができません。 '列の背景色を変更 Cells.Interior.ColorIndex = xlNone Dim i As Long i = Target.Column Columns(i).Interior.ColorIndex = 6   Columns(i + 1).Interior.ColorIndex = 6 また、選択するセルは、2行目で、2列が結合しています。 うまく、2列が結合しているセルにも、塗りつぶしを適用することは可能でしょうか? また、できれば列全体の塗りつぶしでなく、行の範囲も指定できればと思っています。 写真では、2列が結合していない部分のみ、塗りつぶしが適用されています。 表の構成上、結合しているセルとそうでないセルの変更ができないため、困っています。 どうぞ、よろしくお願いいたします。

  • IF VBA 1つの条件で複数の処理

    IF関数で、1つの条件(セルに特定の文字があったら) セルA1=B1+C1 セルB1=D1+E1 のように2つの処理を行ないたい場合、どんな構文を作成 したらいいでしょうか。 IF~Then ElseIf~Then End If というのが基本構文ですが、条件が複数あるのではなく 条件1つで処理は2つというのが分かりません。

  • エクセルVBAについて

    エクセルVBA初心者で、勉強中の者です。 添付画像のような時間のグラフのようなものを作りたいと思っています。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Sub 時間グラフ作成() If Worksheets("(1)(1)(1)(1)(1)").Range("F2").Value = CDate("9:05") Then Worksheets("(2)(2)(2)(2)").Range("I2").Select  With Selection.Interior   .ColorIndex = 8   .Pattern = xlSolid  End With Elseif Worksheets("(1)(1)(1)(1)(1)").Range("F2").Value = CDate("9:10") Then Worksheets("(2)(2)(2)(2)").Range("J2").Select  With Selection.Interior   .ColorIndex = 8   .Pattern = xlSolid  End With  ・  ・   ・ End If End Sub 'それから、終了の時間を入れて、開始から終了までの間を塗りつぶす。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 以上のように作成しようと考えていましたが、いざやろうとすると 1行に対してあまりにも膨大な記述をしなくてはならないことに 気がつきました(一月分ともなると恐ろしいです・・・)・・・。 もっと効率的な方法はあるものでしょうか? よろしくお願いいたします。

  • エクセルマクロ セルの色つけ

    エクセルのマクロです。 条件で複数セルに色をつけたいのですが以下の方法しかないですか。 もっと多くのセルに一度に色を付ける良い方法がありましたら教えて下さい。 If days = "日" Then With Cells(i, 2).Interior .ColorIndex = 3 .Pattern = xlSolid End With With Cells(i, 13).Interior .ColorIndex = 3 .Pattern = xlSolid End With End If 以上 お願いします。

  • あるセル列内に任意の文字列があった場合の自動処理

    VBAを利用して、あるセル列内にある文字列があった場合に その文字列が存在した行のAセルからCセルまで自動的に 背景色をグレーにしてくれるような動きをしたいです。 簡単に言うと、「作業完了」の文字列があったらその行をグレーするイメージです。 参考例として、セルC列に対してその列内のあるCセル列に 文字列"@"が入力された場合、その行のA行からC行まで 自動的に背景色を変更したいです。 また、"@"が入力されていない場合は、元の背景色に戻るようにしたいです。 ■ 例1:C2に"@"が入力されるパターン 【入力前】  | A | B | C | -+---+---+---+- 1|   |   |   | -+---+---+---+- 2|   |   |   | ← 当然何も変化なし -+---+---+---+- 3|   |   |   | -+---+---+---+- 【入力後】  | A | B | C | -+---+---+---+- 1|   |   |   | -+---+---+---+- 2|////|////|/@/| ← ← C2に"@"が入力されるとA2~C2までの背景色をグレーに変更。 -+---+---+---+- 3|   |   |   | -+---+---+---+- 【削除】  | A | B | C | -+---+---+---+- 1|   |   |   | -+---+---+---+- 2|   |   |   | ← C2の"@"を消すと入力前に戻る。(元通り) -+---+---+---+- 3|   |   |   | -+---+---+---+- 任意の文字列をきっかけに自動実行するようには出来たのですが それから先がさっぱりで困っています、、、。 よろしくお願いします。

  • VBAでの背景色分岐後の結合セルの処理について

    VBAで対象範囲の背景色が黒の部分のみ"-"をいれるという処理をしたいのですが、ループがうまく動いておらず最初のセルのみ"-"が入った状態です。 ※対象範囲のセルは3列ずつ結合されています コードは以下になります。VBA初心者のため、初歩的な質問かもしれませんがご回答よろしくお願いいたします。 Private Sub CommandButton1_Click() Dim C As Range Sheets("sheet1").Select T33:BA74 の範囲を1セルずつ繰り返す For Each C In Range("T33:BA74") セルが黒のとき If C.Interior.ColorIndex = 1 Then C.Value = "-" end If '次のセルへ Next End Sub

  • VBAでの計算後のセルに2重線で囲む

    まだPC・VBA不慣れな為、実行できないので、教えてください。 c16セルに休日を入力すると無理つぶしは成功しましたが、c16セルに祭日を入力すると赤の2重線で囲みたいのですが、できませんので、方法をお願いします。 もう1点がCELLS・RANGEを使った2種類の方法をお願いします。 よろしくお願いします。 Sub 練習44() Dim kyuyo As Currency If Range("c16").Value = "祭日" Then Worksheets("練習1If~Then").Cells(16, 3).xlDouble.ColorIndex = 3 ElseIf Range("c16").Value = "休日" Then Worksheets("練習1If~Then").Cells(16, 3).Interior.ColorIndex = 5 Else Worksheets("練習1If~Then").Cells(16, 3).Interior.ColorIndex = 10 End If End Sub

  • VBA セルの値13が数値だったり文字列だったり

    セルに入った「13」が数値の場合でも文字列の場合でも処理出来る方法はありませんか? 例えば If Range("A1").Value=13 Then 処理 Endif セルの値が文字列"13"の場合、同じと認識してくれません。 いい方法はないでしょうか?

専門家に質問してみよう