• ベストアンサー

Excelのデータでコピペの良い方法は?

出社日 帰社日 氏名 出社時間 帰社時間 仕事内容 171216 171216 伊藤  8:00  17:00   ○○ 171216 171216 伊藤  空白   空白 △△ 171218 171219 伊藤 8:00   10:00   ○○ 171220 171221 伊藤  8:00 14:00   ○○ 171221 171222 伊藤 空白   空白    ×× 171225 171226 伊藤  8:00 10:00   □□ このようなデータを 日付 出社時間 退社時間 171216  8:00 17:00 171217 空白   空白 171218  8:00 空白 171219  空白   10:00 171220 8:00 空白 171221 空白   14:00 このように日付毎に出社時間、退社時間のみ抜き出して、違うシートに作成したいのですが、何か良いコピペの方法など 有りましたらお教えいただきたく、宜しくお願いします。 わかりにくい上にデータの表示が見にくくて、すいません。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.14

こんにちは。 >日付  出社時間 帰社時間 出社時間 帰社時間 …AX列まで続く >171216  空白    空白    6.1    16.35    7 … ログを通して読み直しながら、#9のコードと#13のデータを途中で正しく張り合わせれば、どう考えてみても、そのようなことになることはありえないと思っております。確か、途中まで出来ていたので、その部分の修正だけであって、並べ替えなどの機能を取り付けることだけだった、ということだったはずです。それが、なぜ、まったく表の形態が崩れてしまったのかは、こちらでは、見当がつきません。 ひとりの人が、四六時中、出と入を繰り返しているとか、元のデータに複数の人が混じっている場合は、この限りではありません。 最初に、オートフィルタで「ひとりに選定」してからでないと、時間に論理矛盾を起こしますので、現在のマクロでは、そのような集計は不可能です。「伊藤さん」なら「伊藤さん」のデータを出していただかないといけません。また、掲示板で出しているサンプルと、生データとはかなり開きがある場合も、予想外のことがあるかと思います。 現状では、複数の人を振り分けするような機能を持っておりません。つまり、転記した後の段階を知らされておりませんので、シートごとに分けるにしても、シート自体の指定は、人がするように出来ております。 (それ自体は可能なのですが、設計の段階で、もう一度、最初から積み上げないと、現在のコーディングの中で直すのは、返ってややこしくなってしまいます。) .

harugassan
質問者

お礼

いろいろとお世話になり、本当にありがとうございました。 自分でももっと勉強して、出来るだけ頑張ってみたいと思います。

その他の回答 (13)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.13

----前の続きです。------ #9 の途中の ※ペースト部分から、最後まで上書きになります。 '-------------------------------------------------- 'ペースト PasteposFind:   Dim m As Integer   Dim n As Integer   Dim o As Integer   Dim buf As String   On Error Resume Next   Set PastePos = Application.InputBox("ペーストする場所の左上端を選択してください。", "データペースト", "$A$1", Type:=8)   On Error GoTo 0   If PastePos Is Nothing Then Exit Sub   Set PastePos = PastePos.Cells(1)   If PastePos.Value = "" Or PastePos.Offset(2).Value = "" Then    MsgBox "表がないと貼り付けられません。"    GoTo PasteposFind   End If   If PastePos.Address = r.Address And _   PastePos.Parent.Name = r.Parent.Name Then MsgBox "同じ場所には貼り付けることが出来ません。", 64: GoTo PasteposFind       Set r2 = Range(PastePos, PastePos.End(xlDown))     Application.Goto r2.Cells(1) '移動     With r2.Offset(1, 1).Resize(r2.Rows.Count - 1, r2.CurrentRegion.Columns.Count)    If WorksheetFunction.CountA(.Cells) > 1 Then     If MsgBox("データのみ削除しますがよろしいですか?", vbOKCancel) = vbCancel Then Exit Sub      .ClearContents    End If   End With   Application.ScreenUpdating = False   For j = LBound(inData, 2) To UBound(inData, 2)    On Error Resume Next    mRow1 = 0    mRow1 = WorksheetFunction.Match(inData(0, j), r2, 0)    If mRow1 > 0 And inData(1, j) <> "" Then      Do      If IsEmpty(r2.Cells(mRow1, 2 + m * 2)) Then       r2.Cells(mRow1, 2 + m * 2).Value = inData(1, j)       Exit Do      Else       m = m + 1      End If      Loop    End If    mRow2 = 0    mRow2 = WorksheetFunction.Match(outData(0, j), r2, 0)    If mRow2 > 0 And outData(1, j) <> "" Then     Do      If IsEmpty(r2.Cells(mRow2, 3 + n * 2)) And _       r2.Cells(mRow2, 2 + n * 2) < CDate(outData(1, j)) Then       r2.Cells(mRow2, 3 + n * 2).Value = outData(1, j)       Exit Do      Else       n = n + 1      End If      Loop    End If    On Error GoTo 0    m = 0: n = 0   Next j   With PastePos   Range(.Offset(, 4), .Offset(, 4).End(xlToRight)).ClearContents   End With   With r2.CurrentRegion.Columns   If .Count > 3 Then     For o = 1 To .Count - 3      .Cells(1, 3 + o).Value = .Cells(1, 1 + o).Value     Next    End If   End With   Application.ScreenUpdating = True   '並べ替えのオプション     If MsgBox("データの並べ替えが必要ですか?", vbOKCancel) = vbOK Then    Call TimeOrdering(PastePos)   End If   Set r = Nothing: Set r1 = Nothing: Set r2 = Nothing   Set PastePos = Nothing End Sub Sub TimeOrdering(TopCell As Range) '----------------------------------- '貼り付けシートの並べ替えのオプション '----------------------------------- Dim c As Range Dim i As Integer Dim u As Integer Dim j As Integer Dim t As Variant Dim EndCol As Integer  Application.ScreenUpdating = False  EndCol = TopCell.CurrentRegion.Columns.Count  For Each c In Range(TopCell, TopCell.End(xlDown))   If IsNumeric(c.Value2) Then      i = 1      u = Int((EndCol - 1) / 2)     Do While i < u      j = u       Do While j > i       '並べ替え        If c.Offset(, j * 2 - 1).Value < c.Offset(, i * 2 - 1).Value Then        t = c.Offset(, j * 2 - 1).Resize(, 2).Value        c.Offset(, j * 2 - 1).Resize(, 2).Value = c.Offset(, i * 2 - 1).Resize(, 2).Value        c.Offset(, i * 2 - 1).Resize(, 2).Value = t       End If       j = j - 1       Loop       i = i + 1     Loop   End If  Next c  Application.ScreenUpdating = True End Sub

