Excelマクロで線の色を指定する方法

このQ&Aのポイント
  • Excelマクロで線の色を指定する方法について困っています。Vlookup関数を使用して列Bの色を指定する設定にしていますが、赤色の設定方法が分かりません。マクロの初心者なので、他に必要な情報も分かりません。具体的な設定方法など、教えていただけると助かります。
  • Excelマクロで線の色を設定したいと思っていますが、上手くいかず困っています。マクロを使用してシート2に線を追加し、その線の色をシート1のセルF2の色と同じにしたいです。具体的には、Vlookup関数を使用して列Bの値に対応するセルの色を指定したいです。マクロの初心者なので、他に必要な情報も分かりません。設定方法など、教えていただけると助かります。
  • Excelマクロで線の色を設定する方法について困っています。Vlookup関数を使用して列Bのセルに対応する色を指定する設定にしていますが、赤色を指定する方法が分かりません。マクロを使用してシート2に線を追加し、その線の色をシート1のセルF2の背景色と同じにしたいです。マクロの初心者で、他に必要な情報も分かりません。具体的な設定方法など、教えていただけると嬉しいです。
回答を見る
  • ベストアンサー

EXCEL マクロの指定の仕方

マクロで線の色を指定したいのですが、上手くいかず困っています .ForeColor.RGB = Worksheets("sheet1").Range("F2").Interior.ColorIndex 赤色を指定したいのですがBにどういうコードを入れれば良いですか? FはVlookupで列Bより色を指定するようにしています。 マクロは始めたばかりで良く分からないので、他に必要な情報もわかりません 必要な情報なども併せて教えてください。 よろしくお願いします。 Dim rngStart As Range Dim rngEnd As Range Dim BX As Single, BY As Single, EX As Single, EY As Single Set rngStart = Worksheets("sheet2").Cells.Find(What:=Worksheets("sheet1").Range("D2"), LookIn:=xlValues, LookAt:=xlWhole) Set rngEnd = Worksheets("sheet2").Cells.Find(What:=Worksheets("sheet1").Range("E2"), LookIn:=xlValues, LookAt:=xlWhole) BX = rngStart.Left BY = rngStart.Top EX = rngEnd.Left + rngEnd.Width EY = rngEnd.Top With Worksheets("sheet2").Shapes.AddLine(BX, BY + 10, EX, EY + 10).line .ForeColor.RGB = Worksheets("sheet1").Range("F2").Interior.ColorIndex .Weight = 3 .EndArrowheadStyle = msoArrowheadTriangle End With

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

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

