アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルでマクロを作りたいのですが、
シートを2つ使い
1枚目のシートに項目が、住所 氏名 電話番号・・・・

一枚目のシートにデータを入力し 登録ボタンをおすと
二枚目のシートにデータがどんどん蓄積されていき、住所録ができるマクロを組みたいのですがやり方がわかりません。(1枚目のシートのデータは次の入力時に上書する。)

また、関数でもできるのでしょうか?

マクロの基礎の本を購入し、読みみましたが、マクロに関してはほとんど素人です。詳しい方、ご回答をお願いします。

A 回答 (4件)

こんにちわ


Sheet1 データ保存場所 (A列 氏名) (B列 住所) (C列 TEL)
Sheet2 データを入力する場所 A1 氏名 B1 住所 C1 TEL ボタン(ファームより)
仕組み
(1)Sheet2にデータを入力する。
(2)ボタンを押す。
(3)Sheet1のA行を一列挿入する。
(4)Sheet2のデータをSheet1のA行に貼り付ける。
(5)A列より後ろ(BCD・・・に同じデータが無いか見て有る場合は後ろを削除する。)
注意 主キーはA1です。
ボタンを右クリック、マクロの登録新規にて、モジュールに下記を貼り付けて下さい。
記↓
Sub Macro1()
' マクロ記録日 : 2007/8/27 ユーザー名 : test
Rows("1:1").Select
Selection.Copy
Sheets("Sheet1").Select
Rows("1:1").Select
Selection.Insert Shift:=xlDown
Range("A1").Select
Sheets("Sheet2").Select
Application.CutCopyMode = False
Range("A1").Select
Call sample
End Sub

Sub sample()
Dim key As String
Dim RCnt As Long
Dim i As Long
key = "A1"
Worksheets("Sheet1").Activate
ActiveSheet.Range(key).Select
Selection.Sort Key1:=Range(key), Order1:=xlAscending
RCnt = ActiveSheet.Range(key).CurrentRegion.Rows.Count
For i = 1 To RCnt
With ActiveCell
If .Value = .Offset(1, 0).Value Then
'Selection.EntireRow.Delete
.Offset(1, 0).EntireRow.Delete
Else
.Offset(1, 0).Select
End If
End With
Next i
End Sub

同じ名前の人も同一データと見てしまう為、主キーに管理番号を入力した方が良いと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
今、ネットで調べながら奮闘しています。
なんとかできそうです!
また、主キーの設定も自分にとってはビンゴでした。

お礼日時:2007/08/27 19:56

なぜ上書きするシート1をわざわざ作るのか理解に苦しむ。


シート2に書き込む(入力する)のとそんなに変わらない。
VBAも良くわからないうちに、背伸びです。
ですから質問は、課題丸投げです。
私見を参考に。
普通は、シート1に替えて
(1)ユーザーフォームを作り氏名、住所等を受け付けるコントロールを設けて、入力させる。
(2)データーフォームのフォームを使う
(3)シートをフォークのように似せて
   項目ごとに、見出しも含め、多列、タ行を使って設計し
   コマンドボタン等のクリックで、シート2の最後の行の
次にセットして、フォームに当たるものの項目はクリアして次ぎの
入力に備える。
ーー
既出回答は複雑ですが、簡単なのは
Private Sub CommandButton1_Click()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
d = sh2.Range("A65536").End(xlUp).Row
MsgBox d
sh2.Cells(d + 1, "A") = sh1.Cells(1, "A")
' B列以下同じようなコードを続ける
Set sh1 = Nothing
Set sh2 = Nothing
End Sub

この回答への補足

確かに背伸びかもしれません・・・
マクロは初めてだったのですが、エクセルやほかのソフトはそれなりに知識があると思っていたので、できるのではと過信しておりました。

なんとかなりそうです。
ありがとうございます。

補足日時:2007/08/27 19:58
    • good
    • 0

こんにちは。



コントロールツールのボタンをひとつ作って、
たぶん、一行目にはタイトルが入るから、2行目に入れるとすれば、こんな風ですね。


Private Sub CommandButton1_Click()
 With Rows(2)
  '2行目になにも入れていなければ、パス
  If WorksheetFunction.CountA(.Cells) = 0 Then Exit Sub
  .Copy Worksheets("Sheet2").Range("A65536").End(xlUp).Offset(1)
  '2行目をコピーする形で、Sheet2 の上から空いている行にコピーし、元の入力した行を削除する。
  .ClearContents
  'メッセージを出す
  MsgBox WorksheetFunction.CountA(Worksheets("Sheet2").Columns(1)) - 1 & "個目コピー完了"
 End With
End Sub

コピーし終わって必要なら、Sheet2 で並べ替えればよいと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。
やってみたいと思います。

お礼日時:2007/08/27 19:57

フォームを使っての入力では駄目なのでしょうか?


http://azby.fmworld.net/usage/windows_tips/20060 …
http://dreamy.boy.jp/kihon9.htm

この回答への補足

ご回答ありがとうございます。
フォーム入力も考えていましたが、1枚目のシートと他のページもリンクさせて活用したいので、質問事項のような方法を考えています。

補足日時:2007/08/27 17:06
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!