harugassan
質問者

補足

お礼が遅くなって申し訳ありません。 せっかく皆さんが良い回答を出してくれているのに… 事情があってパソコンをさわる時間が無く、返信が遅くなってしまいました。Wendy02さんのご厚意に感謝いたします。 このマクロを実行してみたところ、下記のようになりました。 《元のデータ》 出社日 帰社日 氏名 出社時間 帰社時間 171216 171216 伊藤   7.20   18.30 171216 171217 伊藤   19.16   10.13 171219 171219 伊藤   空白   空白 171219 171220 伊藤   20.30   15.00 171219 171219 伊藤   7.50    16.10 171220 171220 伊藤   空白   空白       《マクロで振り分けたデータ》 日付  出社時間 帰社時間 出社時間 帰社時間 …AX列まで続く 171216  空白    空白    6.1    16.35    7 … 171217  空白    空白    空白    空白    空白… 171218  空白    空白    空白    空白    空白… 171219  3      13     4.15    14.1    6.4… 171220  5      空白     5.27    8.5    6.1… 171221  3.3     空白     4.3    7.1     5.55… … このようにずらーっと列が増えてしまい、そこにランダムに数値が並んでいます。何かやり方が悪いのでしょうか? また、私の説明不足で申し訳ありませんが、時間データの区切りは:ではなく.でした。例(誤7:20→正7.20)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.12

こんにちは。Wendy02です。 私は、4年前、日勤の配達のデータ集計表に携わったことがあります。その時は、マクロも出来ずに、私は、中途半端なことしか出来ませんでしたが、今、その時の挽回をしているような気がします。 >           出社   帰社  出社 >171219 171219 伊藤   7:50    16:10 >171219 171220 伊藤   20:30   15:00 >に関しましても、並び替えを行っていなかったため、確かにこのような形が正しいものです。 データの入力の際に、そういデータが発生するという意味ですよね。 今回、ペーストの部分のみの修正ですが、エラーの発生しやすいところを修正したのと、並べ替えオプションを加えました。試してみたところ、データ入力の間違いまでは、今のコードでは、検出は不可能でした。 つまり、発生する可能性として、「人の名前を間違えて振り分けした時」になります。しかし、表にした時に、おそらくは、出社時間が1つもないのに、帰社時間が二つ出てきたりします。それは、原票をチェックしたほうがよいですね。 それと、エラー検出で、そんなことはないはずですが、 オートフィルタの  出社日 帰社日 氏名 出社時間 帰社時間 このタイトル行の1つを消去してしまうと、マクロで、 「正しく最左列を選択してください。」 として、進んでいきません。 もし、こういうミスがありえる、とすれば、 If Not (WorksheetFunction.CountA(r1.Rows(1)) = 5 And r.Cells(1).Value <> "") Then MsgBox "正しく最左列を選択してください。", 16: Exit Sub このエラー検出コードは、ないほうがよいかもしれませんね。エラーを出して、自分でもわかりませんでしたから。余計なお世話のエラーチェックのような気がしてきました。 ここの掲示板は、しばらく開けておいて、エラーが発生するか、不明な問題点があるか、なるべく、すぐに締めないほうがよいですね。 なお、私の方は、Excelのマクロで、ここの掲示板にアクセスしていますので、こちらが気にしている限りは、「済み」になるまでは、チェックは出来ます。 このレベルになると、私も、コードだけでは自信が持てません。 次のスレッドにコードを置いておきますので、最低、2回の書き込みが出来ます。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.11

