[[20160322080642]] 『エクセルで作れるか質問』(初心者) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『エクセルで作れるか質問』(初心者)

またお世話になります。
下記ファイルで質問があります。
http://fast-uploader.com/file/7014157132254/

1.シート1に入力
2.シート1のチェックボックスにレ点が入ったものを取得
3.シート2の指定した個所に入力

これがエクセルで可能かどうか教えてください。
もし可能な場合は作り方のヒントを頂けると嬉しいです。
よろしくお願いします。

ダウンロードパスワードはexcel1234です。

< 使用 Excel:Excel2010、使用 OS:WindowsVista >


 ファイルは開いてませんが。

 マクロでない場合はこんな感じ?

 1:開発 ⇒ 挿入 ⇒ フォームコントロールのチェックボックスを設定
 2:各フォームチェックボックスの書式設定でリンクするセル設定。
 3:リンクするセルのデータを元に抽出。

 ※必要に応じて数式追加など。
 
(GobGob) 2016/03/22(火) 08:52

 パスワードが違っているようで開けません。
 ただ、基本的にはできるでしょうね。
 閲覧できればわかるのでしょうけど、チェックボックスは フォームコントロールですか? ActiveXコントロールですか?
 それと、関数等での対応希望ですか?マクロ対応でもいいのですか?

(β) 2016/03/22(火) 08:54


あげ直しました。
パスワードは一緒です。
http://fast-uploader.com/file/7014160316843/
excel1234
(初心者) 2016/03/22(火) 09:00

 ファイル拝見。
 基本的には、(GobGob) 2016/03/22(火) 08:52 で GobGobさんが言われている数式処理になるのでしょうね。
 ただ、一人分が1行ではなく、4行なので、さらっとした単純なものではなくなりそうですね。
 βには荷が重すぎますので、専門家の先生方からの回答をお待ちください。
 (マクロでよければお手伝いできますが)

 ところで、シート2 は 10人分ですね。シート1 で 10人以上にチェックが入った場合はどうするのですか?

(β) 2016/03/22(火) 09:40


β様
返答ありがとうございます。
数式でもマクロでもどちらでもいいので、可能かどうかが知りたかったのです。
自分には見当がつかず、荷が重いので上司に自分ではできないと回答しました。
何かいい参考書籍がないものですかね。
(初心者) 2016/03/22(火) 13:31

 >>何かいい参考書籍がないものですかね。

 あるといえばありますし、ないといえばありません・・・

 この要件ズバリの必要コード部品の説明が、まとまって記述されていて、それらをこの要件に合わせて組み立てる例が記載されている参考書はありません。
 (あるわけがないですね)

 でも、最終的に、この要件を満たすコードが書けたとします。
 そのコードに使われたコード部品に関する説明は、そこそこ ちゃんとした参考書の、どこかのページに説明があるはずです。

 いずれにしても、

 >>ところで、シート2 は 10人分ですね。シート1 で 10人以上にチェックが入った場合はどうするのですか?

 と質問しました。これについてはいかがですか?

(β) 2016/03/22(火) 14:17


 To 初心者 さん

 可能ですね。

  Sheet1のチェックボックスは、ActiveXコントロールを現在、貼り付けてますが、
フォームコントロールのチェックボックスに変えて、
 チェックボックスを右クリックして、コントロールの書式設定のコントロールダブにて、
 リンクするセルを例えば、A4にしてみてください。チェックすると、Trueになるますし、
 チェックを外すと、Falseになります。

 あとは、配列処理ですよ。

