• ベストアンサー

エクセルのマクロ

エクセル2002でマクロを記録しました。 セルD5を選択した状態で、マクロの記録を始めました。(相対参照ボタンをクリックしています) D5のセルの色を黒にして、セルD6を選択して色を白にしました。ここで記録を終了しました。 VisualBasicEditorで見ると以下のような記述がありました。 そこで教えてください。 1)どの部分が相対参照をしているという意味の記述でしょうか? 2)どの部分がD6を選択したという記述でしょうか? 3)「Range("A1").Select」はどういう意味ですか?A1のセルはクリックしていないのですが・・・。 教えてください。 記述は以下です。 With Selection.Interior .ColorIndex = 1 .Pattern = xlSolid End With ActiveCell.Offset(1, 0).Range("A1").Select With Selection.Interior .ColorIndex = 2 .Pattern = xlSolid End With End Sub

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

1)どの部分が相対参照をしているという意味の記述でしょうか? 特別無いです。強いて言えば、絶対参照としてのアドレスが入っていないことから全体が 最初のSelectionが選択されている範囲ということでD5を表しています。 2)どの部分がD6を選択したという記述でしょうか? >ActiveCell.Offset(1, 0).Select で、現在のアクティブセル(D5)の1つしたを選択するという意味です。 3)「Range("A1").Select」はどういう意味ですか?A1のセルはクリックしていないのですが・・・。 どうしてこういう風に記録されるのかはわかりませんが、 Range("A1")は、必要ないです。 ActiveCell.Offset(1, 0).Range("A1").Select は、 ActiveCell.Offset(1, 0).Select と同じ意味。 多分、選択されている範囲の一番左上というような意味だと思います。

ameameame
質問者

お礼

ありがとうございました。たいへん参考になりました。

その他の回答 (2)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

ためしに絶対参照にするとこうなります。 With Selection.Interior .ColorIndex = 1 .Pattern = xlSolid End With Range("D6").Select With Selection.Interior .ColorIndex = 2 .Pattern = xlSolid End With

ameameame
質問者

お礼

ありがとうございました。たいへん参考になりました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 書籍を購入して勉強してくださいね。基礎の基礎ですから。ここのカテゴリを検索すると、推薦するVBAの学習書が出てきますから。Mougの 「大村あつし」さんの書籍などが一番良いかと思います。 一応解説しておくと、それは、相対参照の記録で、ほとんど記録マクロにしか見られないものです。しかし、この考え方も、後々役に立つことがあります。 >ActiveCell.Offset(1, 0).Range("A1").Select 相対参照は、自分の位置を中心にして、自分を、A1(起点)と呼ぶということです。相対参照は、必ずそういうようになります。ActiveCellの下隣を、A1(起点)にする、という意味です。 なお、相対参照には、固有の番地はありません。

ameameame
質問者

お礼

ありがとうございました。たいへん参考になりました。

