[[20080810114115]] 『名簿の自動作成』(独学の初心者) ページの最後に飛ぶ

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

 

『名簿の自動作成』(独学の初心者) Excel2002,WindowsXP

今までに幾つかエクセルの表を作成し、こちらでも何度かお世話になり活用していますが、今回は会員名簿の作成について教えて頂きたい事があります。

まだ作り初めた所で詰まってしまいましたので、取り敢えず1つお聞きしてから又頑張って作ってみてどうしても行き詰ったら教えて頂きたいと思いますので、宜しくお願い致しますm(__)m

店舗等で使っているレジ形式で、入力画面と会員名簿を作成したいと思っていますが、やはりマクロを使わないと無理でしょうか?

シート1入力画面
(常に白紙で、できれば会員番号の空番号の1番若い番号を表示して、他を入力のみ画面)

シート2会員名簿
(シート1のデーターを参照し反映で、名簿を作成)

項目(会員番号・入会日・名前・電話・住所)

シート1が入力画面とし、シート1に入力したデーターをシート2に反映したいのですが、単純に考えて、=シート1! にしてしまうと、シート1にデーターを上書きした時にシート2のデーターも変わってしまうので、どうしたら良いのか困っています。

会員空き番号自動入力もどうしたら出るのかわかりません。

宜しくお願い致しますm(__)m


 「入力画面」シート
	[A]	[B]	[C]	[D]	[E]
[1]	会員番号	入会日	名前	電話	住所
[2]	2				
 A2に
=MAX(会員名簿!A:A)+1

 「会員名簿」シート
	[A]	[B]	[C]	[D]	[E]
[1]	会員番号	入会日	名前	電話	住所
[2]	1	8月1日	○○	123	イロハ

 会員名簿シートのA列一番最終行の一つ上のセルを選択
(2003迄なら A65535 2007なら A1048575 セル)
 入力画面シートを選択した状態で、
 ●マクロの記録を開始
 1.2行目を選択
 2.コピー
 3.会員名簿シートを選択
 4.↓(最終行のセルへ移動)
 5.Ctrl + ↑(データの有る最終行へ移動)
 6.相対参照に切換
 7.↓(一つ下に移動)
 8.右クリック→ 形式を選択して貼り付け  ●貼り付け
 9.同行A列のセルを選択
 10.絶対参照に切換
 11.入力画面シートを選択
 12.B2:E2セルを選択
 13.Delete
 ■記録終了

 としてみるのはどうでしょう。

 なお、「相対参照/絶対参照 に切換」は
 マクロの記録停止ボタンの隣に有るボタンで切り替えます。
 押されている状態の時、相対参照
 押されていない状態の時 絶対参照で
 それぞれ記録されます。

 (HANA)

ご回答有難うございますm(__)m

=MAX(会員名簿!A:A)+1 ←こちらは思い通りに入ったのですが、マクロの記録のやり方が間違っているのか、記録が終了しても何も変化がなく、入力画面に入力しても会員名簿に反映されません(><)

相対参照/絶対参照 に切換は右の方に表示されている 相対参照 絶対参照 を選ぶ所でクリックして選ぶだけで良かったですか?

ボタンはなく文字を選んだだけなのですが、切り替えは合っていますでしょうか?

又宜しくお願い致しますm(__)m


 もしかして バージョンは2007をご使用 ですか?
 それ以前で有ればこちらのバーが出ると思うのですが・・・。
 ↓(3)の所の図です。
http://www.excel.studio-kazu.jp/lib/e4b/e4b.html

 文字を選んだ(何か行動をした)ので有れば
 正しく記録出来ているかもしれません。

 >入力画面に入力しても会員名簿に反映されません(><)
 入力画面に入力したあと、記録したマクロを実行して見ましたか?

 また、コードをコピーして、こちらへ載せてみて下さい。

 (HANA)

バージョンは2002です。

マクロはこの様になっています。

Sub Macro1()
'
' Macro1 Macro
' マクロ記録日 : 2008/8/10 ユーザー名 :
'

'

    Rows("2:2").Select
    Selection.Copy
    Application.Left = 189.25
    Application.Top = 32.5
    Sheets("会員名簿").Select
    Range("A65536").Select
    Selection.End(xlUp).Select
    Application.Left = 192.25
    Application.Top = 88.75
    Range("A3").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False
    Range("A3").Select
    Application.Left = 196.75
    Application.Top = 100
    Sheets("入力画面").Select
    Range("B2:E2").Select
    Application.CutCopyMode = False
    Selection.ClearContents
    Application.Left = 83.5
    Application.Top = 118
