• ベストアンサー

エクセル マクロ 線対称・点対称の位置に色づけする

いつもお世話になっております。 エクセルのマクロを使って(あるいは数式でもいいのですが・・・)やりたいことが2つあります。 (1)指定したセルを「対称の中心」として,アクティブセルと点対称の位置にあるセルに色付けができないかと思っています。 (2)指定した列を「対称の軸」として,アクティブセルと線対称の位置にあるセルに色付けできないかと思っています。 もし可能であるようなら,どなたかマクロを教えていただけませんか? いつも他力本願で申し訳ないのですが,教育に役立てたいと思っています。どうかご教授ください。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.3

sub macro1() ’J10セルに対して点対象位置  dim org as range  set org = range("J10")  on error resume next  org.offset(org.row - activecell.row, org.column - activecell.column).interior.colorindex = 4 end sub sub macro2() ’J列に対して線対象位置  dim org as range  set org = cells(activecell.row, "J")  on error resume next  org.offset(org.row - activecell.row, org.column - activecell.column).interior.colorindex = 6 end sub #同じマクロを流用していますが,勿論行オフセットをゼロに固定して構いません

kumamon2013
質問者

お礼

ご教授ありがとうございました。 私のやりたいことに一番近かったコードでした。 また何かありましたらよろしくお願いいたします。

その他の回答 (3)

回答No.4

遅ればせながら・・・。 下記コードをシートモジュールにコピペッタン。 使い方 A2セルに基準となるアドレスを入れます。 半角で、L10 とか m15 など。 A3セルには、半角小文字で、p h v のいずれか。 p→点 h→水平 v→垂直 A1セルに、半角で0以外を入力。 青(選択セル)に合わせて 赤セルが移動します。 エラー処理は手抜きなので、動かなくなったらエクセルを再起動のこと。 もしかしたらバージョン違いで動かないかも?当方Excel2010。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) On Error Resume Next   Dim rBase As Range '基準点(線)   Dim hB As Integer, vB As Integer   Dim cC '点、縦、横の選択      If Range("A1") = 0 Then Exit Sub      Set rBase = Range(Range("A2").Value)   If Err.Number <> 0 Then Exit Sub      cC = Range("A3").Value      Application.EnableEvents = False   Application.ScreenUpdating = False   'シート内の色をクリア   Cells.Select   With Selection.Interior     .Pattern = xlNone     .TintAndShade = 0     .PatternTintAndShade = 0   End With   '基準点(線)設定   Select Case cC     Case "p"       rBase.Interior.Color = vbBlack     Case "h"       Rows(rBase.Row).Select       With Selection.Interior         .Pattern = xlSolid         .PatternColorIndex = xlAutomatic         .ThemeColor = xlThemeColorDark1         .TintAndShade = -0.349986266670736         .PatternTintAndShade = 0       End With     Case "v"       Columns(rBase.Column).Select       With Selection.Interior         .PatternColorIndex = xlAutomatic         .ThemeColor = xlThemeColorDark1         .TintAndShade = -0.349986266670736         .PatternTintAndShade = 0       End With   End Select   Target.Select   Target.Interior.Color = vbBlue   hB = rBase.Row - Target.Row   vB = rBase.Column - Target.Column      Select Case cC     Case "p"       rBase.Offset(hB, vB).Cells.Interior.Color = vbRed     Case "h"       Cells(rBase.Offset(hB, 0).Row, Target.Column).Cells.Interior.Color = vbRed     Case "v"       Cells(Target.Row, rBase.Offset(0, vB).Column).Cells.Interior.Color = vbRed   End Select      Application.ScreenUpdating = True   Application.EnableEvents = True End Sub

kumamon2013
質問者

お礼

ご教授ありがとうございました。 エラー無く実行できました。 基準値をセル入力できるので,応用が利きそうです。 また何かありましたらよろしくお願いいたします。

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

