ウォーターサーバーとコーヒーマシンが一体化した画期的マシン >>

ワークシート上に配置したチェックボックスですが、
フォームから挿入したものなら
Sub TEST01()
ActiveSheet.CheckBoxes.Value = xlOn
End Sub
で、全てのチェックボックスがオンになります。

コントロールツールボックスから貼り付けたチェックボックスの場合はどのように記述するのでしょうか?

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

A 回答 (6件)

エキスパートさん、こんにちは。



KenKen_SPさんにお任せすれば解決でしょうが、横からちょこっとお節介。。

>Sheets("Sheet1").OLEObject(CheckBox & i).Value = x

Sheets("Sheet1").OLEObjects("CheckBox" & i).Object.Value = x

一行のコードに3ヶ所のミス。
やりましたね、日本新記録!!。(^o^)/~~
 
    • good
    • 0
この回答へのお礼

> やりましたね、日本新記録!!。(^o^)/~~

阿茶!
前の2つはほんとお恥ずかしい・・・。
最後の1つは、Objectと入れなければいけないんですね。でもどうしてなんでしょう?
Sheets("Sheet1").OLEObjects("CheckBox" & i)だけでオブジェクトなんじゃないんですか?

お礼日時:2007/04/30 15:37

こんばんは。



>きっとシート上では、ActiveX コントロールではなく、フォームのチェックボックスなどを使ったほうがいいということなんでしょうね。

私のは役に立たない話かもしれませんが、

フォームのコントロールって、もともと、Ver.5 スタイルで、ダイアログシートで使うものですね。それは、それなりに便利ですし、MS-Wordのフィールドと良く似ていますし、表現力もあります。

そういうわけで、コントロールツール側とフォーム側とが、両方共存している形で、10年以上も続いているのですが、MS側は、どういう考えを持っているのか、はっきりは読めないですね。ただ、MSは、突然に換えるということを過去してきましたから、安心はできません。

確かに、いまひとつ、OLEObjectは、一般的には使いづらいような気がします。Shapes コレクションからも取れるからこそかもしれませんが。

私は、なるべくは、古い形式で書く方法は、避けようとは思っているのですが、フォームツールは、時に、便利だと思うことは多いですね。

ゆくゆくは、ダイアログシートと共に、フォーム側が、廃れていく運命にあるのではないか、と思っています。しかし、マクロにしても、古い形式のものが、Excel 2007 でも、残っているわけです。ある方が、ここのカテゴリで削除覚悟(結果は削除された)で質疑応答とは関係がなく書いていた、古い形式のコードや書き方は撤廃すべきだとは、本筋の論理としては正しいけれど、その実態を知っていればこそ、他人には、一方的に勧められません。少なくとも、現状で使えるものは、そのスタイルにこだわらず、すべて使うというのは、誰に遠慮することもなく、あたりまえのことですからね。
    • good
    • 0
この回答へのお礼

Wendy02さん、いつもありがとうございます。
やはり、OLEObjectを使いこなせないとまずいですね。
これから少しずつ勉強します。

先日エクセル2007に触る機会があったのでさっそく試したところ、ダイアログシートを使うと2007形式では保存が出来なくなっていました!(2003互換形式ではもちろん保存OKですが)
いよいよ、苦手なユーザーフォームにも取り組まなくてはならないようです。ふぅ~。

お礼日時:2007/05/02 12:32

> Sheets("Sheet1").OLEObjects("CheckBox" & i)だけでオブジェクト


> なんじゃないんですか?

Sheets("Sheet1").OLEObjects("CheckBox" & i) で取得されるのは、
オブジェクトには違いありませんが、コントロールそのものではなく、
OLEObject です。

 # ややこしいですね...

【参考】Excel VBA ヘルプ
[シートで ActiveX コントロールを使用する]

難しい事が書いてありますが、要は CheckBox コントロールの Value
や Caption といったコントロール特有のプロパティーを操作したい
場合はまず

> Sheets("Sheet1").OLEObjects("CheckBox" & i)

で取得した OLEObject に対して、さらに Object プロパティを使用し
て実際の CheckBox コントロールオブジェクトを取得してから...
といった2段階の手続きを取る必要があるということです。
    • good
    • 1
この回答へのお礼

有難うございます。
わかりました。きっとシート上では、ActiveX コントロールではなく、フォームのチェックボックスなどを使ったほうがいいということなんでしょうね。

お礼日時:2007/05/01 10:23

こんにちは。



少し、ちゃんとした書き方をすれば、こうなりますね。