End Sub

一部色が変わっていますが、ここがエラーなのでしょうか?
この部分です。

Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _

        False, Transpose:=False


 記録が上手く行われていないようですね。

 >Selection.End(xlUp).Select
 これが「5.Ctrl + ↑(データの有る最終行へ移動)」
 の部分が記録されたコードです。

 その後、相対参照に切り替えて記録を録ると
 >Range("A3").Select
 ではなく
 ◆ActiveCell.Offset(1, 0).Range("A1").Select
 に成ると思います。

 また
 >    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
 >       False, Transpose:=False
 この部分は「8.右クリック→ 形式を選択して貼り付け  ●貼り付け」
 を記録したのだと思われますが、形式を選択して貼り付け  ●全て
 の操作をしたものが記録されています。
 >Paste:=xlPasteAll
 ではなく
 ◆Paste:=xlPasteValues
 に成るはずですから。

 ・・・貼り付けたとき、循環参照のエラーが出ませんでしたか?

 記録終了ツールバーの
 記録終了ボタンの隣には、相対参照ボタンが有ると思います。
 上で紹介した(3)と同じツールバーです。
 そちらでは、どの様なツールバーが表示されて居ますかね?

 マクロの記録を開始したとき
 1.記録終了ツールバーは表示されますか?
 2.表示されている場合
    青色の部分を左クリックすると
    「ボタンの表示/非表示(A)」が表示されますが
    そこから、ツールバーのリセット(R)
    を実行してみて下さい。
 3.表示されていない場合
    マクロの記録を開始後
    メニュー・表示(V)→ツールバー(T)
    の中から「記録終了」ツールバーを表示させてください。

 (HANA)


 済みません、一番最初にバージョンも書いて下さってましたね・・・。
 すっかり見落としてました。

 取りあえず、載せて下さったコードの上記部分を変更して
 不要部分を消して短くしたコードを載せてみます。
 やってみて下さい。
Sub 転記()
    Sheets("入力画面").Range("A2:E2").Copy
    Sheets("会員名簿").Range("A65536").End(xlUp).Offset(1, 0).Range("A1").PasteSpecial _
        Paste:=xlPasteValues, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Sheets("入力画面").Range("B2:E2").ClearContents
    Application.CutCopyMode = False
End Sub

 なお、記録時に当初
 >1.2行目を選択
 と言う事にしていましたが、
 今回の改造で「B2:E2」の範囲のみコピーする様に変更しました。

 (HANA) >今回の改造で
     変更した部分ですが正しくは「A2:E2」をコピーする必要がありました。
     コードは変更しました。8/11

 有難うございますm(__)m

先に書いて頂いたのを確認しながら自分でもう1度1からやり直していましたがなかなか成功せず、お返事が遅くなりすみませんでしたm(__)m

最後に又書いて頂いたマクロに訂正し、もう1度やってみると成功しましたヾ(〃^∇^)ノ
お手数をお掛けしてすみませんでしたm(__)m
本当に有難うございました。

でも、1つ又疑問が出てきました。。。。。。。

=MAX(会員名簿!A:A)+1 ←この部分なのですが、会員番号のセルで入力画面の方は前回通りに表示が変わるのですが、会員名簿の方は、入力画面の数字ではなく違う数字がバラバラで入ってしまい、それに合わせて次の数字が入力画面に入ります。。。。

  入力画面 ⇒  会員名簿
    2  →   12
   13  →   23
   24  →   23

こんな感じですが、マクロを見ながら何か解明できないかと探していましたが分からず、1度消して入れ直すと同じ様に入れても又違う数字が入ります。

  入力画面 ⇒  会員名簿
    2  →   12
   13  →   22 
   23  →   14

こんな感じで不規則な数字の様です。

もし操作が又何か抜けていたり、間違っていてはいけないので念の為お聞きしたいのですが、書いて頂いたマクロをコピペの後、{ 入力画面に入力→マクロを実行ボタンを押す→実行 }のみの操作で良かったですか?

これで入力画面の会員番号が変わり、データーが消えるのでここまでは合っていると思っていたのですが。。。。


 あっ・・・御免なさい。
 コピーする範囲を間違えてました・・・。
 入力画面シートのB2:E2をコピーして、会員名簿シートのA列から貼り付けると
 会員名簿シートのA列には 入会日が入ることに成りますね。
