今だけ人気マンガ100円レンタル特集♪

はじめまして。
VBA初心者です。
ボタンをクリックする度にセルの範囲(A1:B40)を赤・白・赤・白 ・・・・と交互に色を付けるにはどのようにしたらよいでしょうか?
いまいちよくわかりません。
どなかたご教授くだされば助かります。

このQ&Aに関連する最新のQ&A

A 回答 (5件)

例えばこんなマクロをALT+F11でVBE画面を開き、左上のVBA Projectでシート名を右クリックし「挿入」→「標準モジュール」で表示される画面に貼り付けて下さい。



Sub Macro1()
 With ActiveSheet
  If .Range("A1").Interior.ColorIndex = xlNone Then
   .Range("A1:B40").Interior.ColorIndex = 3
  Else
   .Range("A1:B40").Interior.ColorIndex = xlNone
  End If
 End With
End Sub

シート上に「フォーム」の「コマンドボタン」を配置して、上記マクロをボタンに割り付けてくさだい。(「コントロール」のボタンではマクロの登録方法が違います。この説明は「フォーム」のボタンの説明になります)

なお着色の判断はA1セルで行っています。不都合なら変更してください
    • good
    • 0
この回答へのお礼

早速の返答ありがとうございます。
また御礼が遅くなりましてすみません。
まさにこれを必要としていました。
助かりました。
ありがとうございます。

お礼日時:2009/04/19 09:28

こんにちは。



#4の方とかぶりますが、私も、元のご質問がよく分からないですね。

>ボタンをクリックする度に
>セルの範囲(A1:B40)を赤・白・赤・白 ・・・・と交互に色を付ける

もし、練習なら、ご自身で考えたほうがよいと思います。実用度は低いし、ある程度、VBAの経験のある人なら初歩的ではあっても、経験のない人には、そのような問題は、ループで処理するということを学ばないと難しいです。また、ある程度、勘が働く人なら、ループは使いません。それと、白赤の交互の模様は、一体、どういうものを言っているのか理解していません。


Sub TestMacro1()
  With ActiveSheet
    If .Range("A1").Interior.ColorIndex = xlNone Then
      Range("A1").Interior.ColorIndex = 3
      Range("A2").Interior.ColorIndex = xlNone
    Else
      Range("A1").Interior.ColorIndex = xlNone
      Range("A2").Interior.ColorIndex = 3
    End If
    Range("A1:A2").Copy Range("A1:B40")
  End With
End Sub

Sub TestMacro2()
  With ActiveSheet
    If .Range("A1").Interior.ColorIndex = xlNone Then
      .Range("A1:B2").ClearFormats
      Range("A1").Interior.ColorIndex = 3
      Range("B2").Interior.ColorIndex = 3
    Else
      .Range("A1:B2").ClearFormats
      Range("B1").Interior.ColorIndex = 3
      Range("A2").Interior.ColorIndex = 3
    End If
    Range("A1:B2").Copy Range("A1:B40")
  End With
End Sub
    • good
    • 0
この回答へのお礼

早速の返答ありがとうございます。
また御礼が遅くなりましてすみません。
はい、おっしゃるとおりです。
ただ、仕事ではつかいません。
ですので実用度は低いかもしれません。
そのため、独学で習得していますが、
自分が必要とするもの以上のスキルが身についていないです。
参考になりました。
ありがとうございます。

お礼日時:2009/04/19 09:41

>いまいちよくわかりません。


読むほうが質問の意味が良くわからない。こんなことをする必要を想像しにくいから。(特に仕事関連では)
具体的に書くこと。
ボタンをクリックすると
Private Sub CommandButton1_Click()

End Sub
の中に何をどうコードするか、だが、
>セルの範囲(A1:B40)を赤・白・赤・白 ・・・・と交互に色を付ける
とはどういうことか?。
はじめはA1赤、B1は白、A2は白、B2は赤・・として、クリックしたらA1は白、B1は赤、A2は赤、b2は白・・と反転させるということか。
丁寧に質問を書くこと。
Private Sub CommandButton1_Click()
Dim cl As Range
For Each cl In Range("A1:B10")
If cl.Interior.Color = vbRed Then
cl.Interior.Color = vbWhite
GoTo p1
ElseIf cl.Interior.Color = vbWhite Then
cl.Interior.Color = vbRed
End If
p1:
Next
End Sub
例のセル範囲をA1:B10にして
当初は1回下記を設定しておいて
赤 白
白 赤
赤 白
白 赤
赤 白
白 赤
赤 白
白 赤
赤 白
白 赤
がクリックのよって
白 赤
赤 白
白 赤
赤 白
白 赤
赤 白
白 赤
赤 白
白 赤
になったが、そういうことか?
    • good
    • 0
