EXCEL スマートにセルの値をコピペしたい

このQ&Aのポイント
  • EXCEL2003を利用しており、特定のセルの値を選んで新たに表を作成したいと考えています。ルールに従い、値を選ぶことが必要であり、手作業ではなかなかうまくいかないため、VBAを使用せずにスマートに実現したいと思っています。
  • タイトル枠を除いた範囲の表には水色、赤色、白色の3色の背景色があります。値を選ぶルールは、まず白いセルを探し、存在すればそのセルの値を、なければ青いセルの値を、それもなければ赤いセルの値を新たな表にコピーします。また、選ばれる値はできるだけ小さいものが望ましいです。
  • VBAを用いずにEXCEL2003の表上でスマートに特定のセルの値を選び、新たな表を作成する方法を教えていただきたいです。手作業では効率的でなく、VBAを使用しても解決できていないため、ひらめきを求めています。アドバイスをお願いします。
回答を見る
  • ベストアンサー

EXCEL スマートにセルの値をコピペしたい

EXCEL2003を利用しています。 写真のようにとある表があります。(範囲A2:K7セルとします) この表は、タイトル枠を除いて、水色、赤色、白色の3色の背景色があります。 この表の行から、値をひとつ選んで、新たに表を作成します。(範囲A11:K12とします) 値を選ぶルールは下記の通りです。  ・ルール1 白いセルがあれば、そのセルの値を採用する。  ・ルール2 白いセルがなければ、青いセルの値を採用する  ・ルール3 白いセルも青いセルもなければ、赤いセルの値を採用する  ・ルール4 Noは出来るだけ小さい値であること この作業を延々と手作業で行っており、VBAで行おうとするも、しっくりとしたものができませんでしたので、投稿させていただきました。 どうか、良いお知恵を授けていただきたいです。よろしくお願いいます。

  • puyopa
  • お礼率87% (459/525)

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1618/2457)
回答No.5

No3です。 画像を見ると採用したセルの色も12行目に反映させているのですね。以下のように追加してください。ほかの色も同じようにしてください。 以下は青の場合です。(画像では水色ですが、ルールでは青と書かれているのでとりあえず青としておきます。実際のRGBは先の回答で示した方法で確認してください) If Cells(j, i).Interior.Color = RGB(0, 0, 255) Then Cells(12, i).Value = Cells(j, i).Value Cells(12, i).Interior.Color = RGB(0, 0, 255) 以下のようにもできますが変更が2項目ぐらいなので上記でも面倒では無いと思います。 With Cells(12, i) .Value = Cells(j, i).Value .Interior.Color = RGB(0, 0, 255) End With

puyopa
質問者

お礼

ご親切に補足ありががとうございました。 迷いましたが、セルの色のサポートをいただけたので、ベストアンサーとさせていただきます。

その他の回答 (4)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

何度もごめんなさい。 ちゃんと質問文に >水色、赤色、白色の3色の背景色があります と記載されていましたね。 どうも失礼しました。 コード内のカラーインデックス番号を 青 5 を 8(水色)に変更してください。 ちなみに「赤」は 3 です。 ※ カラーインデックスに関しては言葉でいう「水色」でも見方によっては 「薄い青」も水色と言えるかもしれませんので 41 などが「薄い青」となります。 PCは融通が利きませんので、詳しくはカラーインデックスで検索してみてください。m(_ _)m

puyopa
質問者

お礼

ご親切に補足ありがとうございました。

  • kkkkkm
  • ベストアンサー率65% (1618/2457)
回答No.3

あまりスマートとは言えませんが Sub Example() Dim i As Integer, j As Integer Dim WhiteFG As Boolean, BlueFG As Boolean For i = Range("B2").Column To Range("K2").Column WhiteFG = False BlueFG = False For j = 3 To 7 If Cells(j, i).Interior.Color = RGB(255, 255, 255) Then Cells(12, i).Value = Cells(j, i).Value WhiteFG = True Exit For End If Next j If WhiteFG = False Then For j = 3 To 7 If Cells(j, i).Interior.Color = RGB(0, 0, 255) Then Cells(12, i).Value = Cells(j, i).Value BlueFG = True Exit For End If Next j If BlueFG = False Then For j = 3 To 7 If Cells(j, i).Interior.Color = RGB(255, 0, 0) Then Cells(12, i).Value = Cells(j, i).Value Exit For End If Next j End If End If Next End Sub RGBの値は塗りつぶしたセルの書式の色の設定で、その他の色からユーザー設定を見るとRGBそれぞれの数値が出ていますのでそれに合わせてください。