#6,#8です。 下記のように、関数を用いて、Sheet1の1行を2行にし、出社時間と帰社時間を別行にしてみました。 この結果は使えますか。もし使えるなら、それに加えて、さらに行うべき(満たすべき条件など)、作業を補足してみてください。 たとえばこういう行は不要など。もしそういうのなら、並べ替えを行って、ある部分の行を削除すれば、達成できると思う。 例データ Sheet1に 171216 171216 伊藤 8:00 17:00 ○○ 171216 171216 伊藤 空白 空白 △△ 171218 171219 伊藤 8:00 10:00 ○○ 171220 171221 伊藤 8:00 14:00 ○○ 171221 171222 伊藤 空白 空白 ×× 171225 171226 伊藤 8:00 10:00 □□ Sheet2の A1に=INDEX(Sheet1!$A$1:$F$6,INT((ROW()-1)/2)+1,COLUMN()) B1に=INDEX(Sheet1!$A$1:$F$6,INT((ROW()-1)/2)+1,COLUMN()) C1に=INDEX(Sheet1!$A$1:$F$6,INT((ROW()-1)/2)+1,COLUMN()) D1に=IF(MOD(ROW(),2)=1,INDEX(Sheet1!$A$1:$F$6,INT((ROW()-1)/2)+1,COLUMN()+MOD(ROW()-1,2)),"") E1に=IF(MOD(ROW(),2)=1,"",INDEX(Sheet1!$A$1:$F$6,INT((ROW()-1)/2)+1,COLUMN())) B1,C1はA1を横方向に+ハンドルを引っ張ればよい。 D1とE1に少し細工が要る。 A1:E1を6*2=12行下方向に式を複写する。 結果 Sheet2に(実際やってもらえば、下記の見た目と違い、出社時間 帰社時間は別列で出ます) 171216 171216 伊藤 8:00 ○○(8:00はD列) 171216 171216 伊藤 17:00 ○○(17:00はE列) 171216 171216 伊藤 空白 △△ 171216 171216 伊藤 空白 △△ 171218 171219 伊藤 8:00 ○○ 171218 171219 伊藤 10:00 ○○ 171220 171221 伊藤 8:00 ○○ 171220 171221 伊藤 14:00 ○○ 171221 171222 伊藤 空白 ×× 171221 171222 伊藤 空白 ×× 171225 171226 伊藤 8:00 □□ 171225 171226 伊藤 10:00 □□

harugassan
質問者

お礼

お礼が遅くなって申し訳ありません。 せっかく皆さんが良い回答を出してくれているのに… 事情があってパソコンをさわる時間が無く、返信が遅くなってしまいました。 このような関数を使って、行をずらす事も可能なんですね!出社時間と退社時間の行がずれれば、これを加工してなんとか希望の形に近づけそうです。本当にありがとうございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.10

こんばんは。 データを一目みて理解できましたが、それは、ちょっと、どう扱ってよいのか、今は、手がつけられません。もう少し、説明してくださいませんか? 以下のようなデータですと、手作業でも私はわからないのです。何か、長距離の運転手さんの出勤簿のような気がします。 《元のデータ》で、 171216 171216 伊藤   7:20   18:30 171216 171217 伊藤   19:16   10:13 このようなことは、まったく予想されていないからなのです。 同日で、帰社,出社があるというのは、予定外の内容なのです。 少なくとも、 171216 172117 という日計の区分けでは、今のままでは、確保したデータが飛んでしまいます。 それは、どのようになるのを予想されていますか?     出社   帰社 171216 7:20   18:30 171217      10:13 このようになることでしょうか?それとも、     出社   帰社   出社 171216 7:20   18:30  19:16 171217      10:13 というようなものですか? そうすると、おそらく、左から埋めていくような形になるかと思います。 『予想図』      帰社  出社   帰社   出社 171216      7:20   18:30  19:16 171217  10:13 それから、         出社   帰社    出社 171219 171220 伊藤   20:30   15:00 171219 171219 伊藤   7:50    16:10 これは、たぶん、時系列で逆になるだろうから、         出社   帰社  出社 171219 171219 伊藤   7:50    16:10 171219 171220 伊藤   20:30   15:00 ということですか?

harugassan
質問者

補足