(通りすがり) 2016/03/22(火) 14:59


 To 通りすがりさん

 アップされたブックのシートに配置してあったのはフォームツールのチェックボックスだと思いますが。
 まぁ、フォームツールであれActiveXであれ、処理はできるわけですが。

 To (初心者)さん

 最初のチェックボックスに【中途半端】にマクロ登録してあるようですが、まず、これをはずしましょう。
 で、要件としては、チェックが付いたデータをSheet2に転記することなんですが、たとえば 1行目と3行目に
 チェックがついたとします。SHeet2 の 1人目と2人目の場所に転記されますよね。
 で、SHeet1にもどり、3行目のチェックをはずし、4行目と8行目にチェックがついたとします。
 そうすると、Sheet2側は、2人目のデータが消え、その場所に 4行目の情報、3人目の場所に8行目のデータが
 表示されていなければいけませんね。

 何が言いたいかというと、処理としてはチェックが付いた(あるいははずされた)その瞬間に処理することもできるのですが
 1件、1件の処理だと、かなり難易度が高いというか、面倒なコード処理になります。

 タイミングは、いろいろ検討はできますが、処理としては、常に、Sheet1の全チェックボックスの状態でSheet2の記載内容を
 洗い替える、書き換える、こんな処理がよろしいかと。

 すべてのチェックボックスに同じマクロを登録して、どのチェックボックスに変化があろうと、その都度、すべて処理。
 あるいは、それだと、何度も同じ処理が実行され、ちょっと、もったいない ということであれば SHeet2を開いたとき(選択した時)に
 洗い替え処理を実行することが考えられますね。

 ただ、後者の場合は チェックボックスの選択だけを行い、Sheet2を開かずに印刷すると、
 その結果が反映されない不具合がでますので、そこは、ちょこっと工夫必要ですが。

(β) 2016/03/22(火) 15:19


β様、通りすがり様
コメントありがとうございます。
とりあえずできないことにして、自分のスキルアップ用に
暇を見て考えていくことにしました。
そのものずばりの参考書があったらすごいですね。
今使っている参考書が技術評論社の『Excel マクロ&VBA 基本&便利技』
というのを使ってるんですが、痒いところが書いてないので
何かないのかと思った次第です。

β様
10人以上登録することはないので、11以上はエラーで処理しようかと思ってました。

(初心者) 2016/03/22(火) 15:34


 >>暇を見て考えていくことにしました。

 はい、がんばってください。
 何かありましたら、お手伝いはできると思います。

 で、その際にというか、アップされたブックの SHeet1 のチェックボックスですが、チェック 1 が、いくつも登録されていますね。
 削除しても削除してもでてきます。都合 32個ありましたよ。
 これって、どんな処理をするにせよ、具合悪いですから、直しておかれたほうがいいですよ。

(β) 2016/03/22(火) 16:00


 To 初心者さん
 やる気があれば、手伝いますよ。難しくありません。
 「Sheet1のA列がTrueである行の1〜24を配列に入れて、Sheet2の1〜24に転記したい」ってことですかね。

■参考までに(途中です。転記したい内容は、ちゃんと決まってますか?)
http://ww10.puny.jp/uploader/download/1458646169.zip
作業員名簿-白紙001(ダウンロードパスワード:abc)

■Sheet1

*********************************************************************************************************************

    |[A] |[B]   |[C]       |[D]             |[E]       |[F]      |[G]        |[H]                      |[I]        |[J]        |[K]       |[L] |[M]   |[N]       |[O]      |[P]      |[Q]      |[R]      |[S]      |[T]      |[U]      |[V]      |[W]  |[X]  |[Y]  |[Z]  
 [3]|    |      |         1|               2|         3|        4|          5|                        6|          7|          8|         9|  10|    11|        12|       13|       14|       15|       16|       17|       18|       19|       20|   21|   22|   23|   24
 [4]|    |作業員|名前(漢字)|名前(かな)      |雇入年月日|生年月日 |電話1      |住所                     |電話2      |家族連絡先 |健康診断日|血圧|血液型|特殊健診日|特別教育1|特別教育2|特別教育3|特別教育4|技能講習1|技能講習2|技能講習3|技能講習4|免許1|免許2|免許3|免許4
 [5]|TRUE|      |田中 一郎|たなか いちろう|2016/3/22 |1970/3/22|03-12345678|東京都千代田区八段南1-1-1|03-12345677|03-12345676|2015/3/22 | 150|B     |2014/3/22 |あ       |い       |う       |え       |お       |か       |き       |く       |け   |こ   |さ   |し   

*********************************************************************************************************************

■Sheet2

