Excel VBA 指定色セルを値化(全シート対象)

このQ&Aのポイント
  • Excel2010を使用して、VBA(マクロ)を用いて特定の色のセルを値化する方法について教えてください。
  • 指定色のセル位置がまちまちであり、多数存在するため、自動化できる方法を探しています。
  • 他の色のセルには式が入っており、それらは崩したくないため、個別に値化する必要があります。
回答を見る
  • ベストアンサー

エクセル VBA 指定色セルを値化(全シート対象)

エクセル2010を使用しています。 VBA(マクロ)で以下の作業を実行したいと考えていますが、 初心者につき、ご教示いただけますでしょうか。 Book内の全Sheetを対象として、 特定の色(RPG:180,198,231)のセルを全て値化したいです。 他色のセルにも式が入っているのですが、それ等は崩したくないので 個々に値化してゆくしかないのですが、 指定色(RPG:180,198,231)のセル位置がまちまちな上に多数あり、 その上シートもかなりな数あるため、自動化できたらと考えています。 ※値化するセルに入っている式は、簡単なリンク式です。 尚、必要の無い(表外)セルは無色で設定してあります。 また、その表のフチ(?)を「#」で囲っているため、 これをKyeに「次の行へ移動」や「次のSheetへ移動」等が設定できるでしょうか? 1つづつのコードは、検索すれば(参考にできるものが)出てくるものもありますが、 それらを どう組み合わせればうまく作動するのか または、処理条件を どう設定すれば良いのかが、よくわかっていません。 知識不足で申し訳ありません! ご指導いただけますと幸いです。 よろしくお願いします!!

noname#228034
noname#228034

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

  • ベストアンサー
  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.1

こんにちは Sub test()   Dim s As Worksheet   Dim t As Range   Dim r As Range   For Each s In Worksheets     On Error Resume Next     Set t = s.UsedRange.SpecialCells(xlCellTypeFormulas, 23)     On Error GoTo 0     If Not t Is Nothing Then       For Each r In t         If r.Interior.Color = RGB(180, 198, 231) Then           r = r.Value         End If       Next     End If   Next End Su こんな、感じでしょうか?

noname#228034
質問者

お礼

とてもとても助かりました。 ありがとうございました!!!

その他の回答 (1)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 「値化」とは、もしかしますと関数によってセルに入っている現在の値を、関数によらずに直接セルに入力するという事なのでしょうか?(コピーしたセルと同じセルに対して、値のみを張り付けたのと同じ結果)  もしそれで宜しければ下記の様なVBAとなります。  尚、2枚目以降のシートの中に「関数が入力されているセルが一切ないシート」があった場合、その前のシートを処理する際に Set SearchRange = ws.Cells.SpecialCells(xlCellTypeFormulas, _ xlTextValues + xlNumbers + xlLogical + xlErrors) の所でSearchRangeの中に格納されたセル範囲が残っていますと、SearchRangeの中身がNothingではないため、wsに格納されているシートには関数が入っているセルが存在していないのにもかかわらず、 Not SearchRange Is Nothing の判定結果がTRUEとなってしまい、既に値化済みとなっている前のシートのセル範囲に対して、再度、値化の処理を繰り返すという無駄な処理を行う事になりますので、それを防ぐために、 Next ws の直前に Set SearchRange = Nothing という処理を行う事で、SearchRangeの中身をリセットする様になっております。 Sub QNo9242547_エクセル_VBA_指定色セルを値化_全シート対象() Dim ws As Worksheet, c As Range, SearchRange As Range, SearchColor As Long SearchColor = RGB(180, 198, 231) With Application .ScreenUpdating = False .Calculation = xlManual End With For Each ws In Sheets On Error Resume Next Set SearchRange = ws.Cells.SpecialCells(xlCellTypeFormulas, _ xlTextValues + xlNumbers + xlLogical + xlErrors) On Error GoTo 0 If Not SearchRange Is Nothing Then For Each c In SearchRange If c.Interior.Color = SearchColor Then c.Value = c.Value Next c End If Set SearchRange = Nothing Next ws With Application .Calculation = xlAutomatic .ScreenUpdating = True End With End Sub