何度もありがとうございます。 >長距離の運転手さんの出勤簿のような気がします。 その通りです。ドライバーの毎日の出勤形態を記録してあるものが、ここで言う《元のデータ》ということです。(Excelに変換したもの) 途中、飛んでしまっている日付は出勤していないということ。 出勤・退社とも同じ日付がかぶっている部分は仕事内容が違うということです。 >同日で、帰社,出社があるというのは、予定外の内容なのです。 これは、私の説明不足でした。申し訳ありません。 ドライバーなので、時間が不定期なこともあり、同日で出社が二回有るような場合もあります。 一番ベストな振り分け方はWendy02さんのおっしゃるとおり           帰社  出社   帰社   出社 171216      7:20   18:30  19:16 171217  10:13 というように正確に出せればありがたいです。 それから            出社   帰社  出社 171219 171219 伊藤   7:50    16:10 171219 171220 伊藤   20:30   15:00 に関しましても、並び替えを行っていなかったため、確かにこのような形が正しいものです。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.9

こんばんは。Wendy02です。 >マクロが理解できていないと無理なようでしたら、はっきりおっしゃっていただけたらありがたいです。 そんなことはありません。こちらが作ったマクロを貼り付けるだけですから、記録マクロでマクロを記録したことがあれば、なお良いのですが、なくてもキーを押していくだけです。後は、私が、マクロがどのぐらい相手本位に作っているか、とか、私がご質問を勘違いしていなかったとか、とか、私自身の問題だと思います。今回は、内容こそは簡単なのですが、細かいところに気を使ったつもりです。コアになる部分は、ほんのちょっとで、後は、ユーザーさんをまご付かせないための配慮です。 ※ マクロの取り付け方 Alt +  F11 (Altを押しながらF11)を押すと、Visual Basic Editor 画面が出てきます。 次に、メニューの[挿入]-[標準モジュール]と開けて、クリックすると、画面が現れますので、以下のコードを貼り付けて、 貼り付けたら、Alt + Q で、画面を閉じます。 '<標準モジュールに貼り付けてください。> '--------------------------------------------------- 'Option Explicit Sub CopyArrangePickup() '出社・帰社データを振り分けるマクロ   Dim inData() As Variant   Dim outData() As Variant   Dim i As Long   Dim j As Long   Dim k As Long   Dim r As Range   Dim r1 As Range   Dim r2 As Range   Dim mRow1 As Long   Dim mRow2 As Long   Dim PastePos As Range   ReDim inData(1, 0)   ReDim outData(1, 0)     'フィルター選択モードチェック   If ActiveSheet.FilterMode = False Then MsgBox "オートフィルターの選択モードではありません。", 64: Exit Sub     'データ取得   On Error Resume Next   Application.SendKeys "{HOME}{END}"   Set r = Application.InputBox("データソースの左上端のタイトル・セルを選択してください。", "データコピー", "$A$1", Type:=8)   If r Is Nothing Then Exit Sub   Set r = r.Cells(1)   Beep   Set r1 = Range(r, r.End(xlDown)).Resize(, 5) '必要なデータが5列目まで   On Error GoTo 0     If r1 Is Nothing Then: Exit Sub   If Not (WorksheetFunction.CountA(r1.Rows(1)) = 5 And r.Cells(1).Value <> "") Then MsgBox "正しく最左列を選択してください。", 16: Exit Sub   '1行目をタイトル行とする   For i = 2 To r1.Rows.Count    ReDim Preserve inData(1, k)    ReDim Preserve outData(1, k)    If r1.Cells.EntireRow.Hidden = False Then      inData(0, k) = r1.Cells(i, 1).Value2      inData(1, k) = r1.Cells(i, 4).Text      outData(0, k) = r1.Cells(i, 2).Value2      outData(1, k) = r1.Cells(i, 5).Text      k = k + 1    End If   Next i     'ペースト部分   PasteposFind:     On Error Resume Next   Set PastePos = Application.InputBox("ペーストする場所の左上端を選択してください。", "データペースト", "$A$1", Type:=8)   On Error GoTo 0   If PastePos Is Nothing Then Exit Sub   If PastePos.Value = "" Or PastePos.Offset(2).Value = "" Then    MsgBox "表がないと貼り付けられません。"    GoTo PasteposFind   End If   If PastePos.Address = r.Address And _   PastePos.Parent.Name = r.Parent.Name Then MsgBox "同じ場所には貼り付けることが出来ません。", 64: GoTo PasteposFind     Set r2 = Range(PastePos, PastePos.End(xlDown))   Application.Goto r2.Cells(1)   With r2.Offset(1, 1).Resize(r2.Rows.Count - 1, 2)    If WorksheetFunction.CountA(.Cells) > 1 Then     If MsgBox("データのみ削除しますがよろしいですか?", vbOKCancel) = vbCancel Then Exit Sub      .ClearContents    End If   End With   Application.ScreenUpdating = False   For j = LBound(inData, 2) To UBound(inData, 2)    On Error Resume Next    mRow1 = 0    mRow1 = WorksheetFunction.Match(inData(0, j), r2, 0)    If mRow1 > 0 And inData(1, j) <> "" Then      r2.Cells(mRow1, 2).Value = inData(1, j)    End If    mRow2 = 0    mRow2 = WorksheetFunction.Match(outData(0, j), r2, 0)    If mRow2 > 0 And outData(1, j) <> "" Then      r2.Cells(mRow2, 3).Value = outData(1, j)    End If    On Error GoTo 0   Next j   Set r = Nothing: Set r1 = Nothing: Set r2 = Nothing   Set PastePos = Nothing   Application.ScreenUpdating = True End Sub '-------------貼り付け終わり----------------------------------- なお、このままですと、起動が面倒なので、できれば、コマンドボタンを取り付けると便利です。(ショートカットですと、他の方が使う時に分りにくいです。) 取り付け方は、メニューバーの何もないところを右クリックすると、カスケードメニューが現れますから、その中で、[コントロールツールボックス] をクリックしてください。 その中をマウスポインターでなぞっていくと、[コマンドボタン]というクリーム色のポップアップ・ヒントが現れますので、[クリック] ワークシート上で、適当な場所をドラッグして、四角い枠を囲みますと、ボタンになります。白い小さな四角□が並んでいる状態かと思います。それを[ダブルクリック]すると、画面が、VB エディター画面に変ります。 Private Sub CommandButton1_Click() End Sub    ↑ このようになっていますので、   このようにします。そのまま、全部を貼り付けてもよいです。 '------------------------------- Private Sub CommandButton1_Click() Call CopyArrangePickup '書き込み End Sub '------------------------------- 画面の上部のツールバーには、青い三角定規が凹んでいますので、[クリック] もう一度、Alt + Q で、画面を閉じてしまいます。 また、メニューの何もないところで、右クリックして、カスケードメニューの中の[コントロールツール・ボックス]をクリックすれば、このメニューは消えます。 後は、そのボタンをクリックすれば、実行できます。 ○ マクロの実行の前に、 ※オート・フィルターで、氏名の1人を選択します。 選択していないと、マクロは、進んでくれません。 ペーストのシートには、すでに、以下のように、時系列に日付が並べられていることが条件です。私の作ったマクロは、日付のあるところを探しますので、ないものは転記してくれません。それを気をつけてください。 データは、どちらも、必ずしも、左端上のA1 から始まっていなくてもよいです。 ペースト先は、 日付  出社時間   退社時間 171216  ←元のソースデータがシリアル値なら、シリアル値で 171217  統一してください。数字なら数字で可能です。 171218  文字の数字と数値では、検索しません。 171219 171220 171221 171222 171223 171224    出社時間と退社時間にデータがあると、削除して良いか聞いてきます。 マクロは、順を追って、メッセージボックスが現れます。ペーストする時は、シートを替えることが出来ます。