*********************************************************************************************************************

     |[A]|[B]           |[C]       |[D]|[E]       |[F]|[G]     |[H]|[I]                    |[J]       |[K]|[L]       |[M]                   |[N]        |[O]       |[P]            
 [13]|番 |ふ り が な|          |   |          |   |        |   |         (TEL)|最 近 の|血 |特   殊|                      |           |          |               
 [14]|   |              |職    種|※ |雇入年月日|   |生年月日|   | 現 住 所           |健康診断日|液 |健康診断日|教 育・資 格・免 許|           |          |入場年月日     
 [15]|   |氏     名|          |   |          |   |        |   |         (TEL)|          |型 |          |雇入・職長            |           |          |受入教育       
 [16]|号 |              |          |   |経験年数  |   |年  齢|   | 家族連絡先            |血   圧|   |種   類|特 別 教 育           |技 能 講 習|免   許|実施年月日     
 [17]|  1|             2|          |   |          |   |        |   |                      5|          | 11|          |                    13|         17|        21|               
 [18]|   |              |電    気  |   |         3|   |       4|   |                      6|         9|   |        12|                    14|         18|        22|  年  月  日
 [19]|   |             1|電気通信  |   |          |   |        |   |                      7|          |   |          |                    15|         19|        23|               
 [20]|   |              |          |   |          |   |        |   |                      8|        10|   |          |                    16|         20|        24|  年  月  日

**********************************************************************************************************************

(マリオ) 2016/03/22(火) 20:40

こんにちは。

>技術評論社の『Excel マクロ&VBA 基本&便利技』
仕事帰りに本屋さんで見てきましたが、小さい本にもかかわらず
内容のしっかりした良い本だと思いました。
本は悪くないです。ただ相性が悪いのかなと思います。

語り口はそっけないし、とっつきが悪いといわれるオブジェクト・
プロパティ・メソッドを多用して説明しているし、関数とコントロールは
ばっさり省略しているし。合わない人には合わないかもしれないです。

真逆の本をご紹介しましょう。あ、内容は良いです。
●かんたんプログラミング Excel 2010 VBA 基礎編
●かんたんプログラミング Excel 2010 VBA コントロール・関数編
●かんたんプログラミング Excel 2010 VBA 応用編
分かりやすく丁寧な説明、内容充実です。
ただし、本は大きいです。重いです。3冊ですからかさばります。価格もけっこう行きます。
出版社は同じ 技術評論社です。
ご参考まで。

( 佳 ) 2016/03/22(火) 20:41


 To 初心者さん

 Sheet1のチェックボックスに関するマクロです。参考にしてください。

 Sub チェックボックス全削除()
    Sheets("Sheet1").CheckBoxes.Delete
 End Sub
 Sub チェックボックス作成()
    Sheets("Sheet1").Activate
    For i = 1 To 50
        With ActiveSheet.CheckBoxes.Add(52, 37.5 + 13.5 * i, 20, 20)
            .Name = "CheckBox " & i
            .Value = True
            .Caption = ""
            .LinkedCell = "$A$" & (4 + i)
        End With
    Next i
 End Sub
 Sub 全てチェックOFF()
     Sheets("Sheet1").CheckBoxes.Value = False
 End Sub
(マリオ) 2016/03/22(火) 20:50

皆様コメントありがとうございます。

β様
中途半端なマクロを削除しました。
ご指摘ありがとうございます。
時間をかけてじっくり腰を据えて取り組むことにします。

マリオ様
zipファイルで添削ありがとうございます。
まだダウンロードしていませんが使わせていただきます。

佳様
参考書の提示ありがとうございます。
結構値段がしますね。
薄給なので1冊ずつ買っていきたいと思います。

マリオ様
チェックボックスのマクロありがとうございます。
この時点でつまづいていたので大変勉強になります。
さっそく使わせていただきます。
(初心者) 2016/03/23(水) 08:25


 To 初心者さん

 作っちゃったので、置いておきます。見てないかもしれませんが。

 2016/03/22(火) 20:40 のSheet1では、C列〜Z列にデータが24個ありますが、
 作成したコードでは、D列〜AA列の24個のデータを配列に入れます。1列ずらしました。
 Sheet1のデータ開始行は5行目。

