[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『Sheet1を入力シート、sheet2にデータシートに、sheet1(A2)とおなじコード番号をもつ行に転記したい』(シルバーOL)
契約の新規、更新、解約の異動を入力しているリストがあります。契約番号をコード番号にし異動があった場合直接セルに入力していますが、大きな表なので、入力シート(sheet1)に同じ項目を作り、一件のデータのみ異動を入力、sheet2の同じ契約番号を持つ行に入力項目を転記したいと思います。入力項目契約番号を除いて15項目(B〜O)あります。新しい契約番号の時はsheet2の最下行に転記したいと思います。出来れば契約が終了した番号は条件付き書式などで塗りつぶされたら分かりやすいのですが。転記マクロをお教えください。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
http://edutainment-fun.com/excel/tool/form.html
(マナ) 2017/03/19(日) 18:15
まず、サンプル的なものでいいので、Sheet1 と Sheet2 の レイアウトを具体的にアップお願いします。 それがないと、きわめて抽象的なアドバイスしかできなくなります。
それと、確認なんですが、Sheet1 は あくまで 1件だけ、Sheet2 にはいわゆるリスト形式で全データがあると思われるんですが
・Sheet2 には、あらかじめ、全契約番号が記入されているのでしょうか? それとも、新規(契約番号が存在しない)ものは追加ということになるのでしょうか?
・項目がいくつあるのかはわかりませんが、SHeet1 には、毎回、当該契約の項目をすべて入力するのですか? それも大変ですよね。それとも、変更のあった項目のみ入力させるのでしょうか?
・Sheet1 への入力がどうなるのかにもよりますが、契約番号 A で入力したとします。 なんらかのタイミングで Sheet2 に書きこまれるわけですが、この A が間違っていた。正しくは AA だった。 こういう場合は、どのような入力を想定していますか? (間違いですから Sheet2 の A は 消さなければいけませんよね?)
★といった面倒なことを考えていくと、なかなか難易度は高くなりそうですね。 ここは、マナさんアドバイスのdataフォームの利用を検討してみてはいかがでしょうか。
(β) 2017/03/19(日) 18:18
>エクセルの入力フォームはPC入力があまり得意では無い人は無理があるようです。
具体的に、どのあたりが【無理】なのでしょうか? たとえば、本件をユーザーフォームであれなんであれ、なにかしらマクロで処理するとします。 そうした場合でも、データの 新規追加、削除、変更 を考えた場合には、基本的にはデータフォームと 同じような操作が必要になります。
マクロコードから、いったん離れ、新規追加、既存データ削除、既存データ変更 それぞれにおける、操作者の操作の流れを 文章で説明してもらえませんか? 文章で説明する過程で、必要な機能が明確になっていくと思います。
で、その操作が 操作者にとって無理のない、簡単なものであれば、データフォームでの処理もできるはずですし 操作者にとって、やはり (データフォーム同様)難しい ということになるかもしれませんので。
( β) 2017/03/19(日) 19:55
(シルバーOL) 2017/03/19(日) 21:26
>やはり無理な事でしたら現状維持であきらめようかと思います
あきらめるのは、もったいないですよ。
>現在は新規・契約終了・既存データ変更など番号入力で隣のセルに当該項目が表示されます。
このところを、それぞれ、【どんな手順で操作者が入力(含むデータ指定)】するのか(させたいのか)を その手順を【言葉】で説明いただきたかったんですが・・・・ その過程で、いろんなことが見えてきますので。
たとえば A 列に契約番号を入れたとしますね。 これが、新規入力なのか、既存データ修正なのかの判定は、どうさせるのか? あるいは、その取り消しは、どういった指示で行うのか。
なんらかの方法で 契約番号 AA のデータを呼び出したとします。 その AA を BB に変更したとします。 この場合、Sheet2 に BB がないケース、すでに存在するケース、それぞれ、 どういった処理を行うのか。
また、データ入力時、往々にして、既存データをコピーして、それを元に新規データを作成したい。 こういうことも、要望にあがるでしょう。
そういった、ケースの洗い出しと分析も必要でしょうね。
機能ごとに、操作者による入力と、その入力を受けて、何をどう判定して、その結果どうするのか。 入力の最初から、Sheet2 への更新までの流れ(シナリオ)を説明いただきたいと思っているんですが?
(β) 2017/03/19(日) 22:55
そもそも、プログラマーはバグ取りが面白いと言えるような変人がする職業です。(言い過ぎかm(_ _)m)
根気がかなり要りますので、覚悟がそれなりに必要かと思います。
ちなみに、いまどのデータを扱っているかは、
データベースシート→表示シートに転記するときに行番号を記録しておくか、
データにユニーク(※唯一無二のこと)なIDを付けて、Match関数で検索して行を取得するか、
の方法で管理することになると思います。
(まっつわん) 2017/03/19(日) 23:34
http://excel.resocia.jp/report/2029/
ただ、されたいことが実現できると思うので、
これから作るアプリの機能や外観の参考に十分なると思います。
そのうえで、「こうしたい」というのが明確になれば、
それを一つ一つ実現していくよう、質問してはいかがでしょうか?
(まっつわん) 2017/03/19(日) 23:55
(シルバーOL) 2017/03/20(月) 08:37
┌────┬─────┐
│契約番号│ │
├────┼─────┤
│場所番号│ │
├────┼─────┤
│種別 │ │
├────┼─────┤
│電話 │ │
└────┴─────┘┌─────┐
│登録ボタン│ └─────┘
「データ」シート
┌────┬────┬──┬───┐
│契約番号│場所番号│種別│電話 │
├────┼────┼──┼───┤
│ 100001│A001 │一般│ 05001│
├────┼────┼──┼───┤
│ 100002│A002 │一般│ 05002│
├────┼────┼──┼───┤
│ 100003│A003 │一般│ 05003│
└────┴────┴──┴───┘
「入力」シートモジュール
Option Explicit
Private Sub CommandButton1_Click()
Dim ixRow As Long Dim rngData As Range Dim rngID As Range
Set rngID = Me.Range("B1") Set rngData = Sheets("データ").Range("A1").CurrentRegion.Offset(1) Application.EnableEvents = False
On Error GoTo ErrH ixRow = WorksheetFunction.Match(rngID, rngData.Columns(1), 0) On Error GoTo 0
rngID.CurrentRegion.Columns(2).Copy rngData.Rows(ixRow).PasteSpecial Paste:=xlPasteValues, Transpose:=True rngID.CurrentRegion.Columns(2).ClearContents Application.EnableEvents = True Exit Sub
ErrH:
ixRow = rngData.Rows.Count rngID.Value = WorksheetFunction.Max(rngData.Columns(1)) + 1 Resume Next
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngID As Range Dim rngData As Range Dim ixRow As Long
Set rngID = Me.Range("B1") If Target.Address <> rngID.Address Then Exit Sub Set rngData = Sheets("データ").Range("A1").CurrentRegion.Offset(1) On Error GoTo ErrH ixRow = WorksheetFunction.Match(rngID, rngData.Columns(1), 0) On Error GoTo 0
Application.EnableEvents = False rngData.Rows(ixRow).Copy rngID.PasteSpecial Paste:=xlPasteValues, Transpose:=True Application.EnableEvents = True Application.CutCopyMode = False Me.Range("B1").Select
Exit Sub
ErrH:
ixRow = rngData.Rows.Count Resume Next End Sub
契約番号を空欄で、他を入力し登録ボタンで、
「入力」シート → 「データ」シート最下行の下に契約番号を追加して転記
契約番号に番号を入力で、
「データ」シートから検索して → 入力シートに転記
の例です。
叩き台にどうぞ。
テキトーに書いたから無駄が多いです。
慣れてきたら同じことを2度書かないで済むように書き直してください。
(まっつわん) 2017/03/20(月) 13:18
理解不足お許しください。
(シルバーOL) 2017/03/20(月) 23:02
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.