harugassan
質問者

補足

何も分からない見ず知らずの私に、こんなに丁寧にご回答下さって、本当にありがとうございます(嬉涙(T_T)) きっと貴重なお時間を割いて作ってくださったのでしょう。 本当に感謝していますm(_ _)m 一応、お教えいただいたとおり、マクロを組んでみましたが、 下のように何故か振り分けがうまくいきませんでした。 どこか私のやり方がおかしいとは思うのですが、もしお時間が有れば、教えてください。 《元のデータ》 出社日 帰社日 氏名 出社時間 帰社時間 171216 171216 伊藤   7:20   18:30 171216 171217 伊藤   19:16   10:13 171219 171219 伊藤   空白   空白 171219 171220 伊藤   20:30   15:00 171219 171219 伊藤   7:50    16:10 171220 171220 伊藤   空白   空白       《マクロで振り分けたデータ》 日付  出社時間  帰社時間 171216  空白    空白 171217  空白    空白 171218  8:45    空白 171219  9:05    空白 171220  7:20    空白 171221  空白    空白 本当にお時間が有るときで結構です。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.8

#6です。#6は離れた複数行をコピーする方法を述べたもので、この質問には、ふさわしくないですね。 改めて読んでも、質問の例から、何がしたいかよくわかりませんでした。上の表からどうして、下の表が出るのか、例だけでなく、言葉・文章を添えて、説明してみてください。 そのルールあたりは、回答者に推測させるのでなく、質問者側で、並みの回答者にわかるように、説明してほしいです。 >日付毎に出社時間、退社時間のみ抜き出して、違うシートに作成したいのですが・・ がなぜ質問の下の表になるのか分かりませんでした。

harugassan
質問者

補足

