[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『名簿データ管理』(ひらこ)
エクセルのシート1に名簿リストを作成しています。
シート2にボタンを作成し、クリックしたらフォーム形で
開くようにしたいのですが、
ボタンをクリック、無地のフォームを開くまでは作成できたのですが、
シート1のデータのひっぱり方がわかりません。
リストボックスでしょうか。
氏名 「 」
住所 「 」
電話番号「 」
生年月日「 」
「」内にデータを出すにはどう設定すれば良いでしょうか。
あとフォームにはレコードを移動するボタンや、各項目での
検索も出来たら、と考えています。
エクセルに組み込まれたフォーム機能は都度範囲指定があるの
で面倒とのことで、マクロで出来ないかと思いました。
< 使用 Excel:Excel2010、使用 OS:Windows8 >
>エクセルに組み込まれたフォーム機能 これをマクロの記録に取ればいいんじゃないですか? (稲葉) 2019/01/21(月) 12:29
>エクセルに組み込まれたフォーム機能は都度範囲指定があるの で面倒とのことで
そんなのありましたっけ? というか、ご自身では試してないのですか?
(コナミ) 2019/01/21(月) 12:32
稲葉さん
それも考えましたが、フォームが小さいので見にくいようです。
大きくできますでしょうか。
(ひらこ) 2019/01/21(月) 12:36
コナミさん。 EXCEL2007からはメニューから外されている。 クイックアクセスツールバーの設定でリボンにないコマンドから「フォーム...」を追加して使用する。 (ねむねむ) 2019/01/21(月) 12:40
リスト内の1セルを選択してからフォームのボタンを押しても 普通にできると思いますけど。
ねむねむさん はい。私はクイックアクセスツールバーに配置してます。 でも、範囲指定しないとできない訳じゃないですよね。 あ、機能自体があるの?と聞いたのではなく範囲指定しないと できないの?と聞いたのです。すみません。 (コナミ) 2019/01/21(月) 12:42
正直機能として全く面白くないので、やりたくないのですが・・・
http://www.atmarkit.co.jp/ait/articles/1404/04/news037.html
ここに簡単な作り方あるので、自分で作成されてみてはどうでしょう? (稲葉) 2019/01/21(月) 12:49
●エクセルシート名→名簿
A列からM列まで項目があります。
フォーム側はラベルとテキストボックスで作成しましたが、
この方法であっているのかわかりません(笑)
(フォーム)
連番→名簿!A2
氏名→名簿!B2
フリガナ→名簿!C2
住所→名簿!D2
以上、M2まで項目あり。
でもここからが問題でA3の行〜をフォーム側で
表示するにはどうしたら良いでしょうか。
スピンボタン、スクロールボタン色々試してはいるのですが
設定がよくわからなくて。
(ひらこ) 2019/01/21(月) 19:48
ガンバリマシタネ。 仕事終わったので、ちょっと作ってみました。 思ったより手こずった・・・ テストデータは以下の通りです。 1)A列は1から始まる連番にしてください。 2)欠番はなしです。(スピンボタンの移動で、番号使います。) 3)データが無くても連番だけはずーーーーっと下まで作っておいてください。(新規作成はA列に連番があるセルのみとします) 4)途中で空白の行があると正しくデータが取れません >Sheets("Sheet1").Range("A1").CurrentRegion A1を選択して、Ctrl+*を押したときの動作です。 連続する範囲を選択するコマンドです。
|[A] |[B] |[C] |[D] |[E] [1] |連番|氏名 |性別|電話番号 |生年月日 [2] | 1|栗山浩寿 |男 |06-1400-7285|1994/3/8 [3] | 2|生田美名子|女 |0983-66-0201|1988/12/13 [4] | 3|梶亜矢 |女 |03-6066-3221|1978/3/21 [5] | 4|長浜秀樹 |男 |087-056-5328|1975/1/2 [6] | 5|青木幸仁 |男 |0565-79-1042|1994/5/8 [7] | 6|諏訪亜依 |女 |0184-33-9531|1973/6/20 [8] | 7|堀彰 |男 |0173-26-5040|1974/8/1 [9] | 8|脇田文子 |女 |059-781-2993|1981/3/17 [10]| 9|相川真司 |男 |082-002-9306|1988/6/18 [11]| 10|門田勝男 |男 |0859-03-5325|1984/5/23 [12]| 11| | | | [13]| 12| | | | [14]| 13| | | | [15]| 14| | | | [16]| 15| | | | [17]| 16| | | | [18]| 17| | | | [19]| 18| | | | [20]| 19| | | | [21]| 20| | | |
新しいユーザーフォームを作ってください。 そこに以下のコードを入れてください。 データ範囲は★のところを書き換えてください。 Option Explicit
Private WithEvents applyBtn As MSForms.CommandButton Private WithEvents moveSpn As MSForms.SpinButton Private rc_range As Range Private rc As Variant Private rc_mirror As Variant Private txbarray() As MSForms.TextBox
'//登録ボタン Private Sub applyBtn_Click() Dim i As Long Dim flgChange As Boolean For i = 2 To UBound(txbarray) If CStr(rc(txbarray(1) + 1, i)) <> txbarray(i) Then rc_mirror(txbarray(1) + 1, i) = txbarray(i) flgChange = True End If Next i If flgChange Then If MsgBox("変更がありました。更新しますか?", vbYesNo) = vbYes Then rc_range.Value = rc_mirror rc = rc_mirror End If End If End Sub
'//スピンボタン レコード移動 Private Sub moveSpn_SpinDown() MoveRc No:=WorksheetFunction.Max(txbarray(1) - 1, 1) End Sub Private Sub moveSpn_SpinUp() MoveRc No:=WorksheetFunction.Min(txbarray(1) + 1, UBound(rc) - 1) End Sub Private Sub MoveRc(ByVal No As Long, Optional ByVal DataChk As Boolean = True) Dim i As Long If DataChk Then applyBtn_Click '登録ボタンクリックと同じ動作 End If For i = 1 To UBound(txbarray) txbarray(i).Value = rc(No + 1, i) Next i End Sub '//ここまでレコード移動
'//コントロール配置 Private Sub UserForm_Initialize() Dim i As Long Dim cTop As Long Dim MaxLen As Long '項目の最大文字数 Dim n As Long Dim lblDummy As MSForms.Label Dim txbDummy As MSForms.TextBox
Const fSize = 12
'レコードの取得 Set rc_range = Sheets("Sheet1").Range("A1").CurrentRegion '★ここを実際の範囲に設定 rc = rc_range.Value rc_mirror = rc '登録ボタンの設置 Set applyBtn = Controls.Add("forms.commandbutton.1", , True) With applyBtn .Caption = "登録" .Top = 10 .Width = 100 .Height = 20 cTop = .Top + .Height + 10 'leftは最後に設定 End With Set moveSpn = Controls.Add("forms.spinbutton.1", , True) With moveSpn .Top = 10 .Width = 20 .Height = 20 cTop = .Top + .Height + 10 'leftは最後に設定 End With
'項目の最大文字数 For i = 1 To UBound(rc, 2) MaxLen = IIf(MaxLen < LenB(rc(1, i)), LenB(rc(1, i)), MaxLen) Next i
For i = 1 To UBound(rc, 2) 'ラベルの設定 Set lblDummy = Controls.Add("forms.label.1", , True) With lblDummy .Left = 10 .Top = cTop .Width = MaxLen * fSize .Height = 20 .TextAlign = fmTextAlignRight .Font.Size = fSize .Caption = rc(1, i) End With
'テキストボックスの設定 Set txbDummy = Controls.Add("forms.textbox.1", , True) With txbDummy If i = 1 Then .Enabled = False .BackColor = lblDummy.BackColor End If .Left = lblDummy.Left + lblDummy.Width + 10 .Top = cTop .Width = 200 .Height = 20 .Font.Size = fSize cTop = cTop + .Height + 10 End With ReDim Preserve txbarray(1 To i) Set txbarray(i) = txbDummy Next i
'微調整 With txbDummy Me.Width = .Left + .Width + 10 Me.Height = cTop + 50 applyBtn.Left = .Left moveSpn.Left = applyBtn.Left + applyBtn.Width + 10 End With
'スピンボタン押した動作と同じ MoveRc No:=1, DataChk:=False End Sub
(稲葉) 2019/01/21(月) 20:12
あ、ミスった キャンセル押したときのどうさ入れ忘れました パソコン閉じちゃったので、明日修正します (稲葉) 2019/01/21(月) 20:30
(ひらこ) 2019/01/21(月) 20:52
なにもおかなくていいです 実行すれば勝手にコントロール設置されるので、 まっさらなユーザーフォームを作って、ユーザーフォームのなかコードいれて シートにおいたボタンから、Userform1.showとするだけです (稲葉) 2019/01/21(月) 21:26
>★の範囲というのはリストの列数とか行数でしょうか。 (稲葉) 2019/01/21(月) 20:12 の投稿の4)を読んでください (稲葉) 2019/01/21(月) 22:54
修正お待たせしました。 登録ボタンのコードを、そのまま入れ替えてください。 '//登録ボタン Private Sub applyBtn_Click() Dim i As Long Dim flgChange As Boolean For i = 2 To UBound(txbarray) If CStr(rc(txbarray(1) + 1, i)) <> txbarray(i) Then rc_mirror(txbarray(1) + 1, i) = txbarray(i) flgChange = True End If Next i If flgChange Then If MsgBox("変更がありました。更新しますか?", vbYesNo) = vbYes Then rc_range.Value = rc_mirror rc = rc_mirror Else rc_mirror = rc End If End If End Sub (稲葉) 2019/01/22(火) 08:09
すみません、ご相談なのですが、
●スピンボタンですが、上下で表示されていて
「上向の矢印」を押すと次レコードに行くようになっておりますが、
「下向の矢印」に変更可能でしょうか。
●レコード移動をしていて決まったレコードで「変更が〜」のメッセージが
出るのですが、リストを確認しましたらかなり文字数が長いレコードでした。
「更新する」にすると切れてしまうようです。
文字数を今より余裕をもって長めに設定は可能でしょうか。
自分でもテキストボックスの長さなど変更をしてみて、
うまく行く部分もありましたが、基本レベルが高すぎて
私にはかなり難しいです(笑)
このフォームに関しては
「検索」「印刷」ボタンも欲しいと考えています。
「検索」は各項目で検索をかけたり、項目に○など
抽出対象マークや文字を入れていり対象レコードを検索によって抽出し、
その人だけを「印刷」したりしたいんですが。
印刷のパターンは
●「郵便番号」「住所」「部署」「会社名」「氏名」→長3封筒レイアウト
●「郵便番号」「住所」「部署」「会社名」「氏名」→角2封筒レイアウト
あとは上記2パターンを元に「氏名」だけで出力とか「2回目発送」などの文字入り
で印刷も出来たらと思います。
こうなると印刷用のフォームを新しく作る方が良いかもしれないと考えたりして。
考えているだけで実力が全然伴って無いんですが(笑)
Excelマクロではかなりレベル高いですよね。
前ソフトではレイアウト作成機能が自由で、
元データからデータをレイアウトにはめ込むフィールド機能がありましたので、
結構簡単に出来てはいたのですが。
(ひらこ) 2019/01/23(水) 07:58
何か勘違いされているようなので、はっきり申しておきますが、 「質問」掲示板であって、「作成依頼」ではありません。 いただいた情報を元に、お手伝いする立場ですので、お忘れなく。
>「下向の矢印」に変更可能でしょうか。 提示したコードの '//スピンボタン レコード移動 部分にそれらしい記述があるので、 コードを入れ替えてください。
>こうなると印刷用のフォームを新しく作る方が良いかもしれないと考えたりして。 フォームは印刷できません。 シートにレイアウトして、シートを印刷する形になります。 こちらは別途ご自身で別シートに作成していただくしかありません。 封筒サイズごとにシートを分けてください(シート名例 「長3」「角2」) マクロからレイアウトへのデータ出力は、連番のみになります。 「氏名」「住所」等は、ご自身でVLOOKUP関数などを使って自分で作成してください。
>抽出対象マークや文字を入れていり対象レコードを検索によって抽出し、 その人だけを「印刷」したりしたいんですが。 今回ご依頼いただいたのは単票フォームです。 ○を付けた人のみ印刷でされば、シートに直接書き込んでいただいたほうが早いです。 ○を付ける列を指定してください。
>「検索」は各項目で検索をかけたり、 具体的にはどうしたいのですか? 具体例を出してください。
>●レコード移動をしていて決まったレコードで「変更が〜」のメッセージが 再現できません。 該当するレコードをこちらに張り付けてください。
以上、ご回答いただくまで先に進めません。 また追加仕様があれば先に言ってください。 次回投稿が最後の追加仕様としてください。
ご要望いただいている内容は、アクセスのほうが向いてそうですね。 むしろエクセルの必要がありません。 変更を検討してください。
(稲葉) 2019/01/23(水) 08:38
(ひらこ) 2019/01/23(水) 08:55
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.