個人事業主の方必見!確定申告のお悩み解決

月間勤務表から週間勤務表をつくるのに、出勤している職員を抽出して自動かしたいので
手始めに1日~31日までの各日付ごとに職員を抽出する方法を考えたのですがVLOOKUPは使えなさそうなので何かほかの
方法はない物かと、模索していましたが行き詰ってしまいました。
皆様のお力おかしください。

添付した画像が私が使っているエクセルで作製した月間勤務表となります。名前の列に
8・5・7.5が記入してあるのが出勤という意味です、⑧は有給で研は研修と言う意味です。

抽出した名前は別シートに貼り付けたいと思っております。
説明の至らぬ点が多々あるとは思いますが、宜しくお願い致します。

「月間勤務表から1日~31日までの各日付ご」の質問画像

質問者からの補足コメント

  • ご指摘頂いた名前を別シートに貼り付ける際、こんな感じで名前を張り付けたいと言うイメージを
    セルに直接入力して作りましたので回答頂ける方の参考にして頂けたらと思います。

    「月間勤務表から1日~31日までの各日付ご」の補足画像1
      補足日時:2017/09/21 20:43
  • ご指摘いただいた、画像が小さい点を改良し拡大したものと
    教えて頂いた関数を入力した結果の画像もアップいたしますので
    ご助言お願いいたします。

    「月間勤務表から1日~31日までの各日付ご」の補足画像2
      補足日時:2017/09/22 02:13
  • 下部分

    「月間勤務表から1日~31日までの各日付ご」の補足画像3
      補足日時:2017/09/22 02:14
  • 関数を入れた結果

    「月間勤務表から1日~31日までの各日付ご」の補足画像4
      補足日時:2017/09/22 02:15

A 回答 (4件)

続けてお邪魔します。



>0と表示される個所が所々ありました・・・
「0」が表示されるのは対象セルが空白の場合にそのようになります。

ん~~~
お示しの画像の配置だとかなり厄介ですね。
画像を拝見して、「月間シフト貼り付け」シートのC列氏名は41行目までだと解釈しました。
かなり強引にやってみました。

Sheet2(日付ごと出勤名簿)のA2セルに
=IFERROR(INDEX(月間シフト貼り付け!$C$7:$C$41,SMALL(IF((月間シフト貼り付け!$C$7:$C$41<>"")*(NOT(ISNUMBER(FIND("計",月間シフト貼り付け!$C$7:$C$41))))*((月間シフト貼り付け!F$7:F$41=8)+(月間シフト貼り付け!F$7:F$41=5)+(月間シフト貼り付け!F$7:F$41=7.5)),ROW($A$7:$A$41)-6),ROW(A1))),"")

前回同様、配列数式なのでCtrl+Shift+Enterで確定し
フィルハンドルで列・行方向にコピーしてみてください。

※ 万一、C列氏名に 「計」が含まれる名前(たとえば「加計学園」など)のセルは無視されてしまいます。

※ 本来であればC列(名前列)には名前以外の項目を入れない方が簡単です。m(_ _)m
    • good
    • 0
この回答へのお礼

教えて頂いた関数を入力したところ、0も消え名前以外の項目もきれいに消えていました。
正に私がやりたっかた事です。
ここまで丁寧に教えて頂きありがとうございました。

教えて頂き日付ごとのスタッフを抽出出来たので、ここから同じ週に同じポジションにつかないような
関数を調べて自動化できるよう頑張ってみます。
本当にありがとうございました。

お礼日時:2017/09/22 12:54

No.2です。



投稿後思ったのですが、
有給や研修も出勤扱いにするのが普通ですよね?

となると前回の数式では「⑧」や「研」は含まれていませんので別の数式にする必要があります。

ただ、お示しの画像が小さすぎて詳細が判りません。
氏名列に空白セルがあるように見えますし、その行に何らかのデータが入っていますよね?