関連するQ&A

  • Excelで渦巻状にセルを移動するマクロを作りたいのです

    マクロで渦身状&時計回りにアクティブセルを移動させるにはどのように 記述したらよいでしょうか。 例えば、E16を選択しているときにマクロを実行したら E16→D16→D15→D14→E14→F14→F15→F16→F17→E17→D17→C17→… と移動していく感じです。 キーボード記録マクロで[↑][↓][←][→]キーで移動してみても何も記録 されなかったので、移動→黄色に塗りつぶし、という繰り返しを記録 してみると、文末のようにはなりました。が、渦巻き状に移動という アルゴリズムがさっぱり思いつきません。 無限でなく、例えば10周くらいまわれば十分です。 最終的には、移動するごとに、踏んだセルの値を評価(1だったら赤に塗る、 のように)していきますが、まずは選択セルを基点に渦巻状にセルを移動 する方法が知りたいです。 よろしくお願いします。 Sub Macro1() With Selection.Interior .ColorIndex = 6 .Pattern = xlSolid End With Range("E16").Select With Selection.Interior .ColorIndex = 6 .Pattern = xlSolid End With Range("D16").Select With Selection.Interior .ColorIndex = 6 .Pattern = xlSolid End With ' ■中略■ Range("C17").Select With Selection.Interior End Sub .ColorIndex = 6 .Pattern = xlSolid End With (ちなみに) エクセル上に、日本地図が碁盤目状に描かれています。 セルには、平野=1、山=2、海=3のように記述されています。 これを特定法則で塗り分けるのに利用します。

  • マクロ:セルの範囲指定

    エクセルマクロで困っています。 セルの範囲指定をしようとしています。 初心者過ぎて、よくわかりません。 現在のマクロ↓ Sub 済() If ActiveCell.Column = 21 Then Selection.FormatConditions.Delete '条件付き書式削除 With Selection.Interior .ColorIndex = 16 .Pattern = xlSolid End With ActiveCell.Offset(0, 1).Select With Selection.Interior .ColorIndex = 16 .Pattern = xlSolid End With ActiveCell.Offset(0, 1).Select With Selection.Interior .ColorIndex = 16 .Pattern = xlSolid End With ActiveCell.Offset(0, 1).Select With Selection.Interior .ColorIndex = 16 .Pattern = xlSolid End With ActiveCell.Offset(0, 1).Select With Selection.Interior .ColorIndex = 16 .Pattern = xlSolid End With ActiveCell.Offset(0, 1).Select With Selection.Interior .ColorIndex = 16 .Pattern = xlSolid End With ActiveCell.Offset(0, 1).Select With Selection.Interior .ColorIndex = 16 .Pattern = xlSolid End With ActiveCell.Offset(0, 1).Select With Selection.Interior .ColorIndex = 16 .Pattern = xlSolid End With ActiveCell.Offset(0, 1).Select With Selection.Interior .ColorIndex = 16 .Pattern = xlSolid End With '色変え判定セル書き換え ActiveCell.Offset(0, 5).Select ActiveCell.FormulaR1C1 = "77" ActiveCell.Offset(0, -5).Select Else answer = MsgBox("U列を選択して下さい", vbCritical) End If End Sub やりたい事は、下記の通りです。 列Uがアクティブの時にU~ACの行を塗りつぶし。 列は変動します。 今は、やり方がよく分からなかったため オフセットで一つ一つ塗りつぶしてます。 マクロを組みすぎてファイルが重くなって困っています。 回答よろしくお願いいたします。

  • マクロの簡素化

    下記マクロです。 Range("AE6:AE1005").Select Selection.ClearContents Selection.Interior.ColorIndex = xlNone If Range("AD6").Value > 5 Then Range("AE6") = "*" Range("AE6").Select With Selection.Interior .ColorIndex = 3 End With Else End If If Range("AD7").Value > 5 Then Range("AE7") = "*" Range("AE7").Select With Selection.Interior .ColorIndex = 3 End With Else End If If Range("AD8").Value > 5 Then Range("AE8") = "*" Range("AE8").Select With Selection.Interior .ColorIndex = 3 End With Else End If 中略(セルを一個づつ指定しています) If Range("AD1004").Value > 5 Then Range("AE1004") = "*" Range("AE1004").Select With Selection.Interior .ColorIndex = 3 End With End If If Range("AD1005").Value > 5 Then Range("AE1005") = "*" Range("AE1005").Select With Selection.Interior .ColorIndex = 3 End With Else End If Range("AE3").Select 有るセルを参照しその値が5以上だったら別のセルに*マークとセルに色を付けるマクロですが、一個づつセル指定をしていますが、何とか短く出来ないでしょうか? お分かりになる方宜しくお願い致します。

  • Excel VBAの相対参照について

    Excelで相対参照を勉強しようと思い、 A3を選択後 1.A3:F3を選択 2.A3:F3に黄色の網かけを設定 3.A5を選択 を相対参照で記録しました。(記録は1.~3.までです) VBAを確認すると Sub 罫線() ActiveCell.Range("A1:F1").Select With Selection.Interior .ColorIndex = 6 .Pattern = xlSolid End With ActiveCell.Offset(2, 0).Range("A1").Select End Sub という記述があったのですが、 なぜ、ActiveCell.Range("A1:F1").Selectと ActiveCell.Offset(2, 0).Range("A1").Selectというものがあるのでしょうか。 僕は、A1:F1の選択はしていませんし、網掛け後はA5を選択しているのに Range("A1").Selectの記述もよくわかりません。 ActiveCell.Offset(2, 0).Range("A1").Selectというのは 「選択したA1のセルから2行下、0列めを選択」と読めそうですが、 相対参照ならではの記述があるのでしょう。 ご存知の方、教え下さい。

  • エクセルで繰り返し処理をしたいのですが

    下記のマクロを6行目で展開しています。 これと同じ処理を7行目~36行目めまでさせたいのですが どうやればいいのか教えていただけないでしょうか? sub test() Select Case a Case 2, 3, 4, 5, 6 Range("F6").Select Selection.FormulaR1C1 = _ "=IF(RC[-1]-RC[-2]-0.75-RC[8]-RC[9]<=0,0,RC[-1]-RC[-2]-0.75-RC[8]-RC[9])" Range("H6").Select Selection.FormulaR1C1 = "=IF(-7.75>=RC[9],0,RC[9])" Range("J6").Select Selection.FormulaR1C1 = _ "=IF(IF(RC[-5]<=22,0,(RC[-5]-22-RC[6]))<=0,0,IF(RC[-5]<=22,0,(RC[-5]-22-RC[6])))" Range("B6:W6").Select With Selection.Interior .ColorIndex = 2 .Pattern = xlSolid End With Case 0, 1 Range("F6").Select Selection.ClearContents Range("H6").Select Selection.ClearContents Selection.FormulaR1C1 = "=IF(RC[-5]<=22,0,(RC[-5]-22-RC[6]))" Range("J6").Select Selection.ClearContents Range("B6:W6").Select With Selection.Interior .ColorIndex = 45 .Pattern = xlSolid End With End select End sub

  • エクセルのマクロ

    縦方向に連続したセルを選択状態にした時に、選択セルを基点として右横方向に連続してデータが入力されているセルを罫線で囲う、という処理をマクロで実行したいのですが。 例えば、以下の図で黒丸がデータ入力セルであるとすると、C1~C4を選択状態にして実行すると、C1~D1とC2~F2とC4が罫線で囲われます。  AB CD EFG 1○●●●○○○ 2●●●●●●○ 3○○○○○○○ 4●●●○○○○ 以下のマクロを実行すると、上図の3行目と4行目のところがかなり余計に罫線が引かれてしまいます。どう修正すればいいでしょうか? Sub test1()  yc = Selection.Rows.count  aa = ActiveCell.Address  For y = 0 To yc - 1  ActiveCell.Offset(y, 0).Select  Range(ActiveCell, ActiveCell.End _       (xlToRight)).Select        With Selection.Borders(xlEdgeLeft)       .LineStyle = xlContinuous       .Weight = xlThin       .ColorIndex = xlAutomatic    End With    With Selection.Borders(xlEdgeTop)       .LineStyle = xlContinuous       .Weight = xlThin       .ColorIndex = xlAutomatic    End With    With Selection.Borders(xlEdgeBottom)       .LineStyle = xlContinuous       .Weight = xlThin       .ColorIndex = xlAutomatic    End With    With Selection.Borders(xlEdgeRight)       .LineStyle = xlContinuous       .Weight = xlThin       .ColorIndex = xlAutomatic    End With    Range(aa).Select   Next y End Sub

  • エクセルVBAについて

    エクセルVBA初心者で、勉強中の者です。 添付画像のような時間のグラフのようなものを作りたいと思っています。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Sub 時間グラフ作成() If Worksheets("(1)(1)(1)(1)(1)").Range("F2").Value = CDate("9:05") Then Worksheets("(2)(2)(2)(2)").Range("I2").Select  With Selection.Interior   .ColorIndex = 8   .Pattern = xlSolid  End With Elseif Worksheets("(1)(1)(1)(1)(1)").Range("F2").Value = CDate("9:10") Then Worksheets("(2)(2)(2)(2)").Range("J2").Select  With Selection.Interior   .ColorIndex = 8   .Pattern = xlSolid  End With  ・  ・   ・ End If End Sub 'それから、終了の時間を入れて、開始から終了までの間を塗りつぶす。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 以上のように作成しようと考えていましたが、いざやろうとすると 1行に対してあまりにも膨大な記述をしなくてはならないことに 気がつきました(一月分ともなると恐ろしいです・・・)・・・。 もっと効率的な方法はあるものでしょうか? よろしくお願いいたします。

  • Aファイルでマクロを組み他のファイルを動かしたい

    Sub マクロ1() Workbooks.Open Filename:="C:\Users\inoue\Documents\BB.xls" ここでファイル名を選ぶのはどんな命令文 したら良いかご指導願います      (ファイル名がその度に変更するため)     Range("D7:H16").Select With Selection.Interior .ColorIndex = 6 .Pattern = xlSolid End With Selection.Interior.ColorIndex = 6 Range("D18").Select Windows("A.xls").Activate End Sub 上記の命令文で ファイル呼び出しの時 他のフォルダのファイル名 その都度選びたいのですご指導願います

  • エクセルマクロ セルの色つけ

    エクセルのマクロです。 条件で複数セルに色をつけたいのですが以下の方法しかないですか。 もっと多くのセルに一度に色を付ける良い方法がありましたら教えて下さい。 If days = "日" Then With Cells(i, 2).Interior .ColorIndex = 3 .Pattern = xlSolid End With With Cells(i, 13).Interior .ColorIndex = 3 .Pattern = xlSolid End With End If 以上 お願いします。

  • マクロの中に別なマクロを組み込むには

    よろしくお願いします。 excel2003でマクロを作っています。 Sheet2のC1、D1、E1にセルを赤く塗りつぶす、赤と入力、カラーインデックスの番号を入力するというマクロを作りボタンに割り当てたいと思います。 全部で色が17色あるので、マクロを17個作らなければならないと思うのですが、なるべく簡略化したいと思います。 そこで下記の「赤」というマクロの中に「色」というマクロを取り込みたいのですが、うまくできませんでした。 どうかマクロの中にマクロを取り込む方法を教えてください。 もし下記のマクロがもっとスマートに出来るようでしたら、それも教えていただけると嬉しいです。 VBAは初心者ですがよろしくお願いします。 Sub 赤() irobango = 3 ironamae = "赤" End Sub Sub 色() Worksheets("Sheet2").Range("C1").Select With Selection.Interior .ColorIndex = irobango .Pattern = xlSolid End With Worksheets("Sheet2").Range("D1").Value = ironamae Worksheets("Sheet2").Range("E1").Value = irobango End Sub

専門家に質問してみよう