Sub TestSample()
Dim o As Object
 For Each o In ActiveSheet.OLEObjects
 If TypeOf o.Object Is MSForms.CheckBox Then
    o.Object.Value = True
 End If
 Next o
End Sub
    • good
    • 0
この回答へのお礼

いつもありがとうございます。
TypeOf関数ですか、はじめて知りました。ありがとうございます。
勉強になります。

お礼日時:2007/04/30 15:47

CheckBox コントロールだけのコレクションを取得するプロパティーが


ないみたいですね。For ~ Next で回すしかないと思います。
    • good
    • 2
この回答へのお礼

ありがとうございます。
For ~ Next で回そうと、

x = Sheets("Sheet1").CheckBox1.Value
MsgBox x
For i = 2 To 11
Sheets("Sheet1").OLEObject(CheckBox & i).Value = x
Next

としてもエラーです。

お礼日時:2007/04/30 14:26

CheckBox1.Visible = True


で、いいのかな?。
    • good
    • 0
この回答へのお礼

> CheckBox1.Visible = True

一個のときはそれでいいのですが、例えば11個あった場合はどうでしょうか?

x = Sheets("Sheet1").CheckBox1.Value
MsgBox x
For i = 2 To 11
Sheets("Sheet1").CheckBox(i).Value = x
Next

では実行時エラーなんです。

お礼日時:2007/04/30 14:22

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

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

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

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

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

QExcelのVBA・チェックボックスの操作を教えて下さい。

ExcelのVBAで、チェックボックス(ActiveXコントロール)を使用し、各セル毎に設定する方法を教えてください。

はじめまして、VBA初心者です。
下記のように、各セルにチェックボックスを設け、VBA(セル内を値のみにする<Selection.Value = Selection.Value>)で各セル毎にチェックボックスが機能するようにしたいのですが、どのようにすれば宜しいでしょうか?

現状下記のようにチェックボックスを配置しております。
・A列には各番号が振ってあります。
・B列にチェックボックスを配置。
・C列に関数<=Today()>を使用して、設定してあります。
A B C
1 □ 2/23
2 □ 2/23
3 □ 2/23
4 □ 2/23
5 □ 2/23

VBA内での指示は以下になります。
Selection.Value = Selection.Value

ひとつのチェックボックスにはVBAを設定することはできたのですが、各チェックボックス(B2-B5以下)への設定が難航している状態です。

ちなみに下記VBAを設定しました。

Sub 関数値変換()

Range("c7").Select

Selection.Value = Selection.Value

End Sub

※また可能であれば、VBAと関数にて(もしくはいずれかで)、チェックボックスを使用時、TRUEであれば→selection.value、FALSEであれば元の関数に戻す、が行える方法を教えていただけますか。

大変申し訳ございませんが、皆様のお力添えのほどよろしくお願いします。

ExcelのVBAで、チェックボックス(ActiveXコントロール)を使用し、各セル毎に設定する方法を教えてください。

はじめまして、VBA初心者です。
下記のように、各セルにチェックボックスを設け、VBA(セル内を値のみにする<Selection.Value = Selection.Value>)で各セル毎にチェックボックスが機能するようにしたいのですが、どのようにすれば宜しいでしょうか?

現状下記のようにチェックボックスを配置しております。
・A列には各番号が振ってあります。
・B列にチェックボックスを配置。
・C列に関数...続きを読む

Aベストアンサー

こんにちは。

> ExcelのVBAで、チェックボックス(ActiveXコントロール)を使用し、各セル毎に設定する方法を教えてください。

「初心者」となると、
ActiveXコントロールの扱いはまともにやるとなると結構難しいです。
易しい方法もありますが手数が掛かります。
もしもフォームコントロールのチェックボックスでも良ければ、
(ActiveXコントロールに比べてデザイン性・機能性は落ちますが)
かなり簡単に出来ます。
なので、
◆易しいけど手数が掛かる◆ActiveXコントロールを使用する例◆初級向き◆
◆簡単な◆フォームコントロールを使用する例◆初心者向き◆
◆少し難しい◆ActiveXコントロール+クラスを使用する例◆初中級向き◆
の3例挙げておきます。
どれを奨めるでもないので、自分に合ったやり方を見つけてみてください。

その前に、処理内容に関する共通したポイントについて。
まず、チェックボックスをセルに貼り付けるような手順等で
正しい位置(コントロールの左上がセルから食み出さない位置)
に配置してあるならば、
チェックボックスを配したセルのひとつ右のセルへの参照として
 checkbox.TopLeftCell.Offset(, 1) ...のように