私の説明不足で、皆さんを困惑させてしまうような質問をしてしまい、大変申し訳ありません。Wendy02さんの補足欄にも書きましたように、上の表のおおもとのデータは1日毎に並んでいるわけでもなければ、一行に対して出社日及び出社時間と帰社日及び帰社時間がずれている場合も有り、一貫性が有りません。この一貫性の無いデータを、下の表のような新しいシートの一日毎に並んだ日付列の脇に、時間のみ正確に抜き出してペーストしたいのです。 例えば、上の表の3行目を例に挙げると、 (12月18日に会社を出て、19日に帰社した) 《おおもとのデータ》 出社日 帰社日 氏名 出社時間 帰社時間 171218 171219 伊藤   8:00    10:00         ↑            ↑ このままだと一行にあるデータが2日間にまたがってしまっているため、コレを一日毎にさせたいのです。 (12月18日に会社を出て、19日に帰社した) 《新しいシート》  日付  出社時間 帰社時間 171218   8:00   171219          10:00    本当に説明がへたくそでごめんなさい。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.7

こんにちは。 少し確認しますが、 ペースト側は、1日ずつ、時系列に並んでいますね。 そして、以下のような元のシートが出来上がっているわけですね。 日付   出社時間  帰社時間 171216 171217 171218 171219 171220 171221 その反面、オートフィルタで、人名で抽出したものは、以下のようになっていて、出社と帰社には、同一の日ではないわけですね。 出社日 帰社日  出社時間  帰社時間 171216 171216 171216 171216 171218 171219 171220 171221 171221 171222 171225 171226 必ずしも、1日ずつ並んでいるわけでもなければ、ペースト側に対応した並びになっているわけではありません。もし、そのようでしたら、これを自動的に行うのは、マクロ以外には不可能だと思います。あまり簡単なマクロではないでしょうけれど、もし、マクロでも良いのでしたら、私のほうで作ってみます。

harugassan
質問者

お礼

返信が遅くなってしまい申し訳ありません。 現在、なぜか補足質問の方に書き込みが出来ない状態のため、お礼の方に補足を書かせていただきます。 Wendy02さんのおっしゃるとおりです。 おおもとのデータは必ずしも、1日ずつ並んでいるわけでもなければ、出社日と帰社日が揃っているわけでもないのです。 私はまだまだExcel初心者のため、《マクロ》というものはまったくもって分かりません。このような私でも分かるようであれば、教えていただけたら幸いです。 マクロが理解できていないと無理なようでしたら、はっきりおっしゃっていただけたらありがたいです。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.6

昨日も、似た質問があったが、 (1)Sheet1で、日付の列(A列)の列番号(記号)部をクリック (注意)このとき、CTRLキーを押さないこと(肝心) (2)CTRLキーを押し始めて、押したまま出社時間(D列)と退社時間の列(E列)をクリックする。 これで3列全体が選択される。 (3)編集ーコピー (4)Sheet2とかに意って、A1をポイントして、編集-貼り付け (結果) A、B,C列にSheetのA,D,E列が列的に詰めて複写される。 編集ーコピーなどは、CTRL+C,CTRL+Vでも可。 (1)のだんかいからCTRLを押すとエラーになるでしょう。

harugassan
質問者

お礼

返信が遅くなってしまい申し訳ありません。 この方法ですと、おおもとのデータを見ると、一行に対して出社日と帰社日がずれてしまっている場合があるため、新しいシートの日付列の脇にうまくペーストすることが出来ません。 アドバイスありがとうございます。

  • walsh
  • ベストアンサー率41% (77/185)
回答No.5

こんにちは。 まず、基のシートの複製を作成する。 オートフィルタを解除して、全データを表示させる。 データの範囲を全て選択して、並べ替えを 最優先キー:氏名、2番目の優先キー:出社日 で実行する。 この操作で、基のデータが、氏名順・出社日順に並べ変わりますので、 その後で不要な列を削除したらどうでしょうか。

harugassan
質問者

お礼

返信が遅くなってしまい申し訳ありません。 この方法ですと、おおもとのデータを見ると、一行に対して出社日と帰社日がずれてしまっている場合があるため、新しいシートの日付列の脇にうまくペーストすることが出来ません。 アドバイスありがとうございます。

  • cockerel
  • ベストアンサー率46% (253/548)
回答No.4

何となくわかりました。 抜けている日付を入力し、残りをダミーデータもしくは空白にします。 一例: 飛び飛びのデータの日付を新しい列にコピーします。 その後ろに連続日付データを作成します。 日付およびデータ(日付を優先)で全体をソートします。 日付セルの1つ上を参照して同じ日付でないときに日付セルをコピー、同じときは空白という関数のセルを作ります。 最後に関数のセルのある列でソートし、コピーして値(式が含まれているため)をペーストします。 これで 171216 171216 171217 171218 171218 171219 171220 171220 のようになると思います。 より具体的な方法が必要でしたら、おっしゃってください。また書き込みます。 はずれでしたら、ごめんなさい(よくあります)。

harugassan
質問者

補足