表全体は必要ないので、上側の画像の左部分だけでも詳細が判れば
少しはお役に立てるかも・・・m(_ _)m
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。
作ろうとしている物がシフト表なので研修や有給を使っている職員はシフトに入る
事がないのでご心配していただいてる点は問題ございません。

早速教えて頂いた関数を打ち込んだところ私が思っている物とほぼ同じものが出来上がりました。
ただ何故か0と表示される個所が所々ありました基準合計等の職員以外の名前は合計人数の行の数字を消せば
解決したのですが0がなぜ表示されたのかがわかりませんでした

画像の拡大したものを再度アップいたしますのでご確認いただき、ご助言をお願いいたします。

お礼日時:2017/09/22 02:10

こんばんは!



抽出するのは「8・5・7.5」が記入してある行だけでよいのでしょうか?
(⑧や研は含まない)

一応そういうコトだとして、やり方だけ・・・
↓の画像のように元データはSheet1にあり、Sheet2に表示するとします。
尚、日付セルは考慮していませんので、
Sheet1のF列から順に表示されます。

画像ではSheet2のA2セルに
=IFERROR(INDEX(Sheet1!$C$7:$C$100,SMALL(IF((Sheet1!F$7:F$100=8)+(Sheet1!F$7:F$100=5)+(Sheet1!F$7:F$100=7.5),ROW($A$7:$A$100)-6),ROW(A1))),"")

配列数式なのでCtrl+Shift+Enterで確定!
A2セルのフィルハンドルで列・行方向にコピーしています。

※ ⑧や研も出勤扱い(空白以外は出勤扱い)の場合は
もう少し簡単になります。m(_ _)m
「月間勤務表から1日~31日までの各日付ご」の回答画像2
    • good
    • 0

私が回答できる訳ではありませんが、


>抽出した名前は別シートに貼り付けたいと思っております。
別シートに張り付けた結果を画像として提示していただければ、より良い回答がつくと思います。
現状では、抽出した名前をどのように張り付けるのかが判りませんので、回答がつきにくいかと思います。
    • good
    • 0
この回答へのお礼

確かにそうですね。
さっそく画像を張り付けたいと思います。
ありがとうございました。

お礼日時:2017/09/21 20:29

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

QExcel関数で、文字を数字に変換させたいです。 if関数で、数字を文字で表示させることは出来ますが

Excel関数で、文字を数字に変換させたいです。
if関数で、数字を文字で表示させることは出来ますが、その逆はできるのでしょうか?
また、その列を数字の合計で出すことはできますか?

Aベストアンサー

>>例えば、非を1、定を0として表示させることはできますか?

=IF(A1="非",1,IF(A1="定",0,""))

Qエクセルで特定の数字だけ勝手に変換されてしまいます

エクセル2010で48,609.793と入力するのですが
入力後のセルを見てみると48,609.792999999と
勝手に変換されてしまいます。
48,609.792や48,609.794ではそのままなのですが
なぜなのでしょうか?
計算上で入力した数値を使用したく困っています。

Aベストアンサー

10進数をコンピュータ内部では2進数の形で保持することによる誤差だそうです。
なるべくこの誤差が出ないようにExcelは工夫されているそうですが、
特定の数字を入力すると「99999…」が現れるのだとか。
この質問を見て調べるまで全然知りませんでした。
https://answers.microsoft.com/ja-jp/msoffice/forum/msoffice_excel-mso_other/excel/bbaaa7f0-5e73-4d7c-aa05-6709a3357d26
https://support.microsoft.com/ja-jp/help/813530

計算式には数字を丸める関数を入れると対処できると思います。
ROUNDやROUNDUP関数で引数を3にしてみてください。
http://kokoro.kir.jp/excel/round.html

QエクセルでLOOKUP関数など使いこなせない

体力測定記録で年齢、得点を入れたら評定基準でABCDを返すようにしたい。
例えば  年齢72 得点35     評定段階 C
Cを求める数式を知りたい。どなたかよろしくお願いします。

Aベストアンサー

こんにちは!