一様な多数のチェックボックスに共通した記述が可能になります。
つまりこれは、チェックボックス毎ひとつひとつに
セル範囲を指定する必要はない、ということです。
次に、現在の日付を定数値で設定するだけなら
VBAにはDate()関数があるので
 checkbox.TopLeftCell.Offset(, 1).Value = Date
のような記述が可能です。
> Selection.Value = Selection.Value
> TRUEであれば→selection.value、FALSEであれば元の関数に戻す、が行える方法
Trueであれば現在の日付を定数値で、FalseであればExcel関数"=TODAY()"、
チェックボックスが押されて値が変わったタイミングで
チェックボックスが配されたセルのひとつ右のセルに対して処理をする。
という記述は、条件判別さえ出来れば、さほど難しいものではないです。

問題は、多数あるチェックボックスと
一様な(隣のセルを操作するだけの)処理とを
どのように連動させるか、という点に集約されます。

◆易しいけど手数が掛かる◆ActiveXコントロールを使用する例◆初級向き◆
配置済みのActiveX.チェックボックスはそのままで。
チェックボックス毎にひとつずつプロシージャを書きます。
◆以下、チェックボックスを配置したシートの[シートモジュール]
' ' ==================
Private Sub CheckBox1_Change()
  関数値変換 CheckBox1
End Sub
Private Sub CheckBox2_Change()
  関数値変換 CheckBox2
End Sub
Private Sub CheckBox3_Change()
  関数値変換 CheckBox3
End Sub
' ' … CheckBoxの名前2ヶ所違うだけの同じ記述の繰り返し …
Private Sub CheckBox99_Change()
  関数値変換 CheckBox99
End Sub
' ' ----------------------------------------
Private Sub 関数値変換(oCx As MSForms.CheckBox)
  With oCx
    If .Value = True Then
      .TopLeftCell.Offset(, 1).Value = Date
    Else
      .TopLeftCell.Offset(, 1).Formula = "=today()"
    End If
  End With
End Sub
' ' ==================
プロシージャをコピーして複製を必要な数作り
チェックボックスの名前を慎重に正確に書換えていく
作業が必要です。◆◆

◆簡単な◆フォームコントロールを使用する例◆初心者向き◆
配置済みのActiveX.チェックボックスはすべて破棄します。
◆まず、[標準モジュール]に以下の記述をコピペしてシート名を正しく指定します。
' ' ==================
Sub CheckBoxes_Change()
  With Sheets("Sheet1").Shapes(Application.Caller) ' ★シート名を正しく指定!!
    If .DrawingObject.Value = 1 Then
      .TopLeftCell.Offset(, 1).Value = Date
    Else
      .TopLeftCell.Offset(, 1).Formula = "=today()"
    End If
  End With
End Sub
' ' ==================
◆次に、B1セルにフォームコントロールのチェックボックスを挿入し
右クリックで[マクロの登録]
→表示されたリストから"CheckBoxes_Change"をクリックして選択
→[OK]ボタン
必要なら、位置やサイズの微調整やキャプションや書式の変更を加える。
出来上がったチェックボックスをコピーし
B2、B3、、、と順番に
<次のセルを選択(クリック)して→貼付け>を繰り返して
必要な数のチェックボックスを配置する。これだけでOKです。◆◆

◆少し難しい◆ActiveXコントロール+クラスを使用する例◆初中級向き◆
配置済みのActiveX.チェックボックスはそのままで。
◆まず、[ThisWorkbookモジュール]に以下の記述をコピペしてシート名を正しく指定します。
次回からブックを開いた時に自動で(または直接手動で)
Workbook_Open イベントプロシージャを実行することで
チェックボックスと一様な(隣のセルを操作するだけの)処理とを
連動させるようにVBAが設定してくれます。
(デザインモード移行やエラー終了の場合は
 再度、Workbook_Openを実行して復旧する必要があります)
' ' ==================
Private cClass As Collection
' ' ----------------------------------------
Private Sub Workbook_Open()
Dim o As OLEObject
  Set cClass = New Collection
  For Each o In Sheets("Sheet1").OLEObjects ' ★シート名を正しく指定!!
    If TypeName(o.Object) = "CheckBox" Then
      If o.TopLeftCell.Column = 2 Then ' ★チェックボックスの列位置を正しく指定!!
        cClass.Add New Class1, o.Name
        Call cClass(o.Name).SetEv(o.Object)
      End If
    End If
  Next
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim i As Long
  If cClass Is Nothing Then Exit Sub
  For i = 1 To cClass.Count
    Call cClass(1).CancelEv
    cClass.Remove 1
  Next i
  Set cClass = Nothing