noname#228034
質問者

お礼

遅くなりましたが、ご教示ありがとうございます!参考になりました!今後に役立てたいと思います!

関連するQ&A

  • エクセルVBAで指定したセルへジャンプするコード

    こんにちは。ファイル内の各シートのセルに順にジャンプするVBAのコードを教えていただけないでしょうか。以下のような条件や構成にしたいと考えています。 ・「操作ブック」と名づけたファイルに「設定」シートをつくり次のようにする A列B列の2行目以下に「シート名」「セル番地」を入力し、ジャンプするセルを入力 (例) A B←うまく表になりませんがB列がセル番地です Sheet1 E9 Sheet1 U7 Sheet2 S2 ・ジャンプする先は「操作ブック」内ではなく、開いている“もうひとつのブック内”の各シート ・ジャンプして選択したセルに一時的に色をつけ、次に進む時は色を元に戻す(難しいのであれば結構ですが、できればすごくうれしいです) ・「設定」シートに入力した上から下に順にジャンプする。ジャンプする前にメッセージで、「次に進みますか?」と聞き、「はい」で次のセルにジャンプする という設定にしたいのですが、マクロでジャンプの記録をとってみましたが、私にはとてもできない記述なので、教えていただきたく参りました。 よろしくお願いします。

  • エクセル セルの色について

    エクセルについて教えてください。 セルに塗りつぶしで色をつける。 そのセルを移動すると色も移動してしまいます。 シート内に設定した各セルの色を固定にする方法を 教えてください。 他の人が作った表が 1行ごとにカラー、無色と交互になっていて  データを上下に移動しても 全体の配色は変わらないように なっていてこれはいいなと思ったのですが やり方がわかりません。 よろしくお願いします。

  • 列の値と一致するシートを選び、指定セルをコピぺする

    マクロの勉強をしている初心者です。   タイトルにありますように、あらかじめ列に入力する値と一致するシートを検索し、そのシートの中の所定の場所にあるセルの値をひろう、というマクロをつくりたいのですがご教示頂けないでしょうか。 わかりづらいので例を画像を添付します。 (手書きですみません。) まず、左のbookと右のbookは別であり、右は読み込み用で、左bookに入力をしていくものです。 左bookの売上げ(赤塗)、目標(青塗)という部分に、右bookのというセルの場所の値をコピペすることを希望です。 毎回人の入れ替わりが頻繁にあるため、Aと同じ値のシートを選ばせるというところからプログラムさせたいです。左bookは上から田中、山下、と並んでいますが、その都度何行目に誰がくるかはかわります。 右bookのコピーしたいセルの場所(B列6行目、C列6行目)はどのシートも変わりません。 恐れ入りますがご教示の程宜しくお願いします。

  • エクセルでセルの値が0になってしまいます

    エクセル2010を97互換モードで使っていますが以下の状況が起こっており原因がわかりません。 シート1のセルの式:='見積書(一般)'!E35:G35 その値:107,700 シート2のセルの式:='見積書(一般)'!E35:G35 その値:0 つまり、見積書(一般)というシートの同じセルの値をシート1、シート2に引いてくるだけなのにシート2の方はなぜか0になってしまうのです。どちらも表示形式は通貨です。 試しに見積書(一般)の別のセルに値を入れ、そのセルを参照させるとシート2でも正常に値が表示されます。 参照元(見積書(一般))のセルは連結されています。 原因と解決方法を教えてください。

  • EXCEL シートの値を求める

    こんにちは。こちらではいつもお世話になっています。 以下のような場合、どのような方法があるのかを教えてください。 ========================== ・1つのブックに複数毎のシート(例:シートA・シートB・シートC)があります。 ・それらシートの同じ箇所のセルの値(例:A1)を別シート(例:シートD)のA1から下に順番に入れたいと思っています。 ・シート枚数が増えても対応できるような方法であれば助かります。 【シートD】   A                  B 1 シートAのA1のセルの値 2 シートBのA1のセルの値 3 シートCのA1のセルの値 ========================== 説明が不十分であれば、申し訳ございません。 宜しくお願いします。

  • VBA  セルの色づけ

    Excel知識が乏しく、質問させていただきます。 まったくの初心者です… セルのA5~A30までの セルごとにそれぞれ色をつけます。 色は、無色または赤です。 セルA5に赤色をつけたときには、同一シート内のセルC10からC13とD10からD12までセルA5と同じ色になるように。 A5が、無色のときには上記同一セルも無色にするようなイメージです。 同様にA6が赤色の時に、E3~E7、F3~F6に赤色がつく。 そんな設定ができるようにするマクロが必要です。 日々変わる色設定を手作業で行うのが困難になってきました…。 方法についで教えていただきたいです。

  • 【エクセルVBA】特定のセルに色をつける

    ・やりたいこと ブック1,sheet3で色のついたセルを、ブック2の対応するセルに反映させるというものです。 ブック1 【図左上】sheet1 前年のデータ 【図右上】sheet2 今年のデータ 【図左下】sheet3 sheet1と2で差分のあったセルに色が付いている(セルには差分判断するための計算式有) ブック2 【図右下】 ブック1のsheet3と色が対応するようにしたい。sheet3で色の付いているセル(差分のあったセル) をブック2の対応するセルにも反映させる。 sheetの数は20~30ほど。フォーマットは同じで、データはそれぞれのシートで異なる。 マクロを組むかと思うのですが、どなたかよろしくお願いします。

  • Excel VBAでの質問です。アクティブになっているシート上では書けたのですが・・・

    例えば、sheet1、sheet2、sheet3があって、今sheet1がアクティブになっています。sheet1がアクティブの状態でsheet2のセル(3,2)からセル(3,12)の間に上から順に値を入力していきます。値はForm1のTextbox1の値です。 しかしながら、sheet2のセル(3,2)からセル(3,10)の間には、何らかの値がすでに入っている場合があります。 このような場合は、空白のセルの中で一番上のセルに値を返したい場合、どのように記述すればよいでしょうか? sheetをアクティブ状態になっていれば書けたのですが、アクティブでないsheetに、アクティブ状態にしないで上のようなプログラムを書くのがなかなかできません。 お手数かけますが、よろしくお願いします。

  • EXCEL セル値のシートにリンクを付ける

    同じブック内の別シートのセルにハイパーリンクを設置したいのですが、 シートの選択を、セルの値に設定する事は出来ないでしょうか。 シート1: A列:シート名       B列:各シートへのハイパーリンクを付けたいセル B1セルに、A1セルのシート名シートのA1セルへのリンク B2セルに、A2セルのシート名シートのA1セルへのリンク を付けたいのです。 シート名はたびたび変更をするため、 A列のシート名を変更すると、各シート名も変更になるように設定しています。 よろしくお願いいたします。

  • Excel VBA 値取得について

    お世話になります。 どなたかお力をお貸しください。 Excel2003 VBAでプログラムを組んでおり、エクセルのシートをデータベース代わりに利用しています。 複数のブック散乱している10万個近くのテキストボックスの値を、 「A」というブックの「シート1」のセルに格納して行きたいと思っております。 値の格納方法としては、「A」ブックの「シート1」の セルA1からA2、A3…A列最終行(6万強)まで縦の並びにデータを格納していきます。 ただし、「シート1」に格納したい値は10万個近くあるので、 A列だけでは足りなくなります。 A列の最終行まで値を格納し終えたら、自動的にB列に移動して、 セルB1からB2、B3…B列最終行(6万強)という遷移させていきたいのです。 A列のみに格納していくのであれば、理解できるのですが、 自動遷移がわかりません。 For i = 0 To 最終行(6万強) シート1.Range("A" & i) = 参照元 Next i よろしくお願いします。