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

初心者的な質問になりますが、宜しくお願い致します。

現在、部署で在庫管理を明確化するためにエクセルに在庫の部品名、個数、どこで保管されているかを表にして管理しています。そこに、検索できるように関数で検索表を作成しました。

ここまで問題なくできたのですが、ここからやりたいことをどのように作成すればいいのかアドバイスをお願いしたく質問させて頂きます。

やりたいことは、あるセルに日付、部品名、使用内容という3つの項目を入力したら、別シートに転記するというものです。

具体的に記述すると、
sheet1のA2に日付、B2に部品名、C2に使用内容を記述します。
その内容をsheet2のA2に日付、B2に部品名、C3に使用内容を転記するのですが、

単純に=Sheet1!A2とすれば、表示されます。が!!!

やりたいことはSheet1のA2、B2、C2に入力された内容を転記したときに、Sheet2では下に追加する方向にしたいのです。

例として書いてみると
sheet1に
A2に2010/11/22
B2にA
C2にA社保守部品として使用

と記述します。

その内容をsheet2のA2に日付、B2に部品名、C2に使用内容を転記します。

次の日にまた在庫から部品を使用したとします。
上記と同じように
A2に2010/11/23
B2にB
C2にB社保守部品として使用

と記述したときに

sheet2のA3、B3、C3に記述していくようにしたいと考えています。

上記で記述したように=sheet1!A2であれば、sheet1に表記が残っていれば、sheet2にも同じように表記されています。
しかし、sheet1のA2、B2、C2を消去してしまうと、同様にsheet2も消えてしまいます。
sheet2は一度記述したら内容を保持しててほしいのと、

書き込み内容があるごとにsheet2は追記していくようにしたい

ということです。

この場合、マクロやVBAで作成するほうがいいのか?それとも関数でできてしまうのか?

というところで悩んでいます。
私個人としては簡単にできるほうがいいのですが、VBAがまだ未熟なので、できれば関数でできるようならベストです。

VBAを勉強してやればいいのでは?と回答されてしまうとそれまでなのですが、現在業務上、在庫管理システムがそこまでしっかりされていないので、部署的にできるだけ早くパソコン上で在庫確認ができて、個数をしっかり管理したい。

そして、使用内容を明確にし、無駄を省きたいということを実践していきたいということで、今回質問させていただきました。

ちなみに検索内容などはすべて関数で作成しております。

どうぞ、ご教授のほど宜しくお願い致します。

A 回答 (3件)

あるセルに日付、部品名、使用内容という3つの項目を入力したら、別シートに転記するというものでしたら、その別シートに直接入力したほうがいいと思いますが、どうしても自動転記が必要でしたらVBAになります。

    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。

やはり、直接入力が一番ですか。

やはりVBAになりますよね。
関数でできるのであれば良かったのですが・・・・

ありがとうございました。

お礼日時:2010/11/22 12:59

記録として残しておきたいのならVBAでするしかないですね。


では全自動で実行するマクロの一例です。
手順は下記のとおりです。

1. 該当するシート(Sheet1)のタブを右クリックして、[コードの表示]。
2. 出てきた白い所に、以下のコードを貼付けます。

'********これより下**********

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim i As Long
  If Intersect(Target, Range("A2:C2")) Is Nothing Then Exit Sub
  With Sheets("Sheet2")
    i = .Cells(Rows.Count, "A").End(xlUp).Offset(1).Row
    .Range(.Cells(i, "A"), .Cells(i, "C")).Value = Range("A2:C2").Value
  End With
End Sub

'********これより上**********

3.Alt+F11キーでワークシートへもどります。

これでOK

A2からC2に入力する都度自動で実行されます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
さらに、VBAのコードまでありがとうございます。

早速やってみましたが、望んでいるような動きになりました。
しかし、一度入力ミスをするとそのミスまで反映されるようです。

少し私自身でも調べながらやってみます。

一番いいのは入力後釦など設置して釦押下したら転記できるような方向にしてみようと思います。

お礼日時:2010/11/22 13:03

ANo2 です。


すみません。駄目の見本のようなコードを書いてしまいました。
お昼に何を食べようか考えていて、まるで初心者のようなミスをしておりました。
(おなかが膨れたら気が付きました)
赤面です。(///▽///)

修正します。

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim i As Long
  If Intersect(Target, Range("A2:C2")) Is Nothing Then Exit Sub
  If Target.Count > 1 Then
    If Application.CountA(Target) > 0 Then
      MsgBox "複数セルの同時入力しないでください。"
      Application.EnableEvents = False
      Application.Undo
      Application.EnableEvents = True
      Exit Sub
    End If
  End If
  With Sheets("Sheet2")
    i = .Cells(Rows.Count, Target.Column).End(xlUp).Offset(1).Row
    .Cells(i, Target.Column).Value = Target.Value
  End With
End Sub

3セルとも確定後
ボタンを押して転記なら
以下を標準モジュールに書いて、ワークシート上に配置した「フォーム」のボタンにセットしてください。

Sub Tenki()
  Dim i As Long
  With Sheets("Sheet2")
    i = .Cells(Rows.Count, "A").End(xlUp).Offset(1).Row
    .Range(.Cells(i, "A"), .Cells(i, "C")).Value = Sheets("Sheet1").Range("A2:C2").Value
  End With
End Sub
    • good
    • 0
この回答へのお礼

回答ありがとうございます!!!

大変助かりました。自分がやりたいことがまさにできました!!!
ありがとうございます。

お礼日時:2010/11/22 16:20

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