こんばんは! 面白そうなのでトライしてみました。 Sheetモジュールです。 Dim myRow As Long, myCol As Long, c As Range, r As Range 'この行から Dim myX As Long, myY As Long Sub SAmple1() If Selection.Count > 1 Then MsgBox "1セルのみ選択" Exit Sub End If With ActiveSheet .Cells.ClearContents .Cells.Interior.ColorIndex = xlNone End With With Selection .Value = "○" .Font.ColorIndex = 6 .Interior.ColorIndex = 6 End With MsgBox "点対象の場合はひとつのセルを" & vbCrLf & "線対象の場合は複数セルを選択" End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) Set c = ActiveSheet.Cells.Find(what:="○", LookIn:=xlValues, lookat:=xlWhole) Set r = ActiveSheet.Cells.Find(what:="×", LookIn:=xlValues, lookat:=xlWhole) If Not c Is Nothing And Not r Is Nothing Then Exit Sub With Target If .Count = 1 Then .Value = "×" .Font.ColorIndex = 1 .Interior.ColorIndex = 1 myRow = Abs(c.Row - .Row) myCol = Abs(c.Column - .Column) If c.Row > .Row Then myX = myRow * -2 Else myX = myRow * 2 End If If c.Column > .Column Then myY = myCol * -2 Else myY = myCol * 2 End If c.Offset(myX, myY).Interior.ColorIndex = 3 ElseIf Target(1).Row = Target(Target.Count).Row Then .Value = "×" .Font.ColorIndex = 1 .Interior.ColorIndex = 1 myRow = Abs(c.Row - .Row) If c.Row > .Row Then myX = myRow * -2 Else myX = myRow * 2 End If c.Offset(myX).Interior.ColorIndex = 3 ElseIf Target(1).Column = Target(Target.Count).Column Then .Value = "×" .Font.ColorIndex = 1 .Interior.ColorIndex = 1 myCol = Abs(c.Column - .Column) If c.Column > .Column Then myY = myCol * -2 Else myY = myCol * 2 End If c.Offset(, myY).Interior.ColorIndex = 3 Else MsgBox "1行、または1列を選択してください" Exit Sub End If End With End Sub 'この行まで ※ まず最初のセル(起点のセル)を選択してマクロを実行してみてください。 ※ 対象セルがSheet外の場合はエラーとなります。m(_ _)m

kumamon2013
質問者

お礼

ご教授ありがとうございました。 基準セル・基準列がその都度指定できるのが,応用が利きそうでおもしろかったです。このコードをアレンジしてみたいと思いました。 また何かありましたらよろしくお願いいたします。

回答No.1

とりあえず、ヒントまで。 Sub Sample2() Dim SelectRangeAddress As String SelectRangeAddress = Selection.Address Names.Add Name:="中心", RefersTo:="=" & SelectRangeAddress End Sub Sub Sample3() Dim SelectRangeAddress As String SelectRangeAddress = Selection.Address Names.Add Name:="アクティブセル", RefersTo:="=" & SelectRangeAddress End Sub 上記のものは、選択した位置に名前を定義するものです。 プログラムの流れとして、 1.セルを選択させるウィンドウを出す(対象の軸を選択してください。) ⇒きちんとした値が出るまで繰り返す   きちんとした値が入力されたら、色を塗る 2.セルを選択させるウィンドウを出す(対象の中心?を選択してください)⇒きちんとした値が出るまで繰り返す   きちんとした値が入力されたら、色を塗る 3.アクティブセルと軸?の対象位置を割り出す (Offsetとか色々算出方法はある?) うーん、こんな流れですかねぇ… せめて、対称位置の割り出し方法は考えてもらえませんか?

kumamon2013
質問者

お礼

ご教授ありがとうございました。 OFFSETで対称位置を割り出してみたいと思います。 また何かありましたらよろしくお願いいたします。