一例です。
↓の画像のE1~H6セルのように表を作成しておきます。

C2セルに
=IF(COUNTBLANK(A2:B2),"",INDEX(E$2:E$6,MATCH(B2,OFFSET(E$2:E$6,,MATCH(A2,F$1:H$1,1)),1)))

という数式を入れフィルハンドルで下へコピーしています。

※ 表の並びを少しだけ説明すると・・・
F列 → 0歳以上~70歳未満
G列 → 70歳以上~75歳未満
H列 → 75歳以上
となり、行方向に関しても同様な区分けになり、
仮にF列の場合は
2行目 → 0以上~25未満
3行目 → 25以上~33未満
4行目 → 33以上~41未満
5行目 → 41以上~49未満
6行目 → 49以上
といった具合です。

他の列も同様の感じになります。m(_ _)m

Qエクセルで 異なるデータを含む2つのデータを 1つの表にまとめる方法を教えてください

初めて質問をします。
あまりエクセルが詳しくなく わからないので 教えて下さい。

2つのデータがあります。
Aには仕入れ数、Bには売り上げ数があります。
双方の商品名はすべて一致するわけではなく、「AにあってBにない」「BにあってAがない」ものもあります。


    データA 【仕入れ】     データB 【売上】

管理No 商品  仕入れ数   管理No 商品   売上数
   1  りんご  3        2  みかん  8
   2  みかん  8       3    バナナ    3
   3  バナナ    4      1  りんご    2
   4  いちご    1      7   もも     3
   5  オレンジ  3      10    キウイ     2
   6  レモン    3     11    ぶどう     2
   7  もも     3     13    大根      1
   8  なし     2
   9  カキ    5
  10  キウイ  2
  11  ぶどう    1
  12   マンゴー   1


上記の2つのデータを以下のようにまとめたいのですが 可能でしょうか?
(ABすべての商品名を出して それぞれの数を表示する)

管理No   商品    仕入れ数      売上数
   1   りんご      3        2
   2   みかん      8      8
    3   ばなな      4        3
   4   いちご      1        0
   5    オレンジ  3        0
   6   レモン      3     0
   7   もも       3     3
   8   なし       2     0
   9   カキ      5     0
   10   キウイ      2      2
   11   ぶどう      1       2
   12   マンゴー    1      0
   13   大根      0      1
      


数字がずれていてすみません。
どうぞよろしくお願いします。

初めて質問をします。
あまりエクセルが詳しくなく わからないので 教えて下さい。

2つのデータがあります。
Aには仕入れ数、Bには売り上げ数があります。
双方の商品名はすべて一致するわけではなく、「AにあってBにない」「BにあってAがない」ものもあります。


    データA 【仕入れ】     データB 【売上】

管理No 商品  仕入れ数   管理No 商品   売上数
   1  りんご  3        2  みかん  8
   2  みかん  8       ...続きを読む

Aベストアンサー

こんにちは!

>(ABすべての商品名を出して それぞれの数を表示する)
というコトですので、手っ取り早くVBAでの一例です。

↓の画像のようにそれぞれのシート名は「仕入れ」・「売上」となっていて、Sheet3に表示するとします。
尚、「商品」の「管理No」はシリアルナンバーのように決まっているものとします。
そして、Sheet3の1行目項目行は入力済みという前提です。

Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペースト → Excel画面に戻り(VBE画面を閉じて)マクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)