返信が遅くなってしまい、申し訳ありません。 私自身、Excelがまだまだ理解できていない部分が多いため、関数に関しては本当に初歩的なものしか分かりません。 もしお時間があれば、 >日付セルの1つ上を参照して同じ日付でないときに日付セルをコピー、同じときは空白という関数 を教えていただければ幸いです。

関連するQ&A

  • 【EXCEL VBA】データの並べ替えの方法

    元データが左から右へ氏名コード、日付(2011/5/1)、出社時刻、退社時刻、日付(2011/5/2)、出社時刻、退社時刻、・・・・・日付(2011/5/31)、出社時刻、退社時刻、と順に1ヶ月分入力されています。(画像上) このデータを一番左端に氏名コード、上から日付(2011/5/1)、出社時刻、退社時刻、行を変えて日付(2011/5/2)、出社時刻、退社時刻、・・・・・日付(2011/5/31)、出社時刻、退社時刻。(画像下)と言う形に行・列の並べ替えをしたいと考えています。 EXCELの機能である、「コピー→編集→形式を選択して貼り付け→行列を入れ替える」では対応できず、VBAマクロ又は関数で試みようとしましたが、こちらも対応方法が見つかりません。 何かいい方法がございましたら、ご指導のほど宜しくお願い致します。 尚、作業環境はWindows7、MS office2010です。 

  • EXCELでデータを抽出してコピペしたいです

    指定した日付より、それ以前の誕生日(指定日も含む)の人だけを抽出してコピペしたいのですが WORKBOOK1のSHEET1(名簿)のH列に生年月日(他の列にもデータあります) データは、1200件(行)あります。 WORKBOOK2のSHEET1(該当者)名簿と配列は同じです。 A1に指定の日付をいれます。 WORKBOOK1のSHEET1(名簿)より抽出したデータのペースト位置は、A3からです。 VBAで可能でしょうか?

  • エクセルで同じ名前の該当データを抽出する方法

    よろしくお願いします。 昨日質問させていただき、ご回答を頂き、既に締め切っている内容について、困っております。 締め切った質問は、QNo.3223413「エクセルの関数?について」 質問内容は、 「お世話になります。 今、次のような調書を作成中ですが、処理効率を上げるためにエクセルの関数?を活用してと考えております。 シート1には、次のようなデータが入っております。 「・・」本質問のために各セルの位置を合わせるために 入れているだけです。 ・・・・A・・・B・・・C・・・D・・・E・・・ 1・・氏名・・1位・・2位・・3位・・4位・・・  2・・佐藤・・・・・・・○・・・・・・・・・・・ 3・・吉田・・・○・・・・・・・・・・・・・・・ 4・・伊藤・・・・・・・・・・・・・・・○・・・ シート2に、シート1のデータを参照して、氏名の該当者に 対して、B2以降に該当順位を付す方法を教えてください。 ・・・・A・・・B・・・ 1・・氏名・・順位・・・  2・・佐藤・・2位 3・・吉田・・1位 4・・伊藤・・4位 シート1は外部から受けたデータであり、シート2は内部で 新たに加工する調書です。1500件ぐらいあるので、何と かエクセルを活用したいと考えておりますので、よろしく お願いします。」 であり、回答いただき当初の目的に対応する回答の「LOOKUP」を採用して作業を進めておりましたが、シート1を上から順番にLOOKUPしていく場合は、回答いただいたままでOKでしたが、シート2を作成において、佐藤○○と打込めば、シート1の同姓同名である佐藤○○を見に行って反映する方法を教えてください。 確かに、ご回答いただいた方々の中には、シート1とシート2が同じ順番で作成されている場合を想定してご教授いただいており、私の質問の不足でご迷惑をお掛けいたしますが、よろしくお願いします。

  • エクセルでシートの振り分けを自動的にする方法

    初心者です。宜しくお願いいたします。 業務の1日のスケジュールをエクセルで管理しております。 主にお客様との相談や打ち合わせを管理しているのですが、 (1)シート1で1日のスケジュールを入力していきます。 (列)   AB   CD    E     F (行)  日付  時間  氏名   相談内容 ※(日付、時間、氏名は入力規則を使用して入力できるようにしています。) (2)シート2以降では、氏名ごとにシートを作成して、シート1に入力すると、自動的にシート2以降へ振り分けができるようにしたいのです。 (列)   AB   CD    E       (行) 日付  時間  相談内容 できるだけわかり易く教えていただければ幸いです。 宜しくお願いいたします。

  • Excel 抽出データを別シートに移す方法

    アルバイトの方の勤怠管理のためにタイムカードレコーダーを使っていて、 毎月その内容をExcelに出力しています。 A   B     C       D    E   F    G ------------------------------------------------------------ 番号 氏名   日付     出勤  外出  戻り  退勤 1  伊藤太郎 2005/1/16  8:55           16:35 1  伊藤太郎 2005/1/17  8:52           16:40                ・                ・ 2  佐藤花子 2005/1/16  9:48           15:07 2  佐藤花子 2005/1/17  9:51           15:10                ・                ・ 1つのファイルの中にすべてのアルバイトさんのデータが出力されて いるのですが、個人毎にデータを保存しておきたいので、毎回オートフィルタで 1人ずつデータを抽出して別シートにコピーしています。しかし、アルバイト さんの数が増えるにつれて作業量&時間も増えてきてしまいました。 この作業をマクロやVBAで自動化できれば・・・と思うのですが、何かよい 方法はありますでしょうか。 説明が足りない部分がありましたらご指摘ください。よろしくお願いいたします。

  • エクセル2013 シートのデータ読み込みで

    エクセル2013 あるBookにシートが複数枚あります。 各シートのL1に氏名が入力されていたら、他のセルのデータを氏名とともにシート40にある幾つかのセルに読み込みます。 氏名が入力されていないと、シート40の氏名その他のデータが「0」になってしまいます。 氏名が入力されていない場合は、シート40のセルが「0」ではなく「空白」にしたいのですが 方法を教えてください。

  • Excelで、他のシートのデータを取り込む(統合する)には?

    下記のような「Sheet1」のデータ(学年)に、「Sheet2」のデータ(住所)を取り込もうとしています(データは架空例です)。Sheet1・2は、A列の内容が共通していますが、「Sheet2」のほうがデータ数が少ないです。LOOKUP関数を使えばいいのかと思いましたが、LOOKUPはデータ行数が完全一致している必要があるのか、うまくいきません。 要するに、「Sheet1」のA列に一致する文字列が「Sheet2」のA列にあった場合、その行のB列の内容を「Sheet1」のC列に入れる、というようにしたいのです。どのような手順で行えば可能でしょうか。よろしくお願いします。 --- ■Sheet1(学年データ) 1氏名(A)   学年(B) 2阿部一郎  1年 3伊藤二郎  2年 4上田三郎  3年 5江藤四郎  4年 ■Sheet2(住所データ) 1氏名(A)  住所(B) 2伊藤二郎 東京都○○区 3江藤四郎 大阪府○○市 ■ほしいデータ(Sheet1) 1氏名(A)   学年(B)   住所(C) 2阿部一郎  1年 3伊藤二郎  2年    東京都○○区 4上田三郎  3年 5江藤四郎  4年    大阪府○○市

  • エクセルで指定した日付の期間の特定の条件にマッチしたデータを別のシート

    エクセルで指定した日付の期間の特定の条件にマッチしたデータを別のシートに表示して集計を出すことは可能でしょうか? ご存知の方がいましたらよろしご教授お願いします。 Sheet1に 日付 顧客名 契約料 営業 対応者 ポイントA 訪問者 ポイントB 1月1日 A社 10,000 伊藤 鈴木 10 鈴木 20 1月5日 B社 20,000 高橋 田中 10 "空白" 1月25日 C社 20,000 伊藤 鈴木 10 吉田 20 2月2日 D社 10,000 伊藤 吉田 10 鈴木 20 2月10日 E社 20,000 高橋 鈴木 10 "空白" 2月18日 F社 10,000 高橋 "空白" 吉田 20 2月25日 G社 20,000 伊藤 吉田 10 吉田 20 3月18日 H社 30,000 高橋 "空白" 鈴木 20 3月28日 I社 10,000 伊藤 林 10 "空白" 4月5日 J社 50,000 高橋 鈴木 10 鈴木 20 というデータがあります。 Sheet2で 日付の期間・対応者・訪問者を任意で入力するとそれを条件として一致した項目を表示しその期間内の対応件数およびポイントの集計を自動で計算させたいです。 うまく説明できないためイメージ画像を添付いたします。 よろしくお願いいたします。 うまく説明できないので画像を添付させていただきます。

  • エクセル・データをランダムにグループ分けする

    エクセルで用意された氏名・所属・年齢・性別データが約2000件あります。各データは氏名のあいうえおごとに作成したシートに入っています。各シートには0から最大で100件のデータがあります。これらのデータを、あいうえお順ではないランダムな10のグループに分け直したいのですが、どうしたらよろしいでしょうか。

  • excelでは日付がコピーできない?

    過去に似たような質問があったらお許しください。 エクセルで数百人分のデータを作成し、これをまとめて新しいデータシートにコピペしようとしたのですが、何故か日付の部分だけが上手くペーストされません。 たとえば、2005年3月9日(03/09/05)という日付が何故か新しいデータシート上では1999年3月8日(03/08/99)というようにとんでもない値になってしまいます。 おかしいとおもって、日付の部分だけを個別に何度かコピペしてみましたが結果は同じでした。 これは、いったいどういうことなのでしょうか? どなたか、お分かりの方がいらっしゃいましたら教えてください。

専門家に質問してみよう