この回答へのお礼

早速の返答ありがとうございます。
また御礼が遅くなりましてすみません。
確かに仕事で使うものではありません。
そもそも私は仕事ではVBAを必要としておらず、自宅で使っています。
そのためか習得する必要性もとくにありません。
ただ、これからも勉強していきます。
ありがとうございました。

お礼日時:2009/04/19 09:36

VBAはマクロの記録程度ですので すっきりした文をかけませんが


Sub 赤白交互に色をつける()
    Dim 行1 As Long
    Dim 行数 As Long
    Dim 列1 As Long
    Dim 列数 As Long
    Dim n As Long
   
    行1 = Selection.Row
    行数 = Selection.Rows.Count
    列1 = Selection.Column
    列数 = Selection.Columns.Count
    For n = 行1 To 行1 + 行数 - 1
        Range(Cells(n, 列1), Cells(n, 列1 + 列数 - 1)) _
        .Interior.ColorIndex = 3 - (行1 + n) Mod 2
    Next n
End Sub
    • good
    • 0
この回答へのお礼

早速の返答ありがとうございます。
また御礼が遅くなりましてすみません。
初心者の私にはこのような記述でできるのが不思議です。
勉強します。
ありがとうございました。

お礼日時:2009/04/19 09:32

下記をボタンに登録する。



Sub test2()
cli = Range("A1:B40").Interior.ColorIndex
c = 2 - cli
c = Not (c)
cli = 2 - c
Range("A1:B40").Interior.ColorIndex = cli
End Sub
    • good
    • 0
この回答へのお礼

早速の返答ありがとうございます。
また御礼が遅くなりましてすみません。
このような方法もあるのですね。
どうもありがとうございました。

お礼日時:2009/04/19 09:30

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QExcelのマクロでボタンを押すと数が1足されるようにするには?

とあるイベントで
来客者の人数を調べたいと思いました。
紙に正の字を書いていってもいいのですが
折角なので、後のグラフをつくったりする作業がやりやすいように
PCで処理しようと思いました。
しかし、いちいち数をけして打ちなおしていくのは
あまりにも面倒です・・・
街灯の人数調査(?)の人がもってる
カウントできる機械のようなものも持っていませんし・・・

例えばマクロを使用し
ボタンを押すとセル内の数が1足されるように
設定したいのですがどうすればよいでしょう?
もしくは、そういったことは可能でしょうか。

ワンクリック(もしくはそれに準ずる簡単さ)で
カウントがとれればマクロでなくても構わないです。
Excelあまりいじったことがないので
教えていただければ幸いです。

また、マクロでそういったことができないのであれば
Excel以外でもカウントをとることができるものがあれば
合わせて教えていただけると嬉しいです。
よろしくおねがいします。

Aベストアンサー

Range("A1") = Range("A1") + 1

と書いたマクロを適当なボタンに登録して下さい。
A1に初期値を記入しておけば、ボタンをクリックする毎に1ずつ加算されます。

QExcelでセルをクリックするたびに表示を切り替えるには?

Excelで、セルをクリックするたびに”○”を表示・非表示と切り替えたいのですが、できるのでしょうか?
チェックボックスでもよいのですが、”レ”か”・”しかでないのでそれを”○”で表示したいのです。
うまく説明できませんが、よろしくお願いします!!

Aベストアンサー

>実行時エラー'13': 型が一致しません。

これはわたしのミスです。すいません。

じつは、前回紹介したコードは、
「選択(クリック)するセルは1つ」という前提で書いているために、上記のエラーが発生します。

たとえば、
ドラッグなどで、複数の範囲を選択しようとすると、実行時エラーがでてしまいます。
また、セル結合などで複数のセルが結合された場所がある時もエラーになります。

そこで、前回のコードの3行目あたりの、

   With Target

の部分を、

   With ActiveCell

に修正してみてください。
これで直ると思います。

QSub ***( ) と Private Sub ***( ) の違い

初歩的な質問で申し訳ありませんが・・・