こんにちは。 マクロを教わるのは、 翻訳や清書を頼むようなものですから、 <どんなことを書き表したいのか> <何をしたいのか> という、 自分しか知らないことを十分に伝えること をもっと意識するようにしてください。 画像を添付するにしても、 直接目にしたことのない者にとって、 どこまで読み取れるだろう、という想像力を持って、 見やすい画像にすることも大事ですね。  デジタルライフ > Windows > その他(Windows) > 『EXCEL マクロの指定の仕方』  http://okwave.jp/qa/q9181693.html あちら↑の説明も読んでみて、類推した内容でお応えします。 ひとまずは、 [実行マクロ単一セル用]の行指定を書き換えるなどして、 試してみて下さい。 試した結果が、お望みと違うようでしたら、  何が伝わっていなくて、何が誤解されているのか、  想像した上で説明を尽くすようにするか、  求める結果と実行結果の相違を明らかにするなど、 補足してみて下さい。 [実行マクロ複数セル用forループ版]の方は、 応用的な使用例、ということになります。 設問への理解が至っていませんから、 こちらからは、特に説明を加えません。 まず、そちらで確認してみた上で、 解らない部分についてご質問あれば、またお応えします。 ' ' // Sub 実行マクロ単一セル用()   LetLineColor 行:=2 End Sub ' ' // Sub 実行マクロ複数セル用forループ版() Dim i As Long   For i = 2 To Sheets("Sheet1").Cells(Rows.Count, "D").End(xlUp).Row     LetLineColor 行:=i   Next i End Sub ' ' // Sub LetLineColor(行 As Long) Dim wks1 As Worksheet Dim rngStart As Range Dim rngEnd As Range Dim TargetValueS, TargetValueE, nColor As Long Dim BX As Single, BY As Single, EX As Single, EY As Single   With Sheets("Sheet1")     TargetValueS = .Cells(行, "D")     TargetValueE = .Cells(行, "E")     If TargetValueS = "" Or TargetValueE = "" Then Debug.Print 行; "行", "EmptyParam!!": Exit Sub          If IsError(.Cells(行, "F")) Then Debug.Print 行; "行", "Color'sError": Exit Sub     nColor = -1     Select Case UCase(.Cells(行, "F")) ' 大文字に直してから判別     Case "RED": nColor = RGB(255, 0, 0)     Case "GREEN": nColor = RGB(0, 255, 0)     Case "BLUE": nColor = RGB(0, 0, 255) ' 以下、適宜追加可     End Select     If nColor = -1 Then Debug.Print 行; "行", "Color??": Exit Sub   End With   With Sheets("Sheet2")     Set rngStart = .Cells.Find( _           What:=TargetValueS, _           LookIn:=xlValues, LookAt:=xlWhole, _           SearchOrder:=xlByRows, SearchDirection:=xlNext, _           MatchCase:=False, MatchByte:=False)     If rngStart Is Nothing Then Debug.Print 行; "行", "NotFound!! ""Start"":" & TargetValueS: Exit Sub     Set rngEnd = .Cells.Find( _           What:=TargetValueE, _           LookIn:=xlValues, LookAt:=xlWhole, _           SearchOrder:=xlByRows, SearchDirection:=xlNext, _           MatchCase:=False, MatchByte:=False)     If rngEnd Is Nothing Then Debug.Print "NotFound!! ""End"":" & TargetValueE: Exit Sub     BX = rngStart.Left + 10     BY = rngStart.Top     EX = rngEnd.Left + rngEnd.Width     EY = rngEnd.Top + 10     With .Shapes.AddLine(BX, BY, EX, EY).Line       .ForeColor.RGB = nColor       .Weight = 3       .EndArrowheadStyle = msoArrowheadTriangle     End With   End With End Sub ' ' //

butabutabutako
質問者

お礼

色々ご丁寧にありがとうございます。 上手くいかなかったのですが、この質問で続けても伝えられないと 思いますので、改めて問題が伝わる形で質問させていただきます。 ご指摘ありがとうございました

その他の回答 (1)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

>.ForeColor.RGB = Worksheets("sheet1").Range("F2").Interior.ColorIndex >赤色を指定したいのですがBにどういうコードを入れれば良いですか? .ForeColor.RGB = RGB(255, 0, 0)

butabutabutako
質問者

補足

色は直接マクロ内で指定するのではなくてB2セルに 入力した値をもって色指定としたいのです。 というのも、繰り返し処理を行うけど、色は変えるというのが 目的なので。 言葉が足りなくて申し訳ないですが、よろしくお願いします