(本当は、A2:E2をコピーして、A列から貼り付け)

 ・・・この部分は訂正して下さっているのですかね?
(色々トライして頂いているようですし
 日付が貼り付いたら、もっと大きな値に成りそうですので・・・。)

 取りあえず、上のコードは変更しておきます。

 この部分以外の問題が有るようで有れば、もう一度
 1.開いている全てのブックを終了する
 2.新しいブックを開く
 3.「入力画面」シートと「会員名簿」シートを作成
 4.両シートの1行目に見出しを設定
 5.入力画面シートのA2セルに数式を入力
  (数式が、想定する値を返している事を確認)
 6.上記マクロを貼り付け
  (念のため コードは、上記マクロのみの状態にして下さい。)
 7.{ 入力画面に入力→マクロを実行ボタンを押す→実行 }

 をやってみて下さい。

 それでも上手く行かない場合は、
 手作業で、入力画面シートのA2セルをコピーし
 会員名簿シートの、A2セルに「値貼り付け」して
 どうなるか教えて下さい。

 「値貼り付け」をする方法はわかりますか?

 (HANA)


 完成しましたヾ(〃^∇^)ノ

 お返事が遅くなりすみませんでしたm(__)m

 まずお返事からですが、

 > ・・・この部分は訂正して下さっているのですかね?
 (色々トライして頂いているようですし
 日付が貼り付いたら、もっと大きな値に成りそうですので・・・。)

 これは、私も気付かなかったのですが、多分、日付の表示形式を変更しているので、
 数字を二桁入れただけで試していましたので、それでその入力した数字がたまたま
 大きな数字にならなかっただけだと思います。。。。。

 > この部分以外の問題が有るようで有れば、もう一度

 変更して頂いたので、もう1度コピペし直したら直ぐに成功しましたので、後は
 特に作業は必要なく済みました。

 あまり嬉しくて、その後ちょっと付け足したり変更したりしていて、できればその
 段階で追加で聞く事があればお願いしようと先に追加で試していましたが、一応反映は
 うまくいったのですが、追加したセルが違うセルに反映されてしまいました。。。。。

 マクロを見てもどこを触ればいいのかわかりませんでした。

 折角ここまで協力して頂いて完成したのに、又追加してお聞きして申し訳ないのです
 が、良かったらもう1つだけ教えて頂けないでしょうか?m(__)m

 追加項目と一部変更

 「入力画面」シート

   [A]	  [B]	  [C]	  [D]	
 [1]      入 力 画 面
 [2]
 [3]   会員番号	  入会日	   名前	
 [4]	  B4     C4       D4
 [5]         電話	  メールアドレス
 [6]          B6        C6:D6
 [7]   郵便番号   住  所 
 [8]          B8         C8:D8
 [9]      メ   モ
 [10]            B10:D10

 「会員名簿」シート
	[A]	[B]	[C]	[D]	[E]   [F]  [G]
 [1]	会員番号	入会日	名前	電話	メール 住所  メモ
 [2]	1	8月1日	○○	123	イロハ
 [3]

 として、マクロをこのように変更して会員名簿のシートのみ失敗しました。

 Sub 転記()
    Sheets("入力画面").Range("B4:D4,B6:D6,B8:D8,B10:D10").Copy
    Sheets("会員名簿").Range("A65536").End(xlUp).Offset(1, 0).Range("A1").PasteSpecial _
        Paste:=xlPasteValues, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Sheets("入力画面").Range("C4:D4,B6:D6,B8:D8,B10:D10").ClearContents
    Application.CutCopyMode = False