自分でコードを書いていても、イベントが発生したりした時の処理で、コードのウィンドウで上のドロップダウンリストで選択できる時の処理などは自動的に[Private Sub Command1_Click( )]などと出てくるのでそのまま使っています。自分で別途プロシージャーを作成する時は[Sub ****( )]としています。
ですがその違いを理解しないまま、自分で作成する時は[Private Sub]ではなくて[Sub]を使っています。

Sub ***( ) と Private Sub ***( ) の違いは何なんでしょうか?
どなたか説明頂けませんか?
よろしくお願いします。

Aベストアンサー

「Sub」の部分にカーソルを置いて[F1]を押せばヘルプが起動します。
「指定項目」のところに「Public」と「Private」の説明がありますよ。
省略して「Sub hogehoge()」とした場合は「Public」とみなされます。

Publicは「すべてのモジュールから呼び出せるプロシージャ」ということになります。
Privateとすると「同じモジュールの中からしか呼び出せないプロシージャ」となります。

もしExcelをお持ちでしたらExcelのVBEで標準モジュールを追加し、「Sub Test1()」と「Private Sub Test2()」を作成してみてください。
そしてExcelの[ツール]-[マクロ]-[マクロ(Alt+F8)]でマクロ実行のダイアログを表示させてみるとわかります。
ここには実行できるプロシージャの一覧が表示されますが、Test1は表示されているけれどTest2は表示されません。
Test1はPublicで、Test2はPrivateだからです。

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?

Qエクセル VBA ユーザーフォームを閉じる

ユーザーフォームを開く時は
UserForm1.Showですが
閉じる時は?
UserForm1.Close
だとコンパイルエラーになります。
End
にするしかないですか?

Aベストアンサー

Unload Me とか Unload UserForm1 でユーザーフォームを閉じることができます。

QEXCEL-VBAでコマンドボタンに条件を追加したい

EXCEL-VBAでコマンドボタンを実行出来る
条件を追加したいです。

初心者なので基本的な質問ですみませんが、
よろしくお願いします。

Aベストアンサー

Sub CommandButton1_Click()

if 条件式 then

'いつもの作業作業

end if
End Sub

とするか、あるいは有効無効を切り替えるタイミングで
CommandButton1.Enabled=falseにするか

QEXCEL VBAで計算値を四捨五入、切り上げ、切捨てする方法

ネットで探してみたのですが、計算結果を四捨五入して特定のセルを
返すにはどうしたらいいのでしょうか?

Sub hokangosa()

Dim ZPS As Double
Dim ZPOS As Double
Dim DMN As Double
MsgBox (" >>> 補間誤差自動計算 <<< ")
MsgBox (" >>> 初期値入力します <<< ")
ZPS = InputBox(">>> ステップを入力してください<<<")
ZPOS = Sheet1.Cells(22, 4).Value
DMN = ZPOS / ZPS
Sheet1.Cells(23, 6).Value = DMN
End Sub

ここでDMNの値を四捨五入したいです。

またこれとは別に切上げ、切捨ても教えていただけるとありがたいです。

Aベストアンサー

DMN = Application.WorksheetFunction.Round(ZPOS / ZPS, 0)
で、四捨五入
DMN = Application.RoundDown(ZPOS / ZPS, 0)
で切り捨て
DMN = Application.RoundUp(ZPOS / ZPS, 0)
で切り上げです。

引数で、対象桁を変更できます。

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

Q【VBA】クリックする毎にセル色が変わる

Excelのセルをクリックするたびに、「色なし→赤→青→黄→黒→色なし」などのように色を順番に変更する方法があれば教えてください。
下記のSelectionChangeコードで、「色なし→黄→色なし」にできるのですが、複数の色を順番に表示させたいと思っております。
お手数お掛けいたしますが、よろしくお願い致します。

=================================================
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim 各セル As Range
Set Target = Intersect(Target, Range("A1:A5"))

If Target Is Nothing Then Exit Sub

For Each 各セル In Target
With 各セル
If .Value = 1 Then
.ClearContents
.Interior.Pattern = xlPatternNone
Else
.Value = 1
.Font.ColorIndex = 6
.Interior.ColorIndex = 6
End If
End With
Next
End Sub

=================================================

Excelのセルをクリックするたびに、「色なし→赤→青→黄→黒→色なし」などのように色を順番に変更する方法があれば教えてください。
下記のSelectionChangeコードで、「色なし→黄→色なし」にできるのですが、複数の色を順番に表示させたいと思っております。
お手数お掛けいたしますが、よろしくお願い致します。