関連するQ&A

  • エクセルマクロ

    キーボード操作では、→→→↓shiftキー押しながら→→↓↓の手順操作のマクロを作成したい (セル番地で指定したマクロでなく、開始時のアクティブセル(任意セル番地の基点)から右3下1の位置から右2、下2の範囲指定をしたい) 仮に例を示すと、アクティブセル(仮にアクティブセル番地B5だったとすると)からカーソル左へ3つ、下へ1つ移動(アクティブセルはE6)し、右に2、下に2(E6:F7)を範囲選択するマクロを作成したい。

  • 【エクセル・マクロ】 繰り返し貼り付けがしたいです

    仕事で、大量のコピペをしなきゃいけなくなり、 マクロを組みたいのですが、素人でよく分からず投稿させて頂きました。 宜しくお願い致します。 参考画像のように、 A列にあるデータを、B列の数に合わせて C列(色付けしてある列)に繰り返し貼り付けをしたいのです。 ※参考画像では、分かりやすいように姓名にしてありますが、 本当は文章とか数字とかを使います。 参考画像ではA列に5行分、B列に20行分しかありませんが、 本当はA列に50行分、B列に3,000行分あります。 ですから、A列の50行を、3,000÷50=60回も貼り付けするのが面倒で、 3,000という数字も、毎回1,000~10,000と変動するので、 今後のことを考えると、マクロを組んだ方が早いのでは、と思いました。 また、欲を言えば、A列に数式を入れていることもあり、 C列に数式の繰り返し貼り付けをおこないたいのですが、 これは難易度がぐっと上がるのでしょうか? 他力本願で大変申し訳ございませんが、 何卒宜しくお願い致します。

  • エクセルのマクロで

    こんにちは、お願いします。 エクセルに画像の添付でマクロを使用したいのですが、 下記のようなマクロ作成・編集ができるのでしょうか? エクセルの特定のセルに画像のファイル名を入力しマクロを実行すると、他のフォルダにある.jpg画像が指定したセル位置に添付される。 また、添付位置を複数にもできますか? 説明がわかるでしょうか…?^_^; マクロに関して全く無知なのですが、できるものでしたら是非教えてください。 宜しくお願いします。

  • エクセル マクロ アクティブセル領域を移動させたい

    いつもお世話になっております。 当方マクロ超初心者です。 アクティブセルの大きさは変えずに、 範囲だけを移動させるマクロがつくりたいです。 例えば A1 B1 A2 B2 A3 B3 の6つのセルがアクティブの時に実行すると B3 C3 B4 C4 B5 C5 がアクティブになるマクロを作りたいです。 (この場合だとアクティブセルが 右へ2つ、下へ1つ移動したイメージ) 何卒よろしくお願いいたします。

  • excel マクロ 画像貼り付け位置入力 

    このマクロを使って別々のシートにセル位置A1から縦に 画像を挿入したいのですが  ' 貼り付け開始セルを選択    ←マクロのプログラム部分   Range("A1").Select のA1の部分をこのマクロを起動させたら excel画面内に 四角 [    ] のボックスなどで表示させ  例 貼り付け指定位置を入力せよ    A=[   ] などと表示させ それに例えば    A=[ 5 ] [ A5 ]と入力すればマクロのプログラムも書き換えられるようにしたいのです お願いいたします Sub 複数の画像を挿入()      Dim strFilter As String   Dim Filenames As Variant   Dim PIC    As Picture        ' 「ファイルを開く」ダイアログでファイル名を取得   strFilter = "画像ファイル(*.jpg;*.jpeg;*.gif;*.bmp;*.png),*.jpg;*.jpeg;*.gif;*.bmp;*.png"   Filenames = Application.GetOpenFilename( _           FileFilter:=strFilter, _           Title:="図の挿入(複数選択可)", _           MultiSelect:=True)   If Not IsArray(Filenames) Then Exit Sub      ' ファイル名をソート   Call BubbleSort_Str(Filenames, True, vbTextCompare)        ' 貼り付け開始セルを選択   Range("A1").Select        ' マクロ実行中の画面描写を停止   Application.ScreenUpdating = False   ' 順番に画像を挿入   For i = LBound(Filenames) To UBound(Filenames)     Set PIC = ActiveSheet.Pictures.Insert(Filenames(i))           '-------------------------------------------------------------     ' 画像の各種プロパティ変更     '-------------------------------------------------------------     With PIC       .Top = ActiveCell.Top    ' 位置:アクティブセルの上側に重ねる       .Left = ActiveCell.Left   ' 位置:アクティブセルの左側に重ねる       .Placement = xlMove     ' 移動するがサイズ変更しない       .PrintObject = True     ' 印刷する     End With     With PIC.ShapeRange       .LockAspectRatio = msoTrue  ' 縦横比維持       ' 画像の高さをアクティブセルにあわせる       ' 結合セルの場合でも対応       .Height = ActiveCell.MergeArea.Height     End With     ' 次の貼り付け先を選択(アクティブセルにする)[例:5個下のセル]     ActiveCell.Offset(5).Select          Set PIC = Nothing   Next i      ' 終了   Application.ScreenUpdating = True   MsgBox i-1 & "枚の画像を挿入しました", vbInformation End Sub

  • マクロでVLOOKUP関数をつかいたいのですが

    エクセルでマクロを使ってVLOOKUP関数みたいなことを したいのですが(文章力が無くてすみません。) sheet1のセルb4を検索値にして、 sheet2のリストb3:C32を範囲に指定します 列番号は 2  検索の型ほ FALSE      です。 この値をsheet1のセル"O4"に表示させて、 なおかつ”O4:O33"までオートフィルで数式を入れたいときは どのようにマクロを組めばよいのでしょうか。 ほとんど初心者なのでマクロの記録を使ってやってみたのですが エラーになってしまい、うまくいきません。 他力本願で申し訳ないのですがどなたか詳しい方 ご回答をお願いいたします。

  • エクセルのマクロで、複数のシートで、指定のアクティブセルに移動する方法

    エクセルの複数のシートがあるファイルで、指定の位置にアクティブセルを移動するマクロを組むにはどうしたらよいでしょか。 複数のシートがあります。 アクティブセルが各シートばらばらの位置だと見栄えが悪いです。 そこで B列の一番下から「END+↑」でとんだ位置で止まる。 複数のシート(20以上)を同じ作業 最後に一番左端のシートでをアクティブシートにして終了 ※A列は空白行のため、必ず埋まっているB列を基準にしたい マクロを教えたください。

  • エクセル97での位置情報取得について

    エクセル97での位置情報の取得について 再度質問させていただきます エクセルのVBAにて、セルを無視したシート内の位置情報を 取得することは可能でしょうか? たとえば一番左上を(0,0)とすると(50,100)などの X軸、Y軸の数字の取得です。 あるA画像をX軸50 Y軸100の位置に挿入して、   B画像をX軸50 Y軸150の位置に挿入して、   C画像をX軸50 Y軸200の位置に挿入したいと考えています。 画像を挿入した後の位置情報の取得ではなく、位置情報を指定してから その場所に画像を挿入したいと考えています。 そのようなことは可能でしょうか? セルを無視したワークシート上のX軸、Y軸の 位置情報の取得の仕方を教え下さい。 参考のURLでも構いません。宜しくお願い致します。

  • EXCEL 値のみをコピーするマクロ

    お世話になります。 特定のセル(M2)からアクティブセル(クリックで指定したセル)へ「値のみ」をコピーするマクロを考えています。 現在は「そのままコピー」するマクロになっているので、「値のみコピー」へ変更するには どうすればいいでしょうか? Sub 追番貼付け() ' ' Worksheets("データ検索用").Range("M2").Copy Sheets("見積書").Select ActiveSheet.Paste Application.CutCopyMode = False End Sub

  • EXCEL2003 書換えたセルを元に戻すマクロ

    お世話になります。 質問に関してですが、次のような内容になります。 セルB2:J2までの各セルに数式が入っており、セルL2に入力された内容によって各セルにデータが表示されるような物があります。 例えば、B2のセルのデータ内容を書換えるとします。通常であれば数式によりデータが表示されている為、データを書換える為には数式を消さなければなりません。 そこで、内容を書換える為にマクロを組んでおり、コマンドボタンを押すと、セルの値のみをコピーしてセルに表示させています。(アクティブセルをコピー→形式を選択して貼付け→値のみを貼付ける、という動作をマクロにしています) この書換えた内容を元に戻す(元の数式の入ったセルに戻す)為のマクロの組み方について質問があります。 書換える前のセルの数式をセルB250:J250に入れているのですが、 セルB2の内容を書換える場合はセルB250、セルG2の内容を書換えるにはセルG250のように アクティブセルの位置によって、同じ列の数式を選択して貼付けるようにするにはどうすればいいでしょうか?

専門家に質問してみよう