柔軟に働き方を選ぶ時代に必要なこと >>

すみません、初心者なのですが教えてください。

エクセルのシート上に複数のチェックボックスを貼り付け、
そのうちいくつかにチェックをいれ、
別のシートに同時にデータがとぶようにしたいのですが、
今はチェックボックスにチェックをつけた瞬間に
イベントが発生してしまいます。

どのような記述をすれば、まとめてデータが
とぶようになりますか。教えて頂けませんか。
よろしくお願いします。

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

A 回答 (2件)

別にコマンドボタンを貼り付けて


このボタンクリックで 「まとめてデータが
とぶ」

という仕様にしてはいかがですか?

この回答への補足

ご回答いただき、ありがとうございました。
もう少し詳しく教えて頂きたいのですが・・・

具体的には、
check box1・2・3と3つのチェックボックスを作成し、
check1・3にチェックをつけた後、別のコマンドボタンを
クリックすると、それぞれに対応するセルA1・A3の値が
別のシートのA1・A3に入力されるというマクロを組みたいと思っています。

何度もお手数ですが、おわかりになられましたら、
ご回答お願い致します。

補足日時:2008/02/04 19:46
    • good
    • 0

どのようなVBAマクロを組まれているかわからないのですが


チェックボックスとは別にコマンドボタンを作り
ボタンをクリックすることでチェックボックスの内容を反映する
マクロが起動するようにしたらどうでしょうか。

この回答への補足

ご回答いただき、ありがとうございました。
もう少し詳しく教えて頂きたいのですが・・・

具体的には、
check box1・2・3と3つのチェックボックスを作成し、
check1・3にチェックをつけた後、別のコマンドボタンを
クリックすると、それぞれに対応するセルA1・A3の値が
別のシートのA1・A3に入力されるというマクロを組みたいと思っています。

何度もお手数ですが、おわかりになられましたら、
ご回答お願い致します。

補足日時:2008/02/04 19:27
    • good
    • 0

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

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

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

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

QエクセルVBAで2種類のCheckboxについて

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

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

Aベストアンサー

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

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

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

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

一行のコードに3ヶ所のミス。
やりましたね、日本新記録!!。(^o^)/~~
 

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コントロールを使用する例◆初級向き◆
◆...続きを読む

Q(VBA)チェックボックスのclickのイベントが、プログラムからの操作でも反応してしまいます。

エクセルのマクロを作成中なのですが、
チェックボックスのTrue/Falseを他のプロシージャから直接変更すると、
clickのイベントに設定してあるはずのプロシージャが反応してしまいます。
本来、そういった操作で反応するのはchangeのイベントだと認識しているため、
意図しない挙動になってしまって困っています。何が原因でしょうか?
エクセルのバージョンは2013、VBAのバージョンは7.1です。

以下ソース
(ユーザーフォームにテキストボックス「TextBox」とチェックボックス「CheckBox」を配置)
テキストボックスに何かを入力するとチェックボックスをTrueにしますが、
そうするとCheckBox_Clickでないと表示されないはずのメッセージボックスが出てしまいます。

Private Sub TextBox_Change()
Me.CheckBox = True
End Sub

Private Sub CheckBox_Click()
MsgBox "test"
End Sub

エクセルのマクロを作成中なのですが、
チェックボックスのTrue/Falseを他のプロシージャから直接変更すると、
clickのイベントに設定してあるはずのプロシージャが反応してしまいます。
本来、そういった操作で反応するのはchangeのイベントだと認識しているため、
意図しない挙動になってしまって困っています。何が原因でしょうか?
エクセルのバージョンは2013、VBAのバージョンは7.1です。

以下ソース
(ユーザーフォームにテキストボックス「TextBox」とチェックボックス「CheckBox」を配置...続きを読む

Aベストアンサー

こんばんは。

>他のプロシージャから直接変更すると、
このように、ActiveControl で、回避すればよいと思います。
If ActiveControl.Name = CheckBox1.Name Then

なお、私なら、このようにしていると思います。TextBox が空なら、CheckBox もオフになるということです。意味が違っていたら、ご指摘ください。

Private Sub TextBox_Change()
 If Me.TextBox.Text <> "" Then
  Me.CheckBox.Value = 1
 Else
  Me.CheckBox.Value = 0
 End If
End Sub
Private Sub CheckBox_Click()
 '直接処理しないと、MsgBox は働かない。
 If ActiveControl.Name = CheckBox.Name Then
   MsgBox "Test"
 End If
End Sub


人気Q&Aランキング

おすすめ情報