こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

チェックボックスの逆使用がわかりません!

初めて質問させていただきます。マクロ超初心者です。
エクセル2007を使用しております。

マクロに初めて挑戦し、契約書に差しこんでおります。
うまく説明できないところがあると思いますが、ご了承ください。。。

シート1に契約書に差し込むデータが一覧表として作成してあります。
シート2に契約書のひな型を作成→シート1から契約内容を差し込む
見よう見まねでマクロを作成しました。

ここまではうまくいったのですが、どうしてもわからないところがあります。

シート1
 A列  B列
 A子  マンション
 B子  アパート
 C子  戸建
 D子  テラスハウス


シート2へ差し込み

   A列     B列      C列     D列    E列     F列   G列     H列
 チェックBOX  マンション  チェックBOX アパート チェックBOX  戸建 チェックBOX B/D/F以外

もし、A子がマンションなら、シート2のA列チェックBOXにレ点が入るようにしたいです。
同様にB子・C子と差し込んだときに、一致するBOXにチェックが入るといったものにしたいです。

この説明で、お分かりいただけましたでしょうか?
どうか、お願いいたします。

投稿日時 - 2011-01-16 17:51:38

QNo.6452306

困ってます

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

>見よう見まねでマクロを作成しました。
>ここまではうまくいった

見よう見まねでうまくいったのは偶然です。
確実なものを積み上げていく癖をつけないと、
この先もこんな作り方では遠回りです。

何かあったときに自分で解決させるための対処の仕方を覚えておく必要あります。
コードを1行ずつ実行させるとか
コードの途中で変数の内容を表示させるとか
わからないことを明らかにさせていく手段はあります。
初期段階ではこういうのも覚えましょう。

「エクセルでお仕事」
初心者のよくある疑問・間違いや誤解
http://www.asahi-net.or.jp/~ef2o-inue/menu/menu01.html

これを知ってて進めるのと知らずに進めるのとでは全然違いますし、
こういうのを教えてくれる人が居ないならなおさらよーく見ておくことです。

掲示板での回答は、点数かせぎも多いので、
「答えは教えてもそれに至る解き方の過程までを教えることしない」、多々あります。
できるようになったんだけど、・・・は何かわからない、とかやっぱり疑問が残る等。

それから、
質問内容がわかりやすいと回答も早いです。
質問内容があいまいだと回答も遅いです。

がんばりましょう。

投稿日時 - 2011-01-16 22:25:04

お礼

大変遅くなりました。
ご回答ありがとうございます。

まだまだ、勉強が足りまっせん。
基礎からがんばります!
ありがとうございました。

投稿日時 - 2011-01-17 09:26:34

ANo.3

>逆使用がわかりません
逆使用なんて我流の用語だよ。意味判るが、どちらが逆か判らないよ。
ーー
Sheet2の仕組みが十分説明されていないので質問が不完全。
(1)Sheet1の1行(ある行)データでSheet2を完成後、印刷して、次に次の行のデータでSheet2を完成後印刷・・
差込印刷的なものをやるのか
(2)Sheet2で氏名を入力するとSheet1のその氏名の情報でSheet2を完成、すなわち検索システム画面表示的なものか
ーーー
(2)の場合
例データ
Sheet1
A列   B列
氏名住所タイプ
a1
b2
c3
ーー
Sheet2
A1セルーー氏名を入力(指定する)するセル
チェックボックスを3つ設ける
ーーー
Sheet2のChangeイベントに
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
Dim ob As OLEObject
For Each ob In Me.OLEObjects
If ob.Name Like "CheckBox*" Then _
ob.Object.Value = False
Next
'---
x = Cells(1, "A")
MsgBox x
With Worksheets("Sheet1")
y = .Range("A1:A10").Find(x).Row
MsgBox y
z = .Cells(y, "B")
MsgBox z
End With
With Worksheets("Sheet2")
.OLEObjects("CheckBox" & z).Object.Value = True
End With
Exit Sub
Select Case z '以下は普通のやり方(参考)
Case 1
Worksheets("Sheet2").CheckBox1 = True
Case 2
Worksheets("Sheet2").CheckBox2 = True
Case 3
Worksheets("Sheet2").CheckBox3 = True
End Select
End If
End Sub
納得したらMsgbox行は削除のこと。
ーーー
Sheet2のA1に
例えば
bを入れると、2番目のチェックボックスがON
cを入れると、3番目のチェックボックスがON
になる。
ーーー
仕様が(1)ならSheet1のデータA列で第1行から順に氏名を取って、Sheet2のA1セルにセットして、そして印刷をする、を最終行まで繰り返す。
ーー
この質問は丸投げで、質問者がやるには、現状ではちと速い課題ではないかと思う。
イベントの考えや、VBAにおけるコントロール配列は使えないが代用の問題(結構有名)など勉強したことも無いのだろうから。
地道にコントロールの問題点のことを勉強してから質問すること。
フォームにコントロールを置くときとワークシートに置くときと違いがあったりする難しさが在ってやさしくは無いのだ。