puyopa
質問者

お礼

回答ありがとうございます。 とても見やすくて、しっくりと理解できてよかったです。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

No.1です。 たびたびごめんなさい。 画像にあるルール4に関して・・・ >NOは出来るだけ小さい値であること というコトはその色の最初に出現したデータというコトですかね? 前回は同じ色でも最小の値を表示するようにしていましたので、 そうであれば全く異なったデータが表示されます。 ↓のコードに変更してみてください。 Sub Sample2() Dim j As Long, i As Long, myFlg As Boolean For j = 2 To Cells(2, Columns.Count).End(xlToLeft).Column Cells(12, j) = "" myFlg = False For i = 3 To 7 If Cells(i, j).Interior.ColorIndex = 2 Then Cells(12, j) = Cells(i, j) myFlg = True Exit For End If Next i If myFlg = False Then For i = 3 To 7 If Cells(i, j).Interior.ColorIndex = 5 Then Cells(12, j) = Cells(i, j) myFlg = True Exit For End If Next i End If If myFlg = False Then For i = 3 To 7 If Cells(i, j).Interior.ColorIndex = 3 Then Cells(12, j) = Cells(i, j) Exit For End If Next i End If Next j End Sub 。 今度はどうでしょうか?m(_ _)m

puyopa
質問者

お礼

回答ありがとうございました。 私がイメージしていた感じのものに、もっとも近くて理解しやすかったです。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! セルの色は条件付き書式での色付けではないのですね? 手作業で色付けされているという前提です。 白 → カラーインデックスの 2 青 → カラーインデックスの 5 とします。 (青が水色などの場合はカラーインデックスの番号を変更する必要があります) シートモジュールです。 ↓のコードをコピー&ペーストしてマクロを実行してみてください。 Sub Sample1() Dim j As Long, i As Long Dim myValW, myValB, myValR For j = 2 To Cells(2, Columns.Count).End(xlToLeft).Column myValW = "" myValB = "" myValR = "" For i = 3 To 7 Select Case Cells(i, j).Interior.ColorIndex Case 2 If myValW = "" Then myValW = Cells(i, j) Else myValW = WorksheetFunction.Min(myValW, Cells(i, j)) End If Case 5 If myValB = "" Then myValB = Cells(i, j) Else myValB = WorksheetFunction.Min(myValB, Cells(i, j)) End If Case Else If myValR = "" Then myValR = Cells(i, j) Else myValR = WorksheetFunction.Min(myValR, Cells(i, j)) End If End Select Next i If myValW <> "" Then Cells(12, j) = myValW ElseIf myValB <> "" Then Cells(12, j) = myValB Else Cells(12, j) = myValR End If Next j End Sub ※ もっと簡単に出来るかもしれませんが、 こんな感じではどうでしょうか?m(_ _)m

関連するQ&A

  • 他のセルの値で、背景の色を変えたい

    Excel2003を使っています。 例えば、 ・A1セルの値が"apple"に変更されたら、A2セルの背景の色が赤になる ・A1セルの値が"apple"以外に変更されたら、A2セルの背景の色が白になる ような設定は可能でしょうか? 自分自身の値により、自分の背景の色を変えるのは、条件付き書式でできるのですが、他のセルの値により変化させる方法が分かりません。 ご存じの方がいらっしゃいましたら、教えてください。

  • Excel VBAでセルの色塗りについて

    VBAの初心者です。 Excel2003であるセル範囲のセルが色Aに塗られています。 今、このセル範囲でセルの値により5つの条件でセルの色を塗り分け て、条件に合致しないものは元の色のままにしたのですが、For Each とCASEステートメントを使ったVBAプログラムを教えて下さい。

  • 【VBA】条件を満たしたセルを塗り潰し

    VBAで下記のようにしたいのですが、どのようにすれば良いでしょうか?      A 1    100 2    110 3    120 4    130 5    140 6    150 7    160 8    170 9    180 【条件】この場合、A1:A9の範囲内でB1の値を超える値が入力されているセルを黄色で塗りつぶす ※前提として、B1に150と入力されているとします 上記のようなVBAを作成したいと思っています。 この場合、塗りつぶしの対象となるセルはA7,A8,A9となります。 条件付き書式で対応できるのですが、Excel2007で作成したファイルをExcel2003で開くと条件付き書式が反映しませんでしたので、VBAで対応しようと思いました。 宜しくお願いします。

  • ACCESS VBAでEXCELのセルの値操作

    ACCESS2007のVBAでEXCEL2007のファイルを開き、 シート数を数え、3シート以降のA1セルの値をB1セルに移動するには どのようなきじゅつをすればいいでしょうか。 ご教授お願い致します。

  • エクセルでセルの自動参照をしたい

    使用するのはExcel 2010です。 Sheet1に一覧表を作り、Sheet2にてセルA1にリストでAという値を選択すると セルA2にSheet1のセルA1の数値を参照して入力するようにしたいのですが どのような方法があるかよく分からないので教えていただきたいです。 当方、初心者程度の知識しかなくVBAについての解説サイトを見ても、どのようにすればよいか 考えつきませんでした。 もし、VBAを使用しないとできないのであれば恐縮ですが「サルでも理解できるクラス」で教えていただけると助かります。 どうかよろしくお願いします。

  • EXCEL VBAで探した値を色を付ける

    EXCEL VBAで探した値を色を付ける方法が知りたいです。 シート2の値を参照してシート1の中からVBA シート2の数字を見つけて 合ったら シート1の同じ数字の背景に色をつけていく そんなVBAが作りたいのですが いい案が浮かばないのでどなたか教えていただけませんか? よろしくお願いいたします。 Sheet1 sheet2 A A 1 10 : 1 12 2 11 : 2 14 3 12 : 3 15 4 13 : 5 14 : 6 15 : 7 16 sheet1の12・14・15の所の背景を色を付けたいのですが うまくいかないのでよろしくお願いいたします

  • Excelで0と空のセルを区別したい(条件付き書式)

    Excel2000を使っています。 「条件付き書式」である値以下のセルに色をつけたいと思っています。 対象の範囲に空のセルと値が0のセルが混在しており、 0のセルには色をつけたいのですが、空のセルには 色なしにしたいのです。 「ある値」をA1に書き込んだとして、 セルの値が 次の値以下 =$A$1 でセルの色を指定していますが、そうすると空のセルにも色がついてしまいます。 空のセルを色なしにする方法を教えてください。

  • エクセルで、ある範囲のセルのうち、5以上の値で最小の値を求めたい

    エクセルで、ある範囲のセルのうち、5以上の値で最小の値を求めたいです。 1 3 2 6 9 0 4 ならば、 6が答え。 関数が無ければ、VBAで作った関数でも構いません。 また、VBAで範囲指定と条件指定が引数となる方法も知りたいです。

  • エクセルVBAで設定したセルの値

    エクセルVBAについての質問です。 例えば、A1とB1のセルの値を参照している数式がC1セルに設定してあるとします。 さらに、D1のセルにはC1の値を参照している数式が設定してあるとします。 VBAでA1、B1のセルの値を変更したとします。 次のステップのVBAでC1、D1のセルを参照すれば、A1、B1の変更が反映された後の正しい値である C1、D1の値が取得できるのでしょうか? できて当たり前だと思うのですが、セルに設定してある数式が大変複雑であったりすると、ちゃんとA1、B1の変更が反映された正しいC1、D1セルの値がVBAで取得できるのかちょっと不安です。 ばかな質問かもしれませんが、回答をよろしくお願い致します。

  • Excel2007で行番号を指定してセル範囲を

    Excel2007で行番号を指定してセル範囲を抜き出したいです。 sheet2のF8に行番号を入れてsheet3のセル範囲(C:T)の値とセル範囲(AB:AS)の値を取り出して sheet2の(A2:AQ2)に入れます。目で分かりやすい様に背景色か色線で4等分したいです。 よろしくお願いいたします。

専門家に質問してみよう