http://ww10.puny.jp/uploader/download/1458734447.zip

 作業員名簿002.xlsm(ダウンロードパスワード:abc)

 Option Explicit
 Sub 転記()
     Dim sh1 As Worksheet, sh2 As Worksheet, c As Range, x As Long
     Dim mx As Long, i As Long, cnt As Long, k As Long, j As Long, f As String
     ReDim Data(1 To 24, 1 To 1)
     Set sh1 = Sheets("Sheet1"): Set sh2 = Sheets("Sheet2")
     mx = sh1.Range("A" & Rows.Count).End(xlUp).Row
    '***********************************************************************
    '事前チェック
     cnt = WorksheetFunction.CountIf(sh1.Range("A5:A" & mx), "True")
     If cnt > 10 Then
        MsgBox cnt & "件 チェックされています。(" & sh1.Name & ")" & _
               vbCrLf & "(チェックは10件まで)"
        End
     ElseIf cnt = 0 Then
        MsgBox "1つもチェックされていません。(" & sh1.Name & ")"
        End
     End If
    '***********************************************************************
    '転記元シート(Sheet1)のデータを配列に入れる(A列がTrueである行のみ)
     For i = 5 To mx
         If sh1.Range("A" & i).Value = "True" Then
            k = k + 1
            ReDim Preserve Data(1 To 24, 1 To k)
            For j = 1 To 24
                Data(j, k) = sh1.Cells(i, j + 3).Value '★D列〜AA列
            Next j
         End If
     Next i
    '***********************************************************************
    '転記先シート(Sheet2)を初期してから、転記
     sh2.Range("B17:B56").ClearContents
     sh2.Range("E17:O56").ClearContents

     k = 0
     x = 17 + (UBound(Data, 2) - 1) * 4
     For i = 17 To x Step 4
         k = k + 1
         Set c = sh2.Range("B" & i) '基準となるセル
         c.Offset(2, 0).Value = Data(1, k)
         c.Value = Data(2, k)
         c.Offset(1, 3).Value = Data(3, k)
         c.Offset(1, 5).Value = Data(4, k)
         c.Offset(0, 7).Value = Data(5, k)
         c.Offset(1, 7).Value = Data(6, k)
         c.Offset(2, 7).Value = Data(7, k)
         c.Offset(3, 7).Value = Data(8, k)
         c.Offset(1, 8).Value = Data(9, k)
         c.Offset(3, 8).Value = Data(10, k)
         c.Offset(0, 9).Value = Data(11, k)
         c.Offset(1, 10).Value = Data(12, k)
         c.Offset(0, 11).Value = Data(13, k)
         c.Offset(1, 11).Value = Data(14, k)
         c.Offset(2, 11).Value = Data(15, k)
         c.Offset(3, 11).Value = Data(16, k)
         c.Offset(0, 12).Value = Data(17, k)
         c.Offset(1, 12).Value = Data(18, k)
         c.Offset(2, 12).Value = Data(19, k)
         c.Offset(3, 12).Value = Data(20, k)
         c.Offset(0, 13).Value = Data(21, k)
         c.Offset(1, 13).Value = Data(22, k)
         c.Offset(2, 13).Value = Data(23, k)
         c.Offset(3, 13).Value = Data(24, k)

         f = "IF(R[-2]C="""","""",DATEDIF(R[-2]C,NOW(),""Y""))"
         c.Offset(3, 3).FormulaR1C1 = "=" & f
         c.Offset(3, 5).FormulaR1C1 = "=" & f
     Next i
     sh2.Activate
     Application.Goto Reference:=Range("A1"), Scroll:=True
     Set sh1 = Nothing: Set sh2 = Nothing: Set c = Nothing
 End Sub

 Sub 初期化()
     Dim sh2 As Worksheet
     Set sh2 = Sheets("Sheet2")
     sh2.Range("B17:B56").ClearContents
     sh2.Range("E17:O56").ClearContents
     Set sh2 = Nothing
 End Sub

(マリオ) 2016/03/23(水) 20:53


マリオ様
ありがとうございます。
まさか完成版がこんなに早くみられるなんて思っていませんでした。
佳様がレスを下さった参考書と一緒にこのコードを組めるよう、
勉強に励みます。
本当にありがとうございます。
(初心者) 2016/03/24(木) 14:10

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.