End Sub
' ' ==================

◆次に、
VBE(VBA編集画面)で、
メニュー[挿入][クラスモジュール]→新しく[Class1モジュール]が挿入される
[Class1モジュール]に以下の記述をコピペします。
' ' ==================
Private WithEvents myCx As MSForms.CheckBox
' ' ----------------------------------------
Private Sub myCx_Change()
  With myCx
    If .Value = True Then
      .TopLeftCell.Offset(, 1).Value = Date
    Else
      .TopLeftCell.Offset(, 1).Formula = "=today()"
    End If
  End With
End Sub
Sub SetEv(o As MSForms.CheckBox)
  Set myCx = o
End Sub
Sub CancelEv()
  Set myCx = Nothing
End Sub
' ' ==================
多数のコントロールに同じ処理を実行させるには
このようにクラスモジュールを用いるのが有効です。◆◆
以上です。

こんにちは。

> ExcelのVBAで、チェックボックス(ActiveXコントロール)を使用し、各セル毎に設定する方法を教えてください。

「初心者」となると、
ActiveXコントロールの扱いはまともにやるとなると結構難しいです。
易しい方法もありますが手数が掛かります。
もしもフォームコントロールのチェックボックスでも良ければ、
(ActiveXコントロールに比べてデザイン性・機能性は落ちますが)
かなり簡単に出来ます。
なので、
◆易しいけど手数が掛かる◆ActiveXコントロールを使用する例◆初級向き◆
◆...続きを読む

QExcel VBAでCheckboxの名前を変数にとって値を調べたい

Excel VBAでCheckboxの名前を変数にとって値を調べたいのです.
シートにCheckboxがたくさん貼ってあり名前とOn,Offを調べたいのですが下記では名前は調べられてもOn,Offが確認できないのですが
On,Offを別変数にとる場合タイプはなににすればいいでしょうか。

たとえば
dim i as integer
dim checkname()
dim checvalue() as ????
i=0
for i=1 to 2
If Mid(ActiveSheet.Shapes(i).Name, 1, 5) = "Check" Then
i=i+1
redim preserve checkname(i)
checkname(i)=ActiveSheet.Shapes(i).Name
redim preserve checvalue(i)
checvalue(i)=ActiveSheet.Shapes(i).value <---これではエラー
end if
next i

Aベストアンサー

Shape、OleObjectなど知らなくても使える方法は
CheckBoxのLinkedCellプロパティを使うことです。

CheckBox1 の LinkedCell を セルF1
CheckBox2 の LinkedCell を セルF2
CheckBox3 の LinkedCell を セルF3 にセットしておくと

CheckBoxのOn、OffがF1~3のセルに表示されますのでそれを使えば簡単ですね
'-------------------------------------------
Sub test222()
 Dim N As Integer
 Dim myValue(3)
 For N = 1 To 3
   myValue(N) = Cells(N, "F").Value
 Next N
End Sub
'------------------------------------------

それからObjectの意味が分かって使うなら、次のコード。
(LindedCellプロパティは使用しない)
'-------------------------------------------------
Sub test333()
 Dim N As Integer
 Dim myValue(3)
 For N = 1 To 3
  myValue(N) = ActiveSheet.OLEObjects("CheckBox" & N).Object.Value
 Next N
End Sub
'--------------------------------------------------

以上。
 

Shape、OleObjectなど知らなくても使える方法は
CheckBoxのLinkedCellプロパティを使うことです。

CheckBox1 の LinkedCell を セルF1
CheckBox2 の LinkedCell を セルF2
CheckBox3 の LinkedCell を セルF3 にセットしておくと

CheckBoxのOn、OffがF1~3のセルに表示されますのでそれを使えば簡単ですね
'-------------------------------------------
Sub test222()
 Dim N As Integer
 Dim myValue(3)
 For N = 1 To 3
   myValue(N) = Cells(N, "F").Val...続きを読む

Qcheckboxの値の取得方法

教えてください (excel2010)
checkboxをセルRange("C1")から下方に10個作成しています。(下方を参照)

質問は2点あります。

[質問1]  10個のセルにcheckboxは作成されるのですが、この後、これらに設定したセルの値(Check on/off)を判定するには、どのようコーディングすればよいのでしょうか?

[質問2] 10個のセル作成時、当初 ".LinkedCell=" で指定したセルに「True/False」が表示されていましたが、現在以下の処理を行っても「True/False」が表示されません。
確認事項や対処方法にお心あたりがあれば、ご教授願います。 