Sub Sample1() '//この行から//
Dim i As Long, lastRow1 As Long, lastRow2 As Long, lastRow3 As Long
Dim c As Range, r As Range
Dim wS1 As Worksheet, wS2 As Worksheet
Set wS1 = Worksheets("仕入れ")
Set wS2 = Worksheets("売上")
Application.ScreenUpdating = False
With Worksheets("Sheet3") '//←「Sheet3」はまとめるシート名に!"//
lastRow3 = .Cells(Rows.Count, "A").End(xlUp).Row
If lastRow3 > 1 Then
Range(.Cells(2, "A"), .Cells(lastRow3, "D")).ClearContents
End If
.Range("E:F").Insert
lastRow1 = wS1.Cells(Rows.Count, "A").End(xlUp).Row
Range(wS1.Cells(1, "A"), wS1.Cells(lastRow1, "A")).Copy .Range("E1")
lastRow2 = wS2.Cells(Rows.Count, "A").End(xlUp).Row
Range(wS2.Cells(2, "A"), wS2.Cells(lastRow2, "A")).Copy .Cells(Rows.Count, "E").End(xlUp).Offset(1)
.Range("E:E").AdvancedFilter Action:=xlFilterCopy, copytorange:=.Range("F1"), unique:=True
.Range("F:F").Sort key1:=.Range("F1"), order1:=xlAscending, Header:=xlYes
lastRow3 = .Cells(Rows.Count, "F").End(xlUp).Row
Range(.Cells(2, "F"), .Cells(lastRow3, "F")).Copy .Range("A2")
For i = 2 To .Cells(Rows.Count, "A").End(xlUp).Row
Set c = wS1.Range("A:A").Find(what:=.Cells(i, "A"), LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
.Cells(i, "B") = c.Offset(, 1)
.Cells(i, "C") = c.Offset(, 2)
End If
Set r = wS2.Range("A:A").Find(what:=.Cells(i, "A"), LookIn:=xlValues, lookat:=xlWhole)
If Not r Is Nothing Then
If .Cells(i, "B") = "" Then
.Cells(i, "B") = r.Offset(, 1)
End If
.Cells(i, "D") = r.Offset(, 2)
End If
Next i
.Range("E:F").Delete
.Columns.AutoFit
End With
Application.ScreenUpdating = True
MsgBox "完了"
End Sub '//この行まで//

※ 関数でないので、データ変更があるたびにマクロを実行する必要があります。

※ コード内の「Sheet3」の部分は実際のシート名に変更してください。m(_ _)m

こんにちは!

>(ABすべての商品名を出して それぞれの数を表示する)
というコトですので、手っ取り早くVBAでの一例です。

↓の画像のようにそれぞれのシート名は「仕入れ」・「売上」となっていて、Sheet3に表示するとします。
尚、「商品」の「管理No」はシリアルナンバーのように決まっているものとします。
そして、Sheet3の1行目項目行は入力済みという前提です。

Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペースト → ...続きを読む

Q【至急】勤務計算のために空白をカウントしたいです。

Aさん場合、M3のセルにC3からL4までの勤務時間を表示させたいです。
午前・午後共に「空白」の場合、8時間
午前又は午後に「半」の場合、4時間
午前又は午後に「休」の場合、カウントしない。または0時間
となるようにしたいです。

お力添えをどうかよろしくお願いします。

Aベストアンサー

こんにちは

読んでいないのか、そのままの回答でないので無視していらっしゃるのかはわかりませんが、No3様の回答がわかり易いのではないかと思います。
後出しで条件が増えたり変わったりするのは、回答者達に嫌われる質問の典型ですが、No3様の考え方ならそのまま応用することが可能ではないでしょうか??

例えば、そのままで記述するなら
=COLUMNS(C3:L4)*8-COUNTIF(C3:L4,"休")*8-COUNTIF(C3:L4,"半")*4-COUNTIF(C3:L4,"早")*3-COUNTIF(C3:L4,"遅")*2
とか。

しかしながら、この方法は単純にセルの数を数えているだけですので、想定していない入力があると結果は必ずしも正しくならない可能性があります。
例えば、同じ日の午前午後に「休」と記入してある場合 などなど…

このような可能性をチェックして解釈しなおす関数式も作成は可能ですが、それぞれの記入されているセルのカウントをSUMPRODUCTや配列数式などを利用することになると思いますので、全体の式は相当に長くなります。
時間があれば、「SUMPRODUCT、 配列数式」といったあたりを研究してみてください。

こんにちは

読んでいないのか、そのままの回答でないので無視していらっしゃるのかはわかりませんが、No3様の回答がわかり易いのではないかと思います。
後出しで条件が増えたり変わったりするのは、回答者達に嫌われる質問の典型ですが、No3様の考え方ならそのまま応用することが可能ではないでしょうか??

例えば、そのままで記述するなら
=COLUMNS(C3:L4)*8-COUNTIF(C3:L4,"休")*8-COUNTIF(C3:L4,"半")*4-COUNTIF(C3:L4,"早")*3-COUNTIF(C3:L4,"遅")*2
とか。

しかしながら、この方法は単純にセルの数を数...続きを読む

QVBA 複数シートをひとつにまとめる方法について

VBA初心者です。

ブック内の複数シートを
ひとつにまとめる方法について

検索していて見つけた・・・・

Sub Sample()
Dim sWS As Worksheet 'データシート(コピー元)
Dim dWS As Worksheet '集約用シート(コピー先)

Set dWS = Worksheets("AllData")

'集約用シートの2行目以降を削除
dWS.UsedRange.Offset(1, 0).Clear

'各シートの2行目以降のデータを、集約用シートの末尾にコピー
For Each sWS In Worksheets
If sWS.Name <> dWS.Name Then
With sWS.UsedRange

'コピー元シートにデータが1件以上ある場合
If .Rows.Count > 1 Then
.Offset(1, 0).Resize(.Rows.Count - 1).Copy _
Destination:=dWS.Cells(Rows.Count, 1). _
End(xlUp).Offset(1, 0)
End If

End With
End If
Next sWS

'集計用シートをA列で並べ替え
dWS.UsedRange.Sort Key1:=Range("A1"), Header:=xlYes
End Sub

こちらのやり方でばっちりだったのですが
問題点がひとつだけ。

まとめたシートのみでOKなのですが
見出し行の上に工事名やら期間やらを入力する
3~4行を空けておきたいのです。

3~4行・・・・
任意の行数を空けて
その下にまとめる方法を
教えていただけないでしょうか?

よろしくお願いします。

VBA初心者です。

ブック内の複数シートを
ひとつにまとめる方法について

検索していて見つけた・・・・

Sub Sample()
Dim sWS As Worksheet 'データシート(コピー元)
Dim dWS As Worksheet '集約用シート(コピー先)

Set dWS = Worksheets("AllData")

'集約用シートの2行目以降を削除
dWS.UsedRange.Offset(1, 0).Clear

'各シートの2行目以降のデータを、集約用シートの末尾にコピー
For Each sWS In Worksheets
If sWS.Name <> dWS....続きを読む

Aベストアンサー

No.3・4です。

>1行目のSub Sample1()を
>Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
>に置き換えるだけではダメでした。

ダメとは全く反応しない!というコトでしょうか?
もしかしてそのまま標準モジュールに記載していませんか?
そうだとすれば、「Workbookのイベントプロシージャ」でなければ動きません。
VBE画面の左側の下にある「This Workbook」をダブルクリックし、表示されたVBE画面上に

>Sub Sample1()

>Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
に変更してそのままコピー&ペーストしてみてください。

※ もちろん「標準モジュール」のコードは不要なので消去します。m(_ _)m

QIF関数 複数条件の組み合わせ

いつもご教授いただきましてありがとうございます。

今回IF関数の複数条件についてご教授頂ければ幸いです。

サンプル画像添付しましたように
D列の作業列③に下記条件が一致したら数字を表示させる数式を組みたいです。
IF、OR関数の組み合わせだと思うのですが、複数条件の組み方が苦手なので
質問させていただきました。

①A列の数字の中でが2(B列商品コードの最初の数字)
  C列の数字の中で04、51、03(B列商品コードの下2桁)だったら1と表示させたい。
※ちなみにC列の条件数値は今後いくつか増える可能性があります。その場合もどういう式にしたらよいか併せてご教授願います。

②A列の数字の中でが2(B列商品コードの最初の数字)
  C列の数字の中で04、51、03(B列商品コードの下2桁)以外だったら2と表示させたい。

③A列の数字の中でが9(B列商品コードの最初の数字)だったら空白にしたい。

お手数をおかけいたしますが、何卒、ご教授願います。

Aベストアンサー

こんにちは!

せっかく作業用の列①・②を作っていらっしゃいますが、一気にC列に表示する数式にしてみました。

C2セルに
=IF(B2="","",IF(LEFT(B2,1)*1=2,IF(ISNUMBER(FIND(RIGHT(B2,2),"04,51,03")),1,2),""))

という数式を入れフィルハンドルで下へこれ以上データが増えることはない!という位まで
しっかりコピーではどうでしょうか?m(_ _)m

QExcel 2段組み

縦長の表を2段組みとしたいのですが、下記の条件があります。
Excelで作成することは可能でしょうか。
可能でしたら方法を教えていただけないでしょうか。
よろしくお願いいたします。

①縦長の表を2段組みとしたい。
②表内で並び替えが可能としたい。
③2段組み内の1段の行を削除した場合に空きが出た1段部分に
2段部分のデータが自動で繰り上がるようにしたい。
(例えば2017年1月を削除した場合に2017年8月が自動で繰り上がるようにしたい。)



子供が小さいのでご連絡が遅くなる可能性がありますが、ご回答いただけた方には必ずお返事を致します。
よろしくお願いいたします。

Aベストアンサー

こんばんは!

① は画像のような配置ではなく、最初はA~F列だけにデータが羅列してある。
というコトですよね?
それをA~F列は7か月分だけにし、残りはG~L列に移動させたい!という解釈です。

② の「表内での並び替え」とはどの列がキーになるかが判りません。
これに関しては手作業で範囲指定 → 並び替え というコトが可能だと思いますので、今回はスルーします。

③ は仮にA~F列の1か月分(複数ヶ月でも)データを消去した場合にA~F列は上詰め、
G~L列は上詰めした月数分を繰り上げてA~F列に移動させる!という解釈です。

VBAになりますが一例です。
↓のSample① が「①」、Sample③ が「③」のコードになります。

Dim i As Long, cnt As Long
Dim lastRow1 As Long, lastRow2 As Long
Dim myRng1 As Range, myRng2 As Range
Sub Sample①()
If WorksheetFunction.CountIf(Range("A:A"), "小計") > 7 Then
Range("A1").Resize(, 6).Copy Range("G1")
lastRow1 = Cells(Rows.Count, "A").End(xlUp).Row
For i = 2 To lastRow1
If Cells(i, "A") = "小計" Then
cnt = cnt + 1
If cnt = 7 Then Exit For
End If
Next i
Range(Cells(i + 1, "A"), Cells(lastRow1, "F")).Cut Cells(Rows.Count, "G").End(xlUp).Offset(1)
lastRow1 = 0
cnt = 0
End If
End Sub

Sub Sample③()
If WorksheetFunction.CountIf(Range("A:A"), "小計") < 7 Then
lastRow1 = Cells(Rows.Count, "A").End(xlUp).Row
lastRow2 = Cells(Rows.Count, "G").End(xlUp).Row
For i = 2 To lastRow2
If Cells(i, "G") = "小計" Then
cnt = cnt + 1
If cnt = 7 - WorksheetFunction.CountIf(Range("A:A"), "小計") Then Exit For
End If
Next i
Range(Cells(2, "G"), Cells(i, "L")).Cut Cells(lastRow1 + 1, "A")
Set myRng1 = Range(Cells(2, "A"), Cells(lastRow1, "A")).SpecialCells(xlCellTypeBlanks)
Set myRng2 = Range(Cells(2, "G"), Cells(lastRow2, "G")).SpecialCells(xlCellTypeBlanks)
myRng1.Resize(, 6).Delete shift:=xlUp
myRng2.Resize(, 6).Delete shift:=xlUp
lastRow1 = 0
lastRow2 = 0
cnt = 0
End If
End Sub

※ 「小計」までが各月の最終行と見なしています。
すなわち「小計」の数で行数を決めています。m(_ _)m

こんばんは!

① は画像のような配置ではなく、最初はA~F列だけにデータが羅列してある。
というコトですよね?
それをA~F列は7か月分だけにし、残りはG~L列に移動させたい!という解釈です。

② の「表内での並び替え」とはどの列がキーになるかが判りません。
これに関しては手作業で範囲指定 → 並び替え というコトが可能だと思いますので、今回はスルーします。

③ は仮にA~F列の1か月分(複数ヶ月でも)データを消去した場合にA~F列は上詰め、
G~L列は上詰めした月数分を繰り上げてA~F列に移動...続きを読む

Qエクセル データ抽出の数式

お世話になります。
表①からリスト①に載っている人だけのデータを数式を使って抽出したいです。
(フィルタを使わないで、極力手作業にならない方法で)
表①は、スタッフ数百名分の全データとして、リスト①は、ある部署のスタッフとします。


表①
氏名 日付 ログイン ログオフ
田中 舞妓 2017/5/16 8:25 17:35
田中 舞妓 2017/5/17 8:18 17:35
田中 舞妓 2017/5/18 8:15 17:35
田中 舞妓 2017/5/19 8:29 17:34
田中 舞妓 2017/5/22 8:16 17:33
三田 建造 2017/5/23 8:18 17:39
三田 建造 2017/5/25 8:29 17:38
三田 建造 2017/5/26 8:02 17:31
三田 建造 2017/5/29 8:24 17:32
三田 建造 2017/5/30 8:22 17:33
牧 重三 2017/5/31 8:29 17:31
牧 重三 2017/6/1 8:17 17:35
牧 重三 2017/6/2 8:18 17:41
牧 重三 2017/6/5 8:19 17:31
牧 重三 2017/6/6 8:18 17:41
長岐 知美 2017/6/7 8:29 17:34
長岐 知美 2017/6/8 8:18 17:36
長岐 知美 2017/6/9 8:15 17:34
長岐 知美 2017/6/12 8:29 17:32
篠田 亜紀 2017/5/21 8:16 17:32
柿田 輝未 2017/5/28 8:18 17:17
荒元 耕平 2017/6/4 8:22 17:32
佐田 容子 2017/6/11 8:21 17:46
藤島 澄人 2017/6/12 8:24 17:59
藤島 澄人 2017/6/13 8:22 17:41
藤島 澄人 2017/6/14 8:29 17:28
藤島 澄人 2017/6/15 8:23 17:30
藤田明則 2017/5/16 8:29 17:34
藤田明則 2017/5/17 8:26 18:15
藤田明則 2017/5/31 15:30 0:36


リスト①
田中 舞妓
牧 重三
藤島 澄人
藤田明則

[完成]
氏名 日付 ログイン ログオフ
田中 舞妓 2017/5/16 8:25 17:35
田中 舞妓 2017/5/17 8:18 17:35
田中 舞妓 2017/5/18 8:15 17:35
田中 舞妓 2017/5/19 8:29 17:34
田中 舞妓 2017/5/22 8:16 17:33
牧 重三 2017/5/31 8:29 17:31
牧 重三 2017/6/1 8:17 17:35
牧 重三 2017/6/2 8:18 17:41
牧 重三 2017/6/5 8:19 17:31
牧 重三 2017/6/6 8:18 17:41
藤島 澄人 2017/6/12 8:24 17:59
藤島 澄人 2017/6/13 8:22 17:41
藤島 澄人 2017/6/14 8:29 17:28
藤島 澄人 2017/6/15 8:23 17:30
藤田明則 2017/5/16 8:29 17:34
藤田明則 2017/5/17 8:26 18:15
藤田明則 2017/5/31 15:30 0:36

お世話になります。
表①からリスト①に載っている人だけのデータを数式を使って抽出したいです。
(フィルタを使わないで、極力手作業にならない方法で)
表①は、スタッフ数百名分の全データとして、リスト①は、ある部署のスタッフとします。


表①
氏名 日付 ログイン ログオフ
田中 舞妓 2017/5/16 8:25 17:35
田中 舞妓 2017/5/17 8:18 17:35
田中 舞妓 2017/5/18 8:15 17:35
田中 舞妓 2017/5/19 8:29 17:34
田中 舞妓 2017/5/22 8:16 17:33
三田 建造 2017/5/23 8:18 17:39
三田 建造 20...続きを読む

Aベストアンサー

こんばんは!

VBAになりますが、一例です。
↓の画像のように元データはSheet1にあり、
Sheet2のA列2行目以降に「リスト」を入力 → C~F列に表示するとします。

標準モジュールにしてください。

Sub Sample1()
Dim i As Long, lastRow As Long, wS As Worksheet
Dim myStr As String, myAry As Variant
Set wS = Worksheets("Sheet2")
lastRow = wS.Cells(Rows.Count, "C").End(xlUp).Row
If lastRow > 1 Then
Range(wS.Cells(2, "C"), wS.Cells(lastRow, "F")).Clear
End If
For i = 2 To wS.Cells(Rows.Count, "A").End(xlUp).Row
myStr = myStr & wS.Cells(i, "A") & ","
Next i
myAry = Split(myStr, ",")
With Worksheets("Sheet1")
lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
.Range("A1").AutoFilter field:=1, Criteria1:=Array(myAry), Operator:=xlFilterValues
If .Cells(Rows.Count, "A").End(xlUp).Row > 1 Then
Range(.Cells(2, "A"), .Cells(lastRow, "D")).SpecialCells(xlCellTypeVisible).Copy wS.Range("C2")
End If
.AutoFilterMode = False
End With
End Sub

こんな感じではどうでしょうか?m(_ _)m

こんばんは!

VBAになりますが、一例です。
↓の画像のように元データはSheet1にあり、
Sheet2のA列2行目以降に「リスト」を入力 → C~F列に表示するとします。

標準モジュールにしてください。

Sub Sample1()
Dim i As Long, lastRow As Long, wS As Worksheet
Dim myStr As String, myAry As Variant
Set wS = Worksheets("Sheet2")
lastRow = wS.Cells(Rows.Count, "C").End(xlUp).Row
If lastRow > 1 Then
Range(wS.Cells(2, "C"), wS.C...続きを読む

Q【エクセル 顧客管理】 顧客の2回目の購入月の抽出

エクセルで顧客管理を行なっております。
各顧客の初回購入月、2回目の購入月、最終購入月を抽出できないか、質問させて頂きました。

以下のような表の中から、初回購入月をI欄に、2回目をJ欄に、最終購入月をK欄に抽出したいと思います。

 A    B   C   D   E   F   G   H   I    J    K
顧客NO (1月) (2月) (3月) (4月) (5月) (6月)  合計 初回  2回目   最終
a001   1000 2000 3000            6000
a002   5000    6000 7000         18000
a003   7500    8500 9500 10000     35500


できれば関数だけを使って管理できればと思っております。どうぞ宜しくお願い致します。

Aベストアンサー

こんばんは!

お示しの配置通りだとするとI2セルに
=IFERROR(INDEX($B$1:$G$1,SMALL(IF($B2:$G2<>"",COLUMN($B$1:$G$1)-1),COLUMN(A1))),"")

配列数式なのでCtrl+Shift+Enterで確定! → I2セルのフィルハンドルで隣りのJ2セルまでフィル&コピー!

K2セルの数式は別の数式になります。
=IF(COUNT(B2:G2),INDEX(B$1:G$1,MAX(IF(B2:G2<>"",COLUMN(B$1:G$1)-1))),"")

こちらも配列数式なので、同様にCtrl+Shift+Enterで確定!

最後にI2~K2セルを範囲指定 → K2セルのフィルハンドルで下へコピーしてみてください。m(_ _)m


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング