[[20160526070815]] 『日付の行を追加したい。』(AAAAA) ページの最後に飛ぶ

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

 

『日付の行を追加したい。』(AAAAA)

100人ほどの経費をExcelにて管理しています。
今までは月ごとにシートごとに分けておりました。

管理方法が変わり、3カ月ごとで1シート使うことになったのですが、
今まで100人分の氏名を中心にその左の列に日付、氏名の右の列に金額を入力していて空欄を作っていません。
新たに日付行を挿入すると非常に時間がかかります。

何か良い方法はありませんでしょうか。

質問の説明がわかりづらいかもしれませんがよろしくお願いします。

4/1 佐藤 1,000
4/2 佐藤 1,050

4/30 佐藤 1,800
4/1 鈴木 2,850
4/2 鈴木 3,870

佐藤さんと鈴木さんの間に5月分を挿入したい。
100人分あるので、行挿入を簡単に進めたい。

何卒、ご教授のほどよろしくお願いします。

< 使用 Excel:Excel2010、使用 OS: >


 下に追加して名前→日付の順でソートしてはどうか?
(ねむねむ) 2016/05/26(木) 09:02

コメントありがとうございます。

データは、名前が基準であるためにソートをかけずに
日付を順番に表記しなければならないのです…。

最初は5月分の日付が入った行を作り、佐藤さんと鈴木さんの間にコピーしたセルを挿入していたのですが
なにぶん人数が多いため、時間がかかってしまいました。

他に何か方法があれば、ご教授よろしくお願いします。
(AAAAA) 2016/05/26(木) 11:18


 作業列を使う。

 例として、日付がA列、名前がB列、金額がC列としてD列を作業列とする。

 まず、4月のデータの下に5月のデータを入力。

 その後D1セルに1と入力、D2セルに

 =IF(COUNTIF(B$1:B1,B2),INDEX(C$1:C1,MATCH(B2,B$1:B1,0)),MAX(C$1:C1)+1)
 と入力して下へフィルコピー。

 これで同じ名前の人には同じ番号が振られる。

 そこでD列、A列の順で並べ替えてはどうか。
(ねむねむ) 2016/05/26(木) 11:39

 名前が基準ということであれば、それは、なんとでも対応できるかと思いますが
 そもそもの要件として、今まで、月ごとにシートをわけて入力していた。
 それを新しく、3か月単位で1枚のシートにして入力をしていきたいということなんですね。

 この意味というか、実際のレイアウトと、その入力手順がみえません。
 現在のシートでは、各名前順に、あらかじめ、当該月の1日から月末日までの日付が
 枠として記入済みで、そこに各担当分の当該日付行に入力していくというものなんでしょうか?
 (鈴木さんの場合は タイトル行を除いた、31行目に 1日の実績を入力?)

 それを、新しいレイアウトとしては、佐藤さん分として 4/1〜6/30 までの日付枠が記載されている、その下に
 鈴木さんの 4/1〜6/30 までの日付枠が記載されている。そこに入力していきたいと、そういうことですか?

 で、これは、今年だけではなく来年も、まっさらな状態の4月〜6月レイアウトに対して入力していくんですよね?

 どうも、現行、どうしておられるかのイメージがクリアではないので・・・・
 現行、人別の枠があらかじめ記載されたレイアウトなのか、それとも、まっさらなシートで、各担当分の入力は
 その担当の記載されるべき場所に行挿入しながら 名前と日付と金額を入力しておられるのか?

 そのあたりは、どうなっていますか?

 それに関連してきますが、現行のレイアウト、年度の最初に作成するとき、どんな作業をしていますか?
 その年度最初のレイアウト準備を3か月ごとのものにすればよろしいと思うのですが?

 説明を読むと、4月入力が終わり、5月入力を開始するときに行挿入?
 5月入力がおわり6月入力を開始するときに行挿入?

 なぜ、そうなるか(そうしなければいけないか)が、ちょっとわかりにくいです。

(β) 2016/05/26(木) 11:42


ねむねむさん、βさん、コメントありがとうございます。

ねむねむさんの方法は今から試してみます。

βさん。
私も最初からレイアウトを三ヶ月ぶん作成すればよいと上司に伝えたのですが、
上司の意向で一ヶ月ごとに空白の行がなく、すべての人員の名前を入力するようにとの
指示があり、このような質問に至りました。

上司に意図を確認しても一蹴されてしまい、本当ところがわかりません。
現在は4月分の経費が入力されており、今から5月分の経費を入力するところになります。

(AAAAA) 2016/05/26(木) 12:00


Sub main()
    Dim rg As Range, temprg As Range, date1 As Date, date2 As Date
    Set rg = Range("A2")
    Do
        If rg.Offset(-1).Value > rg.Value Then
            date1 = DateSerial(Year(rg.Value), Month(rg.Value) + 1, 1)
            date2 = DateSerial(Year(rg.Value), Month(rg.Value) + 2, 1)
            Set temprg = rg.Offset(-1)
            rg.Resize(DateDiff("d", date1, date2)).EntireRow.Insert
            temprg.Resize(, 2).AutoFill temprg.Resize(DateDiff("d", date1, date2) + 1, 2), 2
        End If
        Set rg = rg.Offset(1)
        If Not IsDate(rg.Value) Then Exit Do
    Loop
End Sub
(mm) 2016/05/26(木) 14:11

 上司に一蹴ですか・・つらいですね。

 ところで、質問しているレイアウトですけど、4月の最初、まだ、だれも入力していない状態のシートは
 どんなシートですか?
 タイトル行だけあって、あとは 空白のシートですか?
 それとも、A列とB列はすべて埋まっていて、該当のC列にだけ入力するレイアウトですか?

(β) 2016/05/26(木) 20:29


 マクロでセットする一例です。
 1行目がタイトル行、A,B,C 列にデータあり、D列を作業列に使っています。
 (領域定義がちょっとごちゃついた感じだったのでちょっと修正しました。 21:51)

 Sub Sample()
    Dim r As Range
    Dim c As Range
    Dim days As Long
    Dim d As Date
    Dim f As Range

    Application.ScreenUpdating = False

    With Range("A2", Range("A" & Rows.Count).End(xlUp))
        d = .Cells(1).Value
        d = DateSerial(Year(d), Month(d) + 1, 1)
        days = Day(DateSerial(Year(d), Month(d) + 1, 0))
        With .Offset(, 3)
            .Formula = "=IF(B2<>B3,1,"""")"
            .Value = .Value
            Set r = .SpecialCells(xlCellTypeConstants, xlNumbers)
        End With
    End With

    For Each c In r.Offset(1)
        Set f = c.Offset(-1).EntireRow
        c.EntireRow.Resize(days).Insert xlDown
        f.Offset(1).Range("A1").Value = d
        f.Offset(1).Range("A1").Resize(days).DataSeries Rowcol:=xlColumns, Type:=xlChronological, _
            Date:=xlDay, Step:=1, Trend:=False
        f.Offset(1).Range("B1").Resize(days).Value = f.Range("B1").Value
    Next

    Columns("D").ClearContents

 End Sub

(β) 2016/05/26(木) 21:30


コメント返信:

[ 一覧(最新更新順) ]


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