プロが教えるわが家の防犯対策術!

元のシート(Sheet1)のデータが次のように表になっております。
A列の依頼先は、未定で、決定したら、A社、B社と入力します。
D列以降は月ごとのスケジュール表となっており、☆は赤色文字、
☆と◆が入力されたセルは黄色に塗られております。
 A    B   C  D  E  F
1依頼先 装置名 台数 1月 2月 3月…
2 A社   ROBO  1   ☆ ◆
3 A社   ROBO  1     ☆ ◆
4     ROBO2  2        ☆
5 B社   ROBO3  1   ☆  ◆

A社、B社…と、会社ごとにシートが作成してあり、
表の配置はSheet1と全く同じです。
すでにいくつかの装置のスケジュールが入力されているとします。
Sheet1の依頼先の欄に、社名を入力したら、入力した行がそのまま
A社であればA社のシートにコピーされるようにしたいです。
その際に、既にA社のシートにデータがあったら既存のデータの下に
データがコピーされるようにしたい。
また、文字色・セルの色などの書式も一緒にコピーされるように
したい。
何も入力されていない空白のセルは、空白のままコピーされてほしい。
同様に、B社と入力したらその行がB社のシートに、
書式ごとコピーされるようにしたい。

社名が増えたら、会社ごとのシートを増やして随時対応したい。

以上の作業、できますでしょうか?
できれば早急に回答いただきたいです。
宜しくお願い致します。

A 回答 (2件)

こんにちは。


各社別Sheetの利用目的にもよりますが、
閲覧や印刷の目的だけでSheetを分けているとしたら、少し効率が悪いかもしれません。
集約された一つのSheetでデータの追加修正削除を行って、
閲覧/印刷時にフィルタリングするという方が良いと思われます。
そのほうがデータの一元化が図れますし、各社別Sheetにコピーする場合は、
コピー後にデータの修正や削除が行われた場合の対応も考えなければなりませんよ?

とりあえず、行をコピーする時にどんなタイミングでコピーするか、ですが、
入力直後というのはいろんな点で制御が大変になるので、
入力後、コピーしたい行のA列をダブルクリック。
という事でどうですか?
該当Sheetがなければメッセージを出して終了します。
あればコピーしてコピー後のシートの行をSelectします。

その、『元のシート(Sheet1)』のシートタブを右クリックして[コードの表示]。
VisualBasicEditor(VBE)が起動します。
そのVBE内のカーソルがあるコードペインに下記マクロをコピーペーストします。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  Dim sh As Worksheet
  Dim r As Range

  With Target
    If .Row <> 1 And .Column = 1 And Len(.Value) > 0& Then
      Cancel = True
      On Error Resume Next
      Set sh = Worksheets(.Value)
      On Error GoTo 0
      If sh Is Nothing Then MsgBox "no sheet": Exit Sub
      On Error GoTo ERRLINE
      Set r = sh.Cells(Rows.Count, 1).End(xlUp).Offset(1)
      .EntireRow.Copy r
      Application.Goto r
    End If
  End With
  Set r = Nothing
  Set sh = Nothing
  Exit Sub
ERRLINE:
  MsgBox Err.Number & vbLf & Err.Description
End Sub
    • good
    • 0

関数はデータを条件に合うシート・セルにもって行くイメージの処理には弱いのです。

エクセルの関数を少しやればそのことに気づくはずです。
関数はデータを採ってきて、置くセルから考えるものです。
それが判らないと、同じような質問を関数でやりたいと繰り返すことになります。
>A社であればA社のシートにコピーされるようにしたいです
>にA社のシートにデータがあったら既存のデータの下に
データがコピーされるようにしたい。
これらは関数ではできないか、式が非常に複雑になります。
ーーー
こういう業務的なことにエクセルを使いたかったら、VBAを勉強してください。バッチ処理(起動処理をかけたときのみ実行)になりますが。
    • good
    • 0

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