'------------------------------------------ checkbox 10個作成
Dim myChk As Object
Dim i As Long
Dim 個数 As Long
Dim 開始セル As Range

個数 = 10               'チェックボックス作成数
Set 開始セル = Range("C1")   'チェックボックス作成の開始セル位置

For i = 0 To 個数 - 1
With StartCell.Offset(i)
Set myChk = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CheckBox.1", Link:=False, _
DisplayAsIcon:=False, _
Left:=.Left, Top:=.Top, _
Width:=.Width, Height:=.Height)
End With
With myChk
.LinkedCell = 開始セル.Offset(i, 1).Address
.Object.Caption = ""
.Object.Value = False
End With
Next

教えてください (excel2010)
checkboxをセルRange("C1")から下方に10個作成しています。(下方を参照)

質問は2点あります。

[質問1]  10個のセルにcheckboxは作成されるのですが、この後、これらに設定したセルの値(Check on/off)を判定するには、どのようコーディングすればよいのでしょうか?

[質問2] 10個のセル作成時、当初 ".LinkedCell=" で指定したセルに「True/False」が表示されていましたが、現在以下の処理を行っても「True/False」が表示されません。
確認事項や対処方法にお心あたりが...続きを読む

Aベストアンサー

>教えていただいたスクリプトを実行すると、列1から列20にチェックボックスが作成されますが、

No2のコードでしたら、列ではなく行ですね。あと20個ではなく10個かと。



>特定のセル(たとえばセルA3)が「現在、checkされているか否か」を判断するのは

A3の何をチェックしたいかによって処理が異なります。
以下の3パターンを考えてみました。

(1)セルA3に配置されているチェックボックスの状態を判定
 セルA3のTopとLeftの値と、チェックボックスのTopとLeftの値との差分を全て調べ、
 差分が一番小さい(A3付近にあるチェックボックス)を取得します

(2)A3セルがリンクセルとしてリンクしているチェックボックスの状態を判定
 LinkedCellを調べてA3であるかを判定して取得します

(3)A3セリがリンクセルとしてリンクセルの状態を判定
 A3セルに表示されている「TRUE」「FALSE」を判定して取得します



>どのような処理を書けばよいのでしょうか?

以下のVBAコードで上記3パターンで取得しています



■VBAコード

Sub Macro2()
Dim i As Integer
Dim sabun As Double
Dim bk_sabun As Double
Dim idx As Integer
Dim flag As Integer

'-------------------------------------------------------
'(1)A3セルにあるチェックボックスの状態を取得
With ActiveSheet
  'アクティブシート上のOLEObjectに対して処理
  For i = 1 To .OLEObjects.Count
    'チェックボックスであるか判定
    If TypeName(.OLEObjects(i).Object) = "CheckBox" Then
      'チェックボックスのLeft、Topとセル"A3"のLeft、Topとの差分を取得
      sabun = Abs(.OLEObjects(i).Left - .Range("A3").Left) _
        + Abs(sabun + .OLEObjects(i).Top - .Range("A3").Top)
      '差分が控えの差分より小さければ、控えの差分を更新して要素を記憶
      If i = 1 Then bk_sabun = sabun
      If bk_sabun >= sabun Then bk_sabun = sabun: idx = i
    End If
  Next i
  '要素idxのチェックボックスの状態を判定
  If .OLEObjects(idx).Object.Value Then
    MsgBox .OLEObjects(idx).Object.Caption & "はチェックされています", vbOKOnly, "パターン(1)"
  Else
    MsgBox .OLEObjects(idx).Object.Caption & "はチェックされていません", vbOKOnly, "パターン(1)"
  End If
End With

'-------------------------------------------------------
'(2)リンクセルがA3であるかを判定して状態を取得
With ActiveSheet
  'アクティブシート上のOLEObjectに対して処理
  For i = 1 To .OLEObjects.Count
    'チェックボックスであるか判定
    If TypeName(.OLEObjects(i).Object) = "CheckBox" Then
      'リンクセルがA3のチェックボックスの状態
      If .OLEObjects(i).LinkedCell = "A3" Then
        'フラグを立てる
        flag = 1
        'ループを抜ける
        Exit For
      End If
    End If
  Next i
  'チェックボックスが見つかったか見つかっていないかflagで判定
  If flag Then
    'チェックボックスの状態を判定
    If .OLEObjects(i).Object.Value Then
      MsgBox .OLEObjects(i).Object.Caption & "はチェックされています", vbOKOnly, "パターン(2)"
    Else
      MsgBox .OLEObjects(i).Object.Caption & "はチェックされていません", vbOKOnly, "パターン(2)"
    End If
  Else
    MsgBox "対象のセルがリンクされているチェックボックスが見つかりません", vbOKOnly, "パターン(2)"
  End If