End Sub

 入力画面で最初に横に並べていた項目を、一部下に下ろしたのですが、その下ろした
 部分が会員名簿でも次の行に表示されてしまいました(><)

 何度もすみませんが、もう1度助けて頂けないでしょうか?m(__)m

 基本はマクロの記録をしたコードです。
 マクロの記録と言う事は、
 ワークシート上で行う手順 と言う事です。

 もしも独学の初心者さんが、手作業で
 入力画面シートの構成から 会員名簿シートにコピーして
 データを移すとしたら
 1.B4:D4をコピーし、A列から値貼り付け
 2.B6:D6をコピーし、D列から値貼り付け
 3.C8:D8をコピーし、F列に値貼り付け
 4.B10:D10をコピーし、G列に値貼り付け
 をすると思います。

 現在のコードの様に、
  B4:D4,B6:D6,C8:D8,B10:D10を(Ctrlを押しながら)選択し
  コピーして、A列から値貼り付け
 なんて事はしませんよね。

 通常の手順と同じようにコピーして行っても良いのですが
 セルの結合もしてありますし、行数も割と分かれて居ますので
 少し発想を変えて見るのはどうでしょう。

 現在、入力画面のレイアウトと会員名簿のレイアウトが違うので
 貼り付けるときに大変な思いをしています。
 入力画面の入力された情報を、一度 会員名簿のレイアウトと
 同じ形になるように参照し、そのセル範囲をコピーし
 会員名簿のA列から 値貼り付けすれば良い様に思います。

 例えば、入力画面シートの
 A2セルに
=B4
 B2セルに
=IF(C4="","",C4)
 E2セル(メール列)に
=IF(C6="","",C6)
 の様に事前に 会員名簿シートと
 同じ順番になるように各セルを参照。

 この行の範囲をコピーして、貼り付ける事にする。

 埋め込んである数式がおかしくなると
 正しく転記されませんので
 確認出来る場所へ表示させておくのが良いと思いますが
 基本的に独学の初心者さんが使われたり
 問題が有ったときに、回復できるので有れば
 見えない所へ配置したり、文字色を背景色と同じにして
 見えなくしたりして於いても良いかと思います。
(OFFSET関数やINDIRECT関数を使用して参照すると
 数式がおかしくなる可能性は低く成ると思います。)

 ・・・文字だけの説明になってしまいますが
 書いてある意味が分かりますかね。

 (HANA) 


 有難うございますm(__)m

 大変よくわかります(*^_^*)

 >入力画面の入力された情報を、一度 会員名簿のレイアウトと
 同じ形になるように参照し、そのセル範囲をコピーし
 会員名簿のA列から 値貼り付けすれば良い様に思います。

 実はこの方法をやりかけたんです。
 なんと言っても独学ですので、この方法を思い付いた時に
 書こうかどうしょうかと迷ったのですが、(HANA)さんの
 様に詳しい方が見ると、このやり方はアナログなやり方と
 感じるかも知れないと思い、恥ずかしくて書けませんでした(><)

 でも、自分が思い付いた事とベテランの(HANA)さんに書いて
 頂いた事が同じだったので、1つ乗り越えた様でとても
 嬉しかったですヾ(〃^∇^)ノ

 もう1度やってみます。

 今回は長い間お付き合い頂いて本当に有難うございましたm(__)m 

 何度もしつこくてすみませんm(__)m

 1つ問題がおきました。。。。。

 やってみたら直ぐにうまくできたと思ったのですが、マクロの実行と同時に
 セルの参照も消えてしまい反映されなくなってしまいました(><)

 保護を掛けてもマクロ実行するとエラーになるし、又頭を悩ませています。。。。。。

 やはり同じ形式の表でそのまま反映させるより仕方ないでしょうか?
 入力画面は下は空白なのに横はかなり横長になるので、できれば
 空白を生かして、横に送らなくてもそのまま全て入力できる様にしたい
 と思うのですが。。。。。

 それともこれもマクロにしなければ無理でしょうか?

何度も何度も本当にすみませんでしたm(__)m

この部分もマクロで作ってみたら大丈夫でしたヾ(〃^∇^)ノ
大変お騒がせしましたm(__)m

やっと完成してとても嬉しいです♪

色々有難うございましたm(__)m


 ・・・ベテランって訳でもないのですが・・・。

 マクロを作るときに、いろいろな方法が有ると思います。
 私は、「自分のできる範囲の事をする」のが良いと思っています。
 おそらく↓の様なコードでも転記出来ると思います。
Sub 配列で転記()
Dim x(1 To 7) As Variant, tbl As Variant
    tbl = Sheets("入力画面").Range("B4:D10")
        x(1) = tbl(1, 1)
        x(2) = tbl(1, 2)
        x(3) = tbl(1, 3)
        x(4) = tbl(3, 1)
        x(5) = tbl(3, 2)
        x(6) = tbl(5, 2)
        x(7) = tbl(7, 1)
    Sheets("会員名簿").Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(, 7) = x
    Sheets("入力画面").Range("C4:D4,B6:D6,B8:D8,B10:D10").ClearContents
End Sub

 でも 何か(レイアウトの変更等)有ったときに
「実は、この様に変更になって コードのどこを修正したら良いか分からない」
 なんて事にならないのは
 前者の方法だと思っています。

 勿論、せっかくマクロを使うのですから
 関数に頼らないコードに出来るのが良いとは思いますけど。
 これから、マクロスキルを磨かれて行くことと思いますから
 追々で良いんじゃないでしょうか。

 >マクロの実行と同時にセルの参照も消えてしまい
 セル内に入れた式が消えてしまった と言う事ですかね?
 でしたら、コード内に 式を入れたセル範囲の内容を
 削除する部分が有ると思います。

 上記式を入れて、マクロを実行すると 入力場所のデータが消えるので
 数式を入れたセルに何も表示されなくなる
 と言う事であれば、その様な式になっていますので、それが通常です。

 ただ、上でも書きましたが セルの移動・切り取り 等で
 数式の参照先は変わってしまう可能性が有ります。
 また、ユーザーによって式を消されてしまう可能性も有りますので
 マクロで式を埋め込む様になさったのであれば
 そちらの方が良かったかもしれません。

 (HANA)

 HANA さま

 又コードを考えて頂いて本当に有難うございますm(__)m

 >でも 何か(レイアウトの変更等)有ったときに

 そうですね。
 その後も色々追加変更しながらバージョンアップを続けていますが、
 確かにマクロでコードを入れていると変更の度にセルを書き換えないと
 いけないんですよね。。。。

 セルの書き換え程度ならわかるのですが、用語?で指示してるのが
 出てくると分からなくて又調べたりして一応頑張ってはいますが。。。。。
 マクロもまだまだ沢山経験して勉強しないと駄目ですね。

 >>マクロの実行と同時にセルの参照も消えてしまい
 >セル内に入れた式が消えてしまった と言う事ですかね?

 そうです。
 マクロ実行後に入力画面が消える様なマクロだったのに、うっかりしていて
 そこの消えるセルに=って入れたので、やはり実行の度に消えてしまって、
 その後に色々考えていて、先にHANAさんに教えて頂いたマクロの記録を利用したら
 マクロで解決するかもと思いやってみるとすんなりと成功しましたヾ(〃^∇^)ノ

 その瞬間は何とも言えない気持ちで感動しました!!

 マクロは難しいですが、関数だと消える恐れがあるので、使う時はやはり
 マクロの方が使いやすいですね(*^_^*)

 もう少し頑張って改良を重ねたいと思います(^-^)v 

 実はちょっと調子に乗ってしまい、マクロを連結してボタン1つで同時実行しようと
 大それた事を考えて改良の間に、現在も又少し詰まっているのですが、もう少し
 頑張ってどうしてもうまくいかなければ又こちらにお世話になるかも知れませんが、
 又その時は宜しくお願い致しますm(__)m

 最近、難しい事に挑戦するのが快感になってきました(^^ゞ

 私の様な独学でもこのサイトがあるので、とても心強く、思い切った事に挑戦できて
 感動も大きいので、早くHANAさんに近付けるように頑張りますp(*^-^*)q 

 本当にお世話になり、有難うございましたm(__)m


 >確かにマクロでコードを入れていると変更の度にセルを書き換えないと
 >いけないんですよね。。。。
 ですから、コードにしてしまうのは一番最後にするのが良いと思います。
  それまでは「気を付けて使用する」
  もしも何か有ったときに 回復出来る(再度入力すれば良い状態)にしておく
 等・・・・気を付ける点がいくつか有りますが
 試用期間はやはり必要だと思いますよ。
 使っていると、色々やりたい事も増えてくると思いますし。

 最初から色々心配して、しっかりしたものを作ると
 後で変更が大変です。

 >その瞬間は何とも言えない気持ちで感動しました!!
 これが有るので、エクセルって楽しいですよね。
 マクロの記録も活用しながら
 色々試してみて、頑張って下さいね。

 (HANA)


 HANA さま

 途中で旅行やらお墓参りやらで中断して頭を休めましたが、マクロの記録も追加して楽しんでいます(*^_^*)

 色々練習して頑張ります!!

 色々親切にご指導頂いて、本当に有難うございましたm(__)m

 (独学の初心者)

コメント返信:

[ 一覧(最新更新順) ]


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