[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『エクセルで作れるか質問』(初心者)
またお世話になります。
下記ファイルで質問があります。
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
ファイル拝見。 基本的には、(GobGob) 2016/03/22(火) 08:52 で GobGobさんが言われている数式処理になるのでしょうね。 ただ、一人分が1行ではなく、4行なので、さらっとした単純なものではなくなりそうですね。 βには荷が重すぎますので、専門家の先生方からの回答をお待ちください。 (マクロでよければお手伝いできますが)
ところで、シート2 は 10人分ですね。シート1 で 10人以上にチェックが入った場合はどうするのですか?
(β) 2016/03/22(火) 09:40
>>何かいい参考書籍がないものですかね。
あるといえばありますし、ないといえばありません・・・
この要件ズバリの必要コード部品の説明が、まとまって記述されていて、それらをこの要件に合わせて組み立てる例が記載されている参考書はありません。 (あるわけがないですね)
でも、最終的に、この要件を満たすコードが書けたとします。 そのコードに使われたコード部品に関する説明は、そこそこ ちゃんとした参考書の、どこかのページに説明があるはずです。
いずれにしても、
>>ところで、シート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
β様
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| 年 月 日
>技術評論社の『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
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.