End With

'-------------------------------------------------------
'(3)セル"A3"の値("true" or "false")で判定
If Range("A3").Value Then
  MsgBox Range("A3").Address(False, False) & "はチェックされています", vbOKOnly, "パターン(3)"
Else
  MsgBox Range("A3").Address(False, False) & "はチェックされていません", vbOKOnly, "パターン(3)"
End If

End Sub

>教えていただいたスクリプトを実行すると、列1から列20にチェックボックスが作成されますが、

No2のコードでしたら、列ではなく行ですね。あと20個ではなく10個かと。



>特定のセル(たとえばセルA3)が「現在、checkされているか否か」を判断するのは

A3の何をチェックしたいかによって処理が異なります。
以下の3パターンを考えてみました。

(1)セルA3に配置されているチェックボックスの状態を判定
 セルA3のTopとLeftの値と、チェックボックスのTopとLeftの値との差分を全て調べ、
 差分が一番小さい...続きを読む

QExcel2007 でのチェックボックスの名称

Excel2007 でフォームコントロールのチェックボックスのオブジェクト名のつけ方を教えてください。

普通にチェックボックスをつくって、プロパティを表示してもオブジェクト名をつけれるところがありません。

ActiveXのチェックボックスだと該当するものがでてきます。

やり方を教えて頂ければ助かります。

Aベストアンサー

ぁ、失礼。
[オブジェクトの選択]は2007では[ホーム]タブの[編集]-[検索と選択]にあります。
さらにその下の[オブジェクトの選択と表示]メニューを使うと、
このメニューからでもオブジェクト名を変更する事ができます。

ついでにVBAで名前を設定する例。
'選択して
If TypeName(Selection) = "CheckBox" Then
  Selection.Name = "Check_1"
End If

'あるいはインデックス順にLoopして連番、またはTopLeftCell情報の利用、など
Dim cb As CheckBox
Dim i As Long
For Each cb In ActiveSheet.CheckBoxes
  i = i + 1
  cb.Name = "Check_" & i
  'cb.Name = "Check_" & cb.TopLeftCell.Address(0, 0)
Next

Qエクセル・VBA CheckBoxのオブジェクト名に変数を使うことは可能でしょうか?

CheckBoxが
CheckBox1,CheckBox2,…6
まであり、

If CheckBox1.Value = True Then…

とするときに、数字「1」の部分を変数にしたいのですが、どのようにすれば可能でしょうか。
よろしくお願いします。

Aベストアンサー

> ・ワークシート上のもの(ツールバー[コントロール ツールボックス]から)
> になります。

#3-4 は Userform の CheckBox に対する回答です。[コントロール ツールボックス]
だったのですね。

今回は For でループさせてませんが、必要なら今までの回答を応用して下さい。

  i = 1
  ' Cstr 関数は数値を文字列に変換する
  sCtrlName = "CheckBox" & CStr(i)
  
  ' シートモジュールでの Me はワークシート自信を指す
  If Me.OLEObjects(sCtrlName).Object.Value = True Then
    MsgBox sCtrlName & "の状態は True です"
  Else
    MsgBox sCtrlName & "の状態は False です"
  End If

やってみてよく分からなければ、補足して下さい。

Qエクセルマクロでチェックボックスを作成する方法

下記の方法でExcel起動時にE1~E50にチェックボックスを
作成しています。
(F列にはチェックの結果を表示させています)

Sub Auto_open()
Dim i As Integer
Dim cbx As CheckBox
With Selection.Parent
For i = 1 To 50
Set cbx = .CheckBoxes.Add(Left:=Cells(i, 5).Left, _
Top:=Cells(i, 5).Top, _
Height:=Cells(i, 5).Height, _
Width:=Cells(i, 5).Width)
cbx.Text = ""
cbx.LinkedCell = "F" & i
cbx.Display3DShading = True
Next i
End With
Set cbx = Nothing
End Sub

チェックボックスにチェックされたら
チェックされた行のA~Dの色を変更したいのですが、
どのようにやるのか分からなく困っています。
(チェックボックスのクリックイベントを50個つくるわけにも
いかないですし・・・)

何か少しでもアイデア等ございましたら
ご教授お願いします。

下記の方法でExcel起動時にE1~E50にチェックボックスを
作成しています。
(F列にはチェックの結果を表示させています)

Sub Auto_open()
Dim i As Integer
Dim cbx As CheckBox
With Selection.Parent
For i = 1 To 50
Set cbx = .CheckBoxes.Add(Left:=Cells(i, 5).Left, _
Top:=Cells(i, 5).Top, _
Height:=Cells(i, 5).Height, _
Width:=Cells(i, 5).Width)
cbx.Text = ""
...続きを読む

Aベストアンサー

方法1:
Sub Macro1()
 Dim cbx As CheckBox

 Set cbx = ActiveSheet.CheckBoxes.Add( _
  Top:=Range("E1").Top, _
  Left:=Range("E1").Left, _
  Width:=Range("E1").Width, _
  Height:=Range("E1").Height)
 cbx.Text = ""
 cbx.Display3DShading = True
 cbx.OnAction = "チェック1_Click"

 Range("E1:E50").FillDown
End Sub

Sub チェック1_Click()
 With ActiveSheet.Shapes(Application.Caller)
 .TopLeftCell.Offset(0, -4).Resize(1, 4).Interior.ColorIndex = _
 IIf(.ControlFormat.Value = 1, 4, xlNone)
End With
End Sub
とかなんとか。


方法2:
>F列にはチェックの結果を表示させています
これを拾って反応する条件付き書式をA:D列に施しておくのでも。

方法1:
Sub Macro1()
 Dim cbx As CheckBox

 Set cbx = ActiveSheet.CheckBoxes.Add( _
  Top:=Range("E1").Top, _
  Left:=Range("E1").Left, _
  Width:=Range("E1").Width, _
  Height:=Range("E1").Height)
 cbx.Text = ""
 cbx.Display3DShading = True
 cbx.OnAction = "チェック1_Click"

 Range("E1:E50").FillDown
End Sub

Sub チェック1_Click()
 With ActiveSheet.Shapes(Application.Caller)
 .TopLeftCell.Offset(0, -4).Resize(1, 4).Interior.ColorIndex = ...続きを読む

QフォームのCheck boxとOLEObjectのCheckboxのマクロの違い?

エクセル2003です。
ワークシート上に複数個のチェックボックスを配置し、オンの場合、その左隣のセルの値を返すマクロを作成する場合についての質問です。
普段はフォームのCheck boxを使っています。
フォームのCheck boxなら
Sub ChkBx()
With ActiveSheet.CheckBoxes(Application.Caller)
If .Value = xlOn Then
MsgBox .TopLeftCell.Offset(0, -1).Value
End If
End With
End Sub
と、標準モジュールに一つだけプロシージャを書いて、複数個のCheck boxに同一のマクロを登録すれば簡単に出来ます。
ところがこれをOLEObjectのCheckboxでやってみようと思ったところ、フォームのように一つのプロシージャを使いまわすことができず、シートモジュールに以下のように各Checkboxごとのマクロを書かなくてはいけないようです。

Private Sub CheckBox1_Click()
With OLEObjects("CheckBox1")
If .Object.Value Then
MsgBox .TopLeftCell.Offset(0, -1).Value
End If
End With
End Sub

Private Sub CheckBox2_Click()
With OLEObjects("CheckBox2")
If .Object.Value Then
MsgBox .TopLeftCell.Offset(0, -1).Value
End If
End With
End Sub

Private Sub CheckBox3_Click()
With OLEObjects("CheckBox3")
If .Object.Value Then
MsgBox .TopLeftCell.Offset(0, -1).Value
End If
End With
End Sub

3つや4つくらいならどうってことはないのですが十数個もあるとかなり面倒です。
OLEObjectのCheckboxでももっと簡単にする方法はないのでしょうか?
それともわたしが何かOLEObjectのCheckboxの使い方について思い違いをしているのでしょうか?
ご教示をお願いいたします。

エクセル2003です。
ワークシート上に複数個のチェックボックスを配置し、オンの場合、その左隣のセルの値を返すマクロを作成する場合についての質問です。
普段はフォームのCheck boxを使っています。
フォームのCheck boxなら
Sub ChkBx()
With ActiveSheet.CheckBoxes(Application.Caller)
If .Value = xlOn Then
MsgBox .TopLeftCell.Offset(0, -1).Value
End If
End With
End Sub
と、標準モジュールに一つだけプロシージャを書いて、複数個のCheck boxに同...続きを読む

Aベストアンサー

プロシージャChkBkに引数を持たしたらどうでしょうか。

'----------------------------------
Private Sub CheckBox1_Click()
Call ChkBx(1)
End Sub

Private Sub CheckBox2_Click()
Call ChkBx(2)
End Sub
'-----------------------------------