=================================================
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim 各セル As Range
Set Target = Intersect(Target, Range("A1:A5"))

...続きを読む

Aベストアンサー

Select Caseですべての場合に分けてセル色を変更すればよいのではないでしょうか。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim 各セル As Range
Set Target = Intersect(Target, Range("A1:A5"))
If Target Is Nothing Then Exit Sub
For Each 各セル In Target
With 各セル
Select Case .Interior.ColorIndex
Case xlPatternNone
.Interior.ColorIndex = 3
Case 3
.Interior.ColorIndex = 5
Case 5
.Interior.ColorIndex = 6
Case 6
.Interior.ColorIndex = 1
Case 1
.Interior.ColorIndex = xlPatternNone
End Select
End With
Next
End Sub

Select Caseですべての場合に分けてセル色を変更すればよいのではないでしょうか。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim 各セル As Range
Set Target = Intersect(Target, Range("A1:A5"))
If Target Is Nothing Then Exit Sub
For Each 各セル In Target
With 各セル
Select Case .Interior.ColorIndex
Case xlPatternNone
.Interior.ColorIndex = 3
Case 3
.Interior.ColorIndex = 5
Case 5
.Interior.ColorIndex = 6
Case 6
.Interior.ColorIndex = 1
Case 1
.In...続きを読む

QCommandButtonのCaptionを変化させたい

VBAを始めたばかりの初心者です。
sheet1にコントロール(CommandButton)を10個ほど配置しました。各CommandButtonのCaptionにsheet2~11のセルA1の値を表示させたいと思っています(このA1の値は変化します)。
Private Sub Workbook_Open()
Dim Mrang1 As String
Mrang1 = Worksheet(2).Range("a1").Value
CommandBottan1.Caption = Mrang
End Sub
上記のようなものを考えてみましたが、ダメでした。
根本的に何か間違っているのでしょうか。
よろしくお願いします。

Aベストアンサー

質問の真意というか、困っている状況が良く伝わりませんが推定して
私も試行してみました。上手く行かない原因は「イベント」の捕らえ方
選び方にあると思います。イベントとは「クリックしたら」とか「ワークブックを開いたら」とか言うプログラムが実行される「きっかけ」のことですよね。
以下回答を済ませてから良く見ると質問はコマンドボタン
を貼りつけるものでした。済みません置き換えてください。変わりはないと思います。
新規WorkbookのSheet1を開き、メニューバーの右余白部分で
右クリック-コントロールツールボックス-ラベル(Aの表示のあるもの)とクリックし、ラベルをSheet1上にドラッグして貼りつけました。
それを3回繰り返し3つラベルを貼りつけました。その後
ツール-マクロ-VisualBasicEditor-コードをクリックします。
イベントとしてWorksheetのActivateを選びました。
コーディングの本体は貴殿と同じです。
Private Sub Worksheet_Activate()
Label1.Caption = Worksheets("sheet1").Range("a1")
Label2.Caption = Worksheets("sheet2").Range("a1")
Label3.Caption = Worksheets("sheet3").Range("a1")
End Sub
そしてメニューの「実行」をクリックします。その後Worksheetに切り替えてSheet2のA1に文字列値(ロとする)を入れ、Sheet3のA1に文字列値(ハとする)を入れSheet1に戻ります。最後にSheet1のA1に文字列(イ)値を入れると、Sheet1の3つのラベルの文字がそれぞれイ、ロ、ハになります。
Sheet2を開いてA1の値を変えたり、Sheet3を開いてA1の値を変えたりして、Sheet1に戻るとSheet1の3つラベルは変えたように変わります。
ただこのWorksheetはSheet1を指すようで、Sheet2のA1に「ロ」を
入れた時やSheet3のA1に「ハ」を入れた時に、Sheet1のラベル
が変わるのではないようです。
しかし貴殿の意図のケースではSheet1にもどった時に変わっていれ
ば差し支えないのではないでしょうか。

質問の真意というか、困っている状況が良く伝わりませんが推定して
私も試行してみました。上手く行かない原因は「イベント」の捕らえ方
選び方にあると思います。イベントとは「クリックしたら」とか「ワークブックを開いたら」とか言うプログラムが実行される「きっかけ」のことですよね。
以下回答を済ませてから良く見ると質問はコマンドボタン
を貼りつけるものでした。済みません置き換えてください。変わりはないと思います。
新規WorkbookのSheet1を開き、メニューバーの右余白部分で
右クリック-...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング