[[20050818141423]] 『顧客管理』(sakura) ページの最後に飛ぶ

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

 

『顧客管理』(sakura)
 飲食業をしておりまして、顧客管理をするために入力用シートとデータシートを作成しております。
 入力用シートには、B2から下に名前・ふりがな・性別・・・とB34まで項目をふりまして
 C3から下に入力できる表をC34まで作りました。
 データシートには、並べ替えや検索をしたい関係上項目を行に作り、
 項目は全く同じですが縦横が違う表を作っております。
 データシートの表は9行目に項目があり、10行目からデータが入るものです。(AからAGまで)
 そこで、入力用シートのC列に入力したデータをコマンドボタン(例えば登録ボタン)を押すと
 データシートの空欄の一番上に入るようにしたいのです。
 同時に入力シートのデータは消去し、次データを入れていきたいのですが、
 どういうマクロを作成すればよろしいでしょうか?どなたかご教授お願い致します。

 データシートのデータ表内のセルを選択した状態で、データ→フォームを利用するのでは
 不十分でしょうか?  (Hatch)

 やってみたのですが、フィールドが大きすぎます、と表示されます。(sakura)

 あら・・・列数が1個だけ多いのかしら・・・ぎりぎりのところでExcelが拒否しますね(^^;)
 フォームでは無理なようですので、他の方の回答をお待ちください。
 # 無駄レスで、失礼しましたm(_ _)m  (Hatch)

いえいえ、とんでもないです。ありがとうございました。他の方のお返事が頂けないのは説明が分かりづらいからでしょうか・・・(sakura)


 >他の方のお返事が頂けないのは説明が分かりづらいからでしょうか・・・
 
説明内容は良く分かりました。
ただ、
「どういうマクロを作成すればよいか」
という問いに対する答えは、
「sakuraさんが提示された条件どおりのマクロを作成すれば良いですよ」
としか答えようがありません。
 
気長に待てば誰かがその条件どおりのマクロを作ってくれるかもしれませんが。
(ご近所PG)

すみません。マクロ初心者で、思うようにできないのでどなたか助けて頂きたいのです。よろしくお願い致します。(sakura)


 私ならば、以下の様にしてやって考えます。
 
 
まずは自分がやりたい内容を、その条件通りにマクロの記録機能で記録してみるとしよう。
(マクロの記録は、 ツール>マクロ>新しいマクロの記録... と選択)
選択するとマクロ名とか入力するような画面が出てきた。
ここは分かりやすく「データ登録」と言う名前にしておこう。
……よし、名前を変更した。じゃあこれでOKボタンをクリックしよう。
 
これでここから先の操作をエクセルが覚えてくれる状態になった。
 
よし、じゃあ覚えさせたい操作を実際にやってみよう。
(ここで私は以下の様に操作してみました。)
 
1.入力用シートのC2:C34をマウスなどで範囲選択
2.選択した範囲をコピー
3.データシートを選択
4.データシートのA65536を選択
5.Endキーを1回押してから矢印キーの上(↑)を押下
6.一番最後のデータ行が選択されるので、そこから更に矢印キーの下(↓)を押下
7.メニューから「編集>形式を選択して貼り付け...」を選択(又は右クリックから「形式を選択して貼り付け...」)
8.「行列を入れ替える」にチェックを入れた状態でOKをクリック
9.入力用シートを選択
10.範囲選択されている内容を削除
11.次の入力をしやすいようにC2セルを選択
 
以上で期待する動作になったのではないか。
と言う事でマクロの記録状態を停止しよう。
(マクロ記録の停止は、 ツール>マクロ>記録終了 と選択)
 
こうして出来たのが以下のマクロだ。
(マクロの内容は、 ツール>マクロ>VisualBasicEditor と選択すると見る事が出来る)
 
Sub データ登録()
'
' データ登録 Macro
' マクロ記録日 : 2005/8/18  ユーザー名 : ご近所PG
'
'
    Range("C2:C34").Select
    Selection.Copy
    Sheets("データシート").Select
    Range("A65536").Select
    Selection.End(xlUp).Select
    Range("A10").Select
    Selection.PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False _
        , Transpose:=True
    Sheets("入力用シート").Select
    Application.CutCopyMode = False
    Selection.ClearContents
    Range("C2").Select
End Sub
 
あとはこのマクロをボタンに登録してやって、クリックすれば動くんじゃないかな?
よし実際にやって見よう。
 
 
……あれ、どんなに頑張って入力しても必ずデータシートの10行目にしかデータが転記されない。
 
 
どこをどうすれば、最後の行にデータを転記できるんだろう。
マクロの中身まで詳しく触った事が無いから分からないぞ。
 
そうだ、エクセルの学校で聞いてみよう!
(ご近所PG)続く        (オダギリ・ジョー風に)

「マクロ:一番最後の次の行にデータを追記」(ご近所PG@質問者)

これこれこういう動作をさせたいと思い、マクロの記録を使って以下のようなマクロを作って見ました。

 〜マクロの内容を記述〜

ですが何度このマクロを実行しても、データシートの同じ行にしか転記されません。

どこを直せば一番最後の行に追記していく形に出来るのでしょうか?

 ----
 〜こころの声〜
よし、頑張って質問を書いて見たぞ。
誰か答えてくれるかな?ドキドキ。
(ご近所PG)

 マクロのこの部分を
 >    Selection.End(xlUp).Select
 >    Range("A10").Select
 以下の様に書き換えて見てはどうでしょうか。
    Selection.End(xlUp).Offset(1, 0).Select
    'Range("A10").Select
(ご近所PG@回答者)

 あれま〜、出来ちゃったのね。
 せっかく作ったから、一応乗せときます。
 入力用シートのC3からC34までを転記します。 (sato)

 Sub TEST()

    Dim i As Integer
    Dim myrow As Integer

    myrow = Worksheets("データシート").Range("A65536").End(xlUp).Row + 1
    For i = 1 To 32
        Sheets("データシート").Cells(myrow, i).Value = Sheets("入力用シート").Cells(2 + i, 3).Value
    Next i
     Sheets("入力用シート").Range("C3:C34").ClearContents

 End Sub

 う、失礼。ちょっとノリノリで書いてたので……もうちょい書かせてください。
(ご近所PG)

 〜こころの声〜
あ、回答がついてる!
ふむふむ……なるほど、こんな感じに書きかえれば良いのかな?
 
Sub データ登録()
'
' データ登録 Macro
' マクロ記録日 : 2005/8/18  ユーザー名 : ご近所PG
'
'
    Range("C2:C34").Select
    Selection.Copy
    Sheets("データシート").Select
    Range("A65536").Select
    Selection.End(xlUp).Offset(1, 0).Select
    'Range("A10").Select
    Selection.PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False _
        , Transpose:=True
    Sheets("入力用シート").Select
    Application.CutCopyMode = False
    Selection.ClearContents
    Range("C2").Select
End Sub
 
あ、「'Range("A10").Select」って言う部分が緑色になった。
これって無効にしたって事なのかな。
そうか、ここでA10セルが選択されるから、必ずここに貼り付けられてたのかな?
 
マクロを書き換えて実行してみよう……お、どうやら最後の次の行にデータが貼り付けられたぞ。
やった、これでデータ登録が簡単に出来るようになったぞ!
教えてくれた人にお礼を書いておこうっと。
 ----

ありがとうございます。うまく出来ました!

(ご近所PG@質問者)


 以上、終わり。satoさん失礼しました。
sakuraさん、解決できましたでしょうか。
追記:
C2から入力かと思ったけど、C3なのかしら?
でもAからAGまでだと33項目あるはず……
(ご近所PG)


 途中で、あれ??ご近所さんと同じHNの方が質問?って思ったら・・・、
 いつもの(定番)のこんな風に勉強(質問の仕方)したら良いよ・・・ってことだったんですね(^_^A;

 思わず微笑んでしまいました^^v

 質問に関係ないこと失礼しました。m(_ _)m

 (川野鮎太郎) 私も思わず答えようとしました・・・♪〜〜( ̄ε ̄;)

 ご近所さん!大変分かりやすかったです!今まで単純な作業しかできなかったのですが、幅がひろがりそうです。ありがとうございました!
 ご迷惑ついでにもう1点だけ。
 最後にクリアするC2からC34の中の、郵便番号を入れる欄2ヶ所は数式を入れていたことを忘れてまして
 自分で修正して、とりあえずは問題なく動いておるのですが、もしもっとすっきりしたコードがあるなら教えていただけませんか?
 郵便番号が入るのはC13とC16なので、私が入れたのは
 Next i
     Sheets("入力").Range("C2:C12").ClearContents
     Sheets("入力").Range("C14:C15").ClearContents
     Sheets("入力").Range("C17:C34").ClearContents
 です。

 >いつもの(定番)のこんな風に勉強(質問の仕方)したら良いよ・・・ってことだったんですね(^_^A;
思うように出来ないと言う部分に対する回答のつもりで、ちょっと書いて見た次第でございます。

 >もしもっとすっきりしたコードがあるなら教えていただけませんか?
これもまた、マクロの記録を活用して見ます。
エクセルで飛び飛びのセルを選択する方法はご存知ですか?
キーボードのCtrlキーを押しながらセルをクリックすると、
そのセルが次々と選択状態になります。
この操作をマクロの記録を使ってみると……
 
Sub Macro1()
'
' Macro1 Macro
' マクロ記録日 : 2005/8/19  ユーザー名 : ご近所PG
'
'
    Range("C2:C12,C14:C15,C17:C34").Select
    Range("C17").Activate
    Selection.ClearContents
End Sub
 
こんなのが出来ました。
色々と余分な動きはありますが、これをヒントに書き換える事が出来るのでは無いでしょうか。
(ご近所PG)マクロの記録は便利な先生

ホントですね!ありがとうございました!思った通りのものができました(^O^)
(sakura)


コメント返信:

[ 一覧(最新更新順) ]


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