Sub ChkBx(N)
 With ActiveSheet.OLEObjects("CheckBox" & N)
   If .Object.Value = True Then
     MsgBox .TopLeftCell.Offset(0, -1).Value
   End If
 End With
End Sub

'---------------------------------------------

しかしこれでもコントロールが数十もあると大変ですので
クラスを使用するといいでしょう。

”VBA コントロール 疑似配列”などをキーにして検索すると
サンプルコードがたっぷりヒットします。
 
質問者のレベルであれば当然クラスに挑戦することになるでしょう。。。(^^;;;
 

プロシージャChkBkに引数を持たしたらどうでしょうか。

'----------------------------------
Private Sub CheckBox1_Click()
Call ChkBx(1)
End Sub

Private Sub CheckBox2_Click()
Call ChkBx(2)
End Sub
'-----------------------------------

Sub ChkBx(N)
 With ActiveSheet.OLEObjects("CheckBox" & N)
   If .Object.Value = True Then
     MsgBox .TopLeftCell.Offset(0, -1).Value
   End If
 End With
End Sub

'---------------------------------------------
...続きを読む

QVBAでのチェックボックスの自動作成

今、ワークシートに入れてあるリストを、インプットボックスでワークシートで指定して読み込ませて処理しています。
今後、複数のリスト(ワークシート)を指定する為、ワークシートの数(ワークシート名も入力して)だけユーザーフォームに自動でチェックボックスを作成するマクロを作りたいと考えています。
ワークシートの数の取得、ワークシート名の取得方法、チェックボックスの値の取得方法はわかりましたが、ワークシートの数だけ、チェックボックスを適当なサイズで自動生成する方法がわからず困っています。
長いコードになると思いますが、よろしければコードも含めて教えてください、よろしくお願いします。

Aベストアンサー

コントロールを自動作成するときは次のようなちょと面倒なことを
考慮しなければいけなくなります。

ユーザーフォームのサイズ
チェックボックスの配置する位置、サイズ
何列に配置するか、その場合の位置。
一番の問題はシートの数が多くなってユーザーフォーム領域に配置できなくなったらどうするか、等々。

これらを考えると、質問の処理では項目がリスティングされるような
コンボボックスかリストボックスの使うのが適していると思いますが。

「うんにゃ、どうしてもチェックボックスの自動作成だぁ~」

ということなら、上記の問題点を考慮していない簡単なサンプルをアップします。

ま、コードはマクロ記録をとれば大体はわかります。
ただ、ユーザーフォームへコントロールを配置してもマクロ記録はとれませんから、
シート上にチェックボックスを配置するマクロ記録をとってください。

以上。

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

Qチェックボックスの箱のサイズとフォントサイズは変更できるの?

こんにちわ。

エクセル2000でチェックボックスを作成したのですが、
やや、小さいのでサイズを大きくしたいのです。
ボックスサイズ、ボックスの横に入れる文字の
フォントサイズは大きくできるのでしょうか?
もし、できるのなら方法を教えてください。

よろしくおねがいします。

Aベストアンサー

コントロールツールボックスのチェックボックスならプロパティにFontがあるので変更できます。

フォームのチェックボックスやオプションボタンのフォントサイズは変更できなかったと思いますが、変更したように見せかけはできます。使用上、特に問題はないと思います。(だからダイアログにフォントがない?)

チェックボックスの位置によって、
(1)チェックボックス(四角)がセルの中央にある場合
 チェックボックスのテキストを必要な長さの空白にしてしまいます。
 チェックボックス(四角)の右横のセルにチェックボックスの説明のテキストを入れます。
 セルの書式設定でフォントが変更できます。
(2)チェックボックス(四角)をセルの境目などにセットする場合
 チェックボックスのテキストを必要な長さの空白にしてしまいます。
 図形描写からテキストボックスを選択し、チェックボックスの説明のテキストを入れます。
 テキストボックスは『線なし』にしておきます。2行で表示したりもできます。
 チェックボックスとテキストボックスを重ねて、見た目を調節します。
 テキストボックスを選択し、右クリック→順序→最背面へ移動 とします。

ご参考に。

コントロールツールボックスのチェックボックスならプロパティにFontがあるので変更できます。

フォームのチェックボックスやオプションボタンのフォントサイズは変更できなかったと思いますが、変更したように見せかけはできます。使用上、特に問題はないと思います。(だからダイアログにフォントがない?)

チェックボックスの位置によって、
(1)チェックボックス(四角)がセルの中央にある場合
 チェックボックスのテキストを必要な長さの空白にしてしまいます。
 チェックボックス(四角)の右横のセ...続きを読む


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

人気Q&Aランキング