投稿日時 - 2011-01-16 21:25:21

お礼

大変遅くなりました。
ありがとうございます。

やはり、質問の仕方が的確でなかったようで、申し訳ありませんでした。
早速とりかかっておりますが、うまくできるかは・・・
私には、まだまだ難しすぎますが、格闘してみます!

まだまだ、初心者なので、わからないことも多いのですが、がんばってやってみます。
ありがとうございました。

投稿日時 - 2011-01-17 10:13:46

ANo.2

参考。

「CheckBox セル」
で検索するといろんな使い方が出てきます。
文章だけでなくて図を見ながらのがいいなら・・・。

投稿日時 - 2011-01-16 20:27:26

お礼

ありがとうございます。
がんばってやってみます!

投稿日時 - 2011-01-17 09:27:39

ANo.1

各チェックボックスのシートとの連携のプロパティを設定しておいてそのセルへ TRUE/FALSEを設定してやればチェックマークがつきます

コントロールが フォーム用のチェックボックスならコントロールを右クリックしてコントールの書式設定のコントロールタブにある リンクするセル

コントロールツールボックスのチェックボックスなら 右クリックして プロパティを開き
LinkedCell

ここに C1 とか E2とか シートのセル番地を入力しておきます

差込み用のマクロの中で
マンションの場合
Range("C1").Value =True
Range("E1").Value =False
Range("G1").Value =False
Range("H1").Value =False

アパートなら
Range("C1").Value =False
Range("E1").Value =True
Range("G1").Value =False
Range("H1").Value =False

といった具合にすればいいように思います

投稿日時 - 2011-01-16 19:40:12

補足

うまく説明できていないので、とりあえず作成したものを貼りつけました。
これが完成すれば、大量の契約書データが処理できそうで、初めてマクロに挑戦した次第です。
丸投げと御感じの方もいるかと思いますが、どうか宜しくお願いします。

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub 新印刷()
Const org As String = "値と数値の書式"
Const prs As String = "新 重説・契約"
Const strt As Integer = 3
Dim idx, fromL, toL As Long
Dim oSht, pSht As Worksheet
Dim res, res2
Dim rs As Range

Set oSht = Worksheets(org)
Set pSht = Worksheets(prs)
       ・
        ・
        ・  
For idx = fromL To toL
pSht.Range("A3").Value = oSht.Cells(idx, "D").Value
pSht.Range("B47").Value = oSht.Cells(idx, "MZ").Value
pSht.Range("I60").Value = oSht.Cells(idx, "MP").Value
        ・
        ・
        ・ 
  ここに、もし
   oSht.Cells(idx, "MF").Valueに ”マンション”と入っていれば
          pSht.Range("AH8").Value のセルにあるチェックボックスにチェックが入る
                   
                    ”アパート”なら
          pSht.Range("AN8").Value のセルにあるチェックボックスにチェックが入る
                    
                    ”戸建”なら
          pSht.Range("AN8").Value のセルにあるチェックボックスにチェックが入る
                    
                    ”マンション。アパート・戸建以外”
          pSht.Range("AX8").Value のセルにあるチェックボックスにチェックが入る
           
といった具合にしたいのです。
  
どうぞ、宜しくお願い致します。
...

投稿日時 - 2011-01-17 10:56:53

お礼

補足の方に返答していました。
すいません

うまく説明できていないので、とりあえず作成したものを貼りつけました。
これが完成すれば、大量の契約書データが処理できそうで、初めてマクロに挑戦した次第です。
丸投げと御感じの方もいるかと思いますが、どうか宜しくお願いします。

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub 新印刷()
Const org As String = "値と数値の書式"
Const prs As String = "新 重説・契約"
Const strt As Integer = 3
Dim idx, fromL, toL As Long
Dim oSht, pSht As Worksheet
Dim res, res2
Dim rs As Range

Set oSht = Worksheets(org)
Set pSht = Worksheets(prs)
       ・
        ・
        ・  
For idx = fromL To toL
pSht.Range("A3").Value = oSht.Cells(idx, "D").Value
pSht.Range("B47").Value = oSht.Cells(idx, "MZ").Value
pSht.Range("I60").Value = oSht.Cells(idx, "MP").Value
        ・
        ・
        ・ 
  ここに、もし
   oSht.Cells(idx, "MF").Valueに ”マンション”と入っていれば
          pSht.Range("AH8").Value のセルにあるチェックボックスにチェックが入る
                   
                    ”アパート”なら
          pSht.Range("AN8").Value のセルにあるチェックボックスにチェックが入る
                    
                    ”戸建”なら
          pSht.Range("AN8").Value のセルにあるチェックボックスにチェックが入る
                    
                    ”マンション。アパート・戸建以外”
          pSht.Range("AX8").Value のセルにあるチェックボックスにチェックが入る
           
といった具合にしたいのです。
  
どうぞ、宜しくお願い致します。
...

投稿日時 - 2011-01-17 14:03:38

あなたにオススメの質問