- ベストアンサー
エクセル マクロ 線対称・点対称の位置に色づけする
いつもお世話になっております。 エクセルのマクロを使って(あるいは数式でもいいのですが・・・)やりたいことが2つあります。 (1)指定したセルを「対称の中心」として,アクティブセルと点対称の位置にあるセルに色付けができないかと思っています。 (2)指定した列を「対称の軸」として,アクティブセルと線対称の位置にあるセルに色付けできないかと思っています。 もし可能であるようなら,どなたかマクロを教えていただけませんか? いつも他力本願で申し訳ないのですが,教育に役立てたいと思っています。どうかご教授ください。
- kumamon2013
- お礼率85% (51/60)
- Excel(エクセル)
- 回答数4
- ありがとう数4
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
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 #同じマクロを流用していますが,勿論行オフセットをゼロに固定して構いません
その他の回答 (3)
- NotFound404
- ベストアンサー率70% (288/408)
遅ればせながら・・・。 下記コードをシートモジュールにコピペッタン。 使い方 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
お礼
ご教授ありがとうございました。 エラー無く実行できました。 基準値をセル入力できるので,応用が利きそうです。 また何かありましたらよろしくお願いいたします。
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 面白そうなのでトライしてみました。 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
お礼
ご教授ありがとうございました。 基準セル・基準列がその都度指定できるのが,応用が利きそうでおもしろかったです。このコードをアレンジしてみたいと思いました。 また何かありましたらよろしくお願いいたします。
- satoron666
- ベストアンサー率28% (171/600)
とりあえず、ヒントまで。 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とか色々算出方法はある?) うーん、こんな流れですかねぇ… せめて、対称位置の割り出し方法は考えてもらえませんか?
お礼
ご教授ありがとうございました。 OFFSETで対称位置を割り出してみたいと思います。 また何かありましたらよろしくお願いいたします。
関連するQ&A
- 【エクセル・マクロ】 繰り返し貼り付けがしたいです
仕事で、大量のコピペをしなきゃいけなくなり、 マクロを組みたいのですが、素人でよく分からず投稿させて頂きました。 宜しくお願い致します。 参考画像のように、 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列に数式の繰り返し貼り付けをおこないたいのですが、 これは難易度がぐっと上がるのでしょうか? 他力本願で大変申し訳ございませんが、 何卒宜しくお願い致します。
- ベストアンサー
- その他MS Office製品
- エクセル マクロ アクティブセル領域を移動させたい
いつもお世話になっております。 当方マクロ超初心者です。 アクティブセルの大きさは変えずに、 範囲だけを移動させるマクロがつくりたいです。 例えば 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のように アクティブセルの位置によって、同じ列の数式を選択して貼付けるようにするにはどうすればいいでしょうか?
- ベストアンサー
- その他MS Office製品
お礼
ご教授ありがとうございました。 私のやりたいことに一番近かったコードでした。 また何かありましたらよろしくお願いいたします。