関連するQ&A

  • VBAでセルにポイント指定で斜線が引けませんか

    excel vbaでセル幅、高さを小さくした画面のその上に指定したところから指定したところに別に用意した複数の数値により自動で複数の斜線を引きたいのですが,下記の参考コードを見つけ検討しましたが、目的の結果が得られません、どなたか方法を教えて頂けませんか、 参考コードでは、下段のコード部分で、セルの縦幅(側辺)をポイント指定でセルの任意の位置から位置に引けますが上段部分のコードでは、セルの始端、終端の位置のみに対応できてセルの横辺(セルの横幅)についてのポイント指定ができません。 下段のコードのポイント指定は    For cnt = 20 to 30 等で複数指定しますと自由に複数の横線を引くことができます。 質問 1・ セルの横幅(横方向)にはポイントという位置付はないのでしょうか。もしあるとしたらどの様に 指定するのでしょうか。また1セルのポイントはいくつでしょうか。 2・ セルの始端、終端の位置を利用する場合、range("c10"),range("g10")の内容を自動で、変える 方法はありませんか。 ------------------------------ 参考としたコード Dim rngstart As Range, rngend As Range Dim BX As Single, BY As Single, EX As Single, EY As Single 'shape を配置するための基準となるセル Set rngstart = Range("c10") Set rngend = Range("g10") 'セルのleft,top,widthプロパティを利用して位置決め BX = rngstart.Left BY = rngstart.Top EX = rngend.Left + rngend.Width EY = rngend.Top '直線 ActiveSheet.Shapes.AddLine BX, BY, EX, EY With ActiveSheet.Shapes.AddLine(BX, BY + 10, EX, EY + 10).Line .ForeColor.RGB = vbRed .Weight = 0.8 .EndArrowheadStyle = msoArrowheadTriangle End With End Sub  以上。です。 よろしくお願いいたします。

  • VBA 繰り返し処理について教えてください

    VBA初心者です。    A    B       C    D 1  2  項目 品名       数量   単位 3     内訳(別紙明細) 1     式 4     ブレーカ      1     ヶ 5     消耗品       1     式   6             7 8           小計 上記(見積書)のような表があり、『小計』の文字を検索して 行を挿入したり、斜め線を引くという内容をVBAでやりたいと思います。 以下が記述です。 ************************************************************* Sub 斜め線描画() Dim MyLine As Shape Dim rngStart As Range, rngEnd As Range Dim BX As Double, BY As Double, EX As Double, EY As Double Set c = Cells.Find(What:="小計", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart) If Not c Is Nothing Then firstAddress = c.Address Set rngStart = c.Offset(1, -1) Set rngEnd = c.Offset(-2, 0) BX = rngStart.Left BY = rngStart.Top EX = rngEnd.Left + rngEnd.Width EY = rngEnd.Top c.Offset(-2, 0).Select Selection.EntireRow.Insert ActiveCell.EntireRow.Select Selection.RowHeight = 2 c.Offset(1, 0).Select Selection.EntireRow.Insert ActiveCell.EntireRow.Select Selection.RowHeight = 2 Set MyLine = Sheet4.Shapes.AddLine(BX, BY, EX, EY) BX = BX + 151.5 BY = BY - 27 EX = EX - 152.25 EY = EY + 26.25 Set MyLine = Sheet4.Shapes.AddLine(BX, BY, EX, EY) End If End Sub **************************************************************** 『小計』の個数は決まっておらず、1個の場合もあれば10個の場合もあります。 『小計』があるだけ上記の処理を繰り返すようにしたいのですが、繰り返しの処理がうまくいかず、無限ループにはまってしまい困っています。 自分なりに考えたのは『小計』の文字はB列にあるので、B列に入力されている最後のセルまで検索したら処理を終了する。なのですが、どう記述していいのかわかりません。 文章がわかりにくいかもしれませんが、どうかご教授願います!

  • どなたかマクロ修正お願いします。

    自分なりに 作成してみましたがどうもうまくいきません。 Sub 変換() Dim Sh1 As Worksheet, Sh2 As Worksheet, Sh3 As Worksheet, Dim r As Range Set Sh1 = Worksheets("1") Set Sh2 = Worksheets("2") Set Sh3 = Worksheets("3") Sh3.Select Set c = Cells.Find(What:="9876543", LookAt:=xlWhole) c.Offset(, 1).Activate ActiveCell.Replace What:="中田", Replacement:="中田英寿" End Sub このように作成しましたがうまくいきません。恐らくsheet3のデータはsheet1から( =1!A100 )といったように値を他のsheetから持ってきてるからではないんでしょうか?

  • エクセル VBA

    Dim h As Range If Application.CountIf(Range("p:p"), 5) = 0 Then Exit Sub Set h = Range("p:p").Find(what:=5, LookIn:=xlValues, lookat:=xlWhole, searchdirection:=xlPrevious) Range(Range("p2"), h).EntireRow.Delete Shift:=xlShiftUp 上記のマクロは、「2行目から、P列の数値が5の最下の行までを削除する」という内容です。 この5の部分を、<0(0未満)に変えたいのですがわかりません。 どうぞ教えてください。

  • Excel VBAでの図形削除について質問です。

    Excel VBAでの図形削除について質問です。 ボタンをクリックすると、ラインを使って、直角三角形を作成できる様にしました。 その際に、画像を全て削除してから作成する様にしました。 しかし、コマンドボタンまで消えてしまい困っています。 Dim MyLine As Shape Dim rngStart As Range, rngEnd As Range Dim BX As Double, BY As Double, EX As Double, EY As Double Dim dellShape As Object Set dellShape = ActiveSheet dellShape.Shapes.SelectAll 'すべての図形を選択する Selection.Delete '現在選択されているオブジェクトを削除する 'Shapeを配置するための基準となるセル Set rngStart = Range("C30") Set rngEnd = Range("J11") 'セルのLeft、Top、Widthプロパティーを利用して位置決め BX = rngStart.Left BY = rngStart.Top EX = BX + 300 EY = BY + 0 'Shapeの描画 Set MyLine = ActiveSheet.Shapes.AddLine(BX, BY, EX, EY) '横幅 Set MyLine = ActiveSheet.Shapes.AddLine(EX, EY, EX, 200) '高さ Set MyLine = ActiveSheet.Shapes.AddLine(BX, BY, EX, 200) '斜辺 これで?削除?作図と出来るのですが、作図された図形をDeleteキーで手動で削除した後に、 もう一度コマンドボタンをクリックすると、コマンドボタンまで削除されてしまいます。 通常ではコマンドボタンは削除されないので、原因が解りません。 同じ経験をされた方や、ExcelVBAに詳しい方、アドバイスよろしくお願いいたします。

  • エクセルのマクロ

    下記のマクロを実行するといつも.Findのところでフリーズしてしまいます。 同じ方法で違うBookからの取込には不具合はないのですが、何故だかわかりません。 ちょっと長くなりますが、どなたか教えてください。 'Function fn_KAKUNIN_Update(strSheetName As String, strInBookName As String) '変数宣言 Dim wksInSheet As Worksheet '入力シート Dim wkbInBook As Workbook '入力ブック Dim wksUpSheet As Worksheet '更新するシート Dim lngKAKUNIN_MaxRow As Long Dim lngSYACHO_MaxRow As Long Dim intMsg As Integer Dim strGenbaNo As String Dim i As Long Dim j As Long Dim rngFind As Range Dim lngStrNo As Long Set wkbInBook = Workbooks(strInBookName) Set wksInSheet = wkbInBook.Worksheets Set wksUpSheet = Workbooks(pstrBookName).Worksheets(strSheetName) fn_KAKUNIN_Update = 1 lngKAKUNIN_MaxRow = wksInSheet.Range("C4").CurrentRegion.Rows.Count lngSYACHO_MaxRow = wksUpSheet.Range("H4").CurrentRegion.Rows.Count lngStrNo = 4 For i = lngStrNo To lngSYACHO_MaxRow strGenbaNo = wksUpSheet.Range("H" & i) With wksInSheet.Range("C4:C" & lngKAKUNIN_MaxRow) Set rngFind = .Find(strGenbaNo, LookIn:=xlValues, MatchCase:=False) If rngFind Is Nothing Then Else

  • Excel マクロ

    Private Sub Workbook_Open() Dim name As String name = "7月" '//ワークシート名----編集用(本日曜日カラー変更ロジック用----月初変更箇所) Dim week As String Dim Y As Integer Dim X As Integer '//処理(1)-(1) すべての曜日セルの背景を白にする Worksheets(name).Range("A13:M13").Interior.ColorIndex = 19 '白 '//処理(1)-(2) 今日の曜日を取得して色を変更する week = WeekdayName(Weekday(Now), False) '今日の曜日 Y = Worksheets(name).Cells.Find(week).Row X = Worksheets(name).Cells.Find(week).Column Worksheets(name).Cells(Y, X).Interior.ColorIndex = 45 'オレンジ系の色 '//処理(2) 本日日付を取得して色を変更する Dim D As Integer D = Day(TODAY()) '本日の日付 Y = Worksheets(name).Cells.Find(D, LookAt:=xlWhole).Row X = Worksheets(name).Cells.Find(D, LookAt:=xlWhole).Column Worksheets(name).Cells(Y, X).Interior.ColorIndex = 19 ' End Sub 途中なのですが、日付を取得して色を変える というロジックを作っていて 処理(2)からを新しく付け足した時にエラーが起こりました。 内容は「SubまたはFunctionが定義されていません」です。 どうやらD = Day(TODAY())らへんでエラーになっているようなのですが どなたか分かる方教えてください(´・ω・`)(´-ω-`))ぺこり

  • エクセルVBAのFINDの質問です。

    エクセルVBAのFINDの質問です。 シート1    A    B    C     D 1 コード1 コード2 コード3 名 称 2  4    1     1 3  4    2     2 4  4    3     1 シート2    A    B 1 コード1 名 称 2  1   名称1 3  2   名称2 やりたいことは、シート1のD列に、シート1のコード3をもとにシート2から名称を取得したいのです。 下記に記したプログラムだと最初のFINDNEXTは動くのですが、 2回目でエラーになってしまい、次を読んでくれません。 どなたか、ご教授頂けますでしょうか。 シート1の検索条件はコード1の"4"です。 シート1のコード1は重複キーで、一レコードずつ読んで行き、各レコード毎にシート2を読みたい のです。 Dim シート1 As Worksheet Dim シート2 As Worksheet Dim obj As Object Dim Lin As Integer Dim mykey As Integer Dim obj1 As Object Dim Lin1 As Integer Dim mykey1 As Integer Dim st_Lin As Integer Set シート1 = ThisWorkbook.Worksheets("シート1") Lin = シート1.Cells(シート1.Rows.Count, 1).End(xlUp).Row mykey = "4" Set obj = シート1.Range("A1", "A" & Lin).Cells.Find(What:=mykey, _ LookIn:=xlValues, _ lookat:=xlWhole, _ SearchOrder:=xlByColumns) If obj Is Nothing Then   MsgBox ("異常です")   Exit Sub Else   st_Lin = obj.Row   Do Until obj.Row <> st_Lin    Set obj = シート1.Range("A1", "A" & Lin).FindNext(obj)    If obj Is Nothing Then     Exit Do    Else     Set シート2 = ThisWorkbook.Worksheets("シート2")       With シート2          Lin1 = .Cells(シート2.Rows.Count, 1).End(xlUp).Row          mykey1 = シート1.Cells(obj.Row, 3).Value          Set obj1 = .Range("A1", "A" & Lin1).Cells.Find          (What:=mykey1,LookIn:=xlValues,lookat:=xlWhole,SearchOrder:=xlByColumns)          If obj1 Is Nothing Then           MsgBox ("名称取得できませんでした")           Exit Sub          Else            シート1.Cells(obj.Row, 4).Value = .Cells(obj1.Row, 2).Value          End If       End With    End If   Loop End If

  • マクロの関係で困ってしまいました。印刷できません

    Sub Sample3() Dim i As Long, k As Long, c As Range, r As Range i = InputBox("入替え元番号を入力") k = InputBox("入替え先番号を入力") Set c = Range("A:A").Find(what:=i, LookIn:=xlValues, lookat:=xlWhole) Set r = Range("A:A").Find(what:=k, LookIn:=xlValues, lookat:=xlWhole) On Error Resume Next If c.Row < r.Row Then i = c.Row k = r.Row Else i = r.Row k = c.Row End If Rows(k + 1).Insert Rows(i).Cut Cells(k + 1, "A") Rows(k).Cut Cells(i, "A") Rows(k).Delete End Sub  上記のようなマクロを組んで頂いたのですが、「改ページ位置を移動できません」という状況になっています。せっかくgooの質問で答えて頂いたのですが、これでやったら80行ぐらいから、この表示が出て、解決できません。どなたか、解決して頂けませんか。その時に補足すればよかったのですが、動かしてみて分かった次第です。お答え頂いた方に大変申し訳なく思っています。よろしくお願いします。  なお、間違った入力をしてしまった時に、一回だけは元に戻るなんてことはできないですかね。これもできたら厚かましいですがお答え頂けたらと思います。

  • エクセルののマクロについて教えてください

    Sub search() Dim i As Long, lastCol As Long, c As Range, str As String, wS As Worksheet Set wS = Worksheets("sheet2") wS.Cells.Clear str = Application.InputBox("検索内容を入力") Application.ScreenUpdating = False With Worksheets("sheet1") lastCol = .Cells(1, Columns.Count).End(xlToLeft).Column .Columns(lastCol + 1).Insert For i = 2 To .Cells(Rows.Count, "A").End(xlUp).Row Set c = Range(.Cells(i, "A"), .Cells(i, lastCol)).Find(what:=str, LookIn:=xlValues, lookat:=xlWhole) If Not c Is Nothing Then .Cells(i, lastCol + 1) = 1 End If Next i If WorksheetFunction.CountIf(.Columns(lastCol + 1), 1) > 0 Then .Range("A1").AutoFilter field:=lastCol + 1, Criteria1:=1 .Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy wS.Range("A1") wS.Columns.AutoFit wS.Columns(lastCol + 1).Delete wS.Activate .Columns(lastCol + 1).Delete .AutoFilterMode = False Else MsgBox "該当データなし" End If End With Application.ScreenUpdating = True End Sub エクセルで上のシステムをネットから持ってきました。 上から5行目のinputboxを"Sheet3"のA列からデータを持ってきてプルダウンで表示させたいのですがユーザーフォームでオブジェクトを組まないで表示させる方法を教えてください

専門家に質問してみよう