ここから質問投稿すると、最大4000ポイント当たる!!!! >>

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


表①
氏名 日付 ログイン ログオフ
田中 舞妓 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

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

  • うーん・・・

    早くて正確な方法であれば、数式にはこだわりません。
    ただし、表①は1万行以上あるので、フィルタをかけて一人づつ抜き出していく方法は時間がかかり過ぎます。

      補足日時:2017/07/20 00:19

A 回答 (4件)

こんばんは!



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
「エクセル データ抽出の数式」の回答画像4
    • good
    • 0
この回答へのお礼

フィルタオプションで解決しました。
VBAは私には難しくてわからないですが、丁寧なご回答ありがとうございます。

お礼日時:2017/07/20 23:33

>早くて正確な方法であれば、数式にはこだわりません



フィルタオプションで。
    • good
    • 0

マクロなら簡単に実行できますが、いかがいたしましょうか。



氏名ですが苗字と名前の間に空白がある場合とない場合があります。
以下のようなケースはありますか。
①藤田明則
②藤田 明則
③藤田   明則

表①にの中に上記の①②③のようなデータが混在することがありますか。(空白が無い場合とある場合、空白があるとき1つの場合と2つの場合、又、空白が全角の空白の場合と、半角の空白の場合)
もし、上記の①②③が混在した時、①②③は同じ人として扱うのでしょうか。それとも、異なる人として扱ってもよいのでしょうか。
    • good
    • 0

》 フィルタをかけて一人づつ抜き出していく方法は時間がかかり過ぎます


「フィルタ」には二種類あることを知っていますか?[オートフィルタ」と[フィルタオプションの設定]
此処で仰っている「フィルタ」とは何れの方法ですか?
何れの方法でも、フィルタを掛けたのに「一人づつ抜き出していく」ような馬鹿なことは誰も考えませんよ!
貴方が仰っている「時間がかかり過ぎます」は、具体的に何秒、あるいは、何分以上のことですか?
曖昧な表現は避けてください
    • good
    • 0

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

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

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エクセルの使い方ってどこで習いましたか?

学校では習いませんよね?

Aベストアンサー

私も独学です。
解らないのはネット検索で結構見つかりますので助かっています。(笑)

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エクセル Sheet1の数字入力後、移動のスイッチを押すとSheet2に移動すると・・・

来月、ボウリング大会があり、我々が使っているボウリング場で以前、集計ができなくなるトラブルに見舞われ、大変パニクった経験があります。
そこで、ボウリング場とは別に、我々の方でも集計できるよう、集計表の作成を頼まれたのですが、エクセルで、Sheet1に12列(左から、名前、ゲーム1、2、3、前半ボーナスポイントこれは人によっては無い場合があり、その場合0入力とします。)、前半合計、ゲーム4、5、6、後半ボーナスポイント(前半のものと同じ)、トータルスコア、順位(トータルスコアに連動で、あくまで上から順位の表示はバラバラです。))、40行(参加者の名前分)の表を作り、関数を使って合計や、右端の列に順位を出せるようにしました。
こののち、表の下に移動用の矢印スイッチをつくり、Sheet2に移動するところまでは作れましたが、問題は、Sheet2に移動後、先程のSheet1のデータから、1列目に順位を1位から順番に40位まで表し、その右、2列目に名前、さらにその右、3列目にスコアを 例えば、可能なら、スコア(136点(前半合計)/160点(後半合計)/296点(トータルスコア)といったように自動で表示できるようにしたいのですが、いろいろ調べましたが、分かりません。
今後、ここでしっかり作っておいて、毎年の大会の集計係の人に、少しでも苦労を掛けないようにしてあげたいのです。
皆様のお知恵をお借りしたいです。
どうぞ宜しくお願いいたします。

来月、ボウリング大会があり、我々が使っているボウリング場で以前、集計ができなくなるトラブルに見舞われ、大変パニクった経験があります。
そこで、ボウリング場とは別に、我々の方でも集計できるよう、集計表の作成を頼まれたのですが、エクセルで、Sheet1に12列(左から、名前、ゲーム1、2、3、前半ボーナスポイントこれは人によっては無い場合があり、その場合0入力とします。)、前半合計、ゲーム4、5、6、後半ボーナスポイント(前半のものと同じ)、トータルスコア、順位(トータルスコアに連...続きを読む

Aベストアンサー

こんにちは!

Sheet1には「後半合計」という項目はないのですね?
やり方だけ・・・

Sheet1は↓の画像のような配置になっているとします。
L列の「順位」は「TOTALスコア」(K列)のランク関数で表示しています。
尚、同順位があっても対応できるようにしてみました。

Sheet2のA2セルに
=IFERROR(SMALL(Sheet1!L:L,ROW(A1)),"")

B2セルに
=IF(A2="","",INDEX(Sheet1!A$1:A$50,SMALL(IF(Sheet1!L$1:L$50=A2,ROW(A$1:A$50)),COUNTIF(A$2:A2,A2))))

配列数式なのでCtrl+Shift+Enterで確定!
※ B2セルだけが配列数式になります。

C2セルに
=IF(B2="","",SUM(OFFSET(Sheet1!B$1:D$1,MATCH(B2,Sheet1!A:A,0)-1,,,3)))

D2セルに
=IF(B2="","",SUM(OFFSET(Sheet1!$G$1:$I$1,MATCH(B2,Sheet1!A:A,0)-1,,,3)))

E2セルに
=IF(B2="","",INDEX(Sheet1!K:K,MATCH(B2,Sheet1!A:A,0)))

という数式をそれぞれ入れ、A2~E2セルを範囲指定 → E2セルのフィルハンドルで下へコピー!
これで画像のような感じになります。

※ 前半ポイント、後半ポイントの列は考慮していません。

※ 「前半合計」の数式はもっと簡単にできますが、
「後半合計」と同じ数式を使うようにしてみました。m(_ _)m

こんにちは!

Sheet1には「後半合計」という項目はないのですね?
やり方だけ・・・

Sheet1は↓の画像のような配置になっているとします。
L列の「順位」は「TOTALスコア」(K列)のランク関数で表示しています。
尚、同順位があっても対応できるようにしてみました。

Sheet2のA2セルに
=IFERROR(SMALL(Sheet1!L:L,ROW(A1)),"")

B2セルに
=IF(A2="","",INDEX(Sheet1!A$1:A$50,SMALL(IF(Sheet1!L$1:L$50=A2,ROW(A$1:A$50)),COUNTIF(A$2:A2,A2))))

配列数式なのでCtrl+Shift+Enterで確定!
※ B2セルだけが配...続きを読む

Qコピー&ペーストではなく数式やエクセルの機能を使ってデータを反映させたい。

下記の「表①」のエクセルデータを、「表②」に反映させたいです。
「表②」のB3セルに、数式を入れて、「表①」のログイン・ログオフ時刻を「表②」へ
自動反映させたいのですが、どのような式を入れたらいいかがわかりません。

現状は、目視とコピー&ペーストで表①→表②へ貼りつけていますが、
スタッフの数が多いのとシフト勤務で出勤日数も時間もバラバラで、作業が大変です。

また、早くて正確なら他の方法でもいいです。
よろしくお願いします。


表①
A B C D E
1 氏名 日付 ログイン 日付 ログオフ
2 田中 舞子 2017/5/16 8:21:35 2017/5/16 17:34:38
3 田中 舞子 2017/5/17 8:22:40 2017/5/17 17:35:00
4 田中 舞子 2017/5/18 8:28:02 2017/5/18 17:35:55
5 田中 舞子 2017/5/19 8:22:09 2017/5/19 17:34:18
6 田中 舞子 2017/5/22 8:18:03 2017/5/22 17:33:13
7 三田 建造 2017/5/23 8:19:55 2017/5/23 17:39:44
8 三田 建造 2017/5/25 8:21:03 2017/5/25 17:38:04
9 三田 建造 2017/5/26 8:17:45 2017/5/26 17:31:54
10 三田 建造 2017/5/29 8:19:42 2017/5/29 17:32:39
11 三田 建造 2017/5/30 8:20:12 2017/5/30 17:33:26
12 牧 重三 2017/5/31 16:18:33 2017/5/31 23:31:36
13 牧 重三 2017/6/1 16:20:08 2017/6/1 23:35:33
14 牧 重三 2017/6/2 17:18:35 2017/6/2 23:41:05
15 牧 重三 2017/6/5 15:20:00 2017/6/5 23:31:54
16 牧 重三 2017/6/6 19:22:05 2017/6/6 23:41:14
17 長岐 知美 2017/6/7 8:25:48 2017/6/7 17:34:38
18 長岐 知美 2017/6/8 8:26:24 2017/6/8 17:36:52
19 長岐 知美 2017/6/9 8:26:01 2017/6/9 17:34:08
20 長岐 知美 2017/6/12 8:19:24 2017/6/12 17:32:02
21 篠田 亜紀 2017/5/21 8:19:14 2017/5/21 17:32:29
22 柿田 輝未 2017/5/28 7:34:55 2017/5/28 17:17:54
23 荒元 耕平 2017/6/4 7:32:49 2017/6/4 17:32:50
24 佐田 容子 2017/6/11 8:18:35 2017/6/11 17:41:05
25 藤島 澄人 2017/6/12 8:25:15 2017/6/12 17:59:55
26 藤島 澄人 2017/6/13 8:45:31 2017/6/13 17:41:06
27 藤島 澄人 2017/6/14 8:05:34 2017/6/14 17:28:14
28 藤島 澄人 2017/6/15 8:13:25 2017/6/15 17:30:24


表②
   A B C D E F G
1 田中 舞子 三田 建造 牧 重三 ・・・・
2 日付 ログイン ログオフ ログイン ログオフ ログイン ログオフ
3 2017/5/16 B3
4 2017/5/17
5 2017/5/18
6 2017/5/19
7 2017/5/20
8 2017/5/21
9 2017/5/22
10 2017/5/23
11 2017/5/24
12 2017/5/25
13 2017/5/26
14 2017/5/27
15 2017/5/28
16 2017/5/29
17 2017/5/30
18 2017/5/31
19 2017/6/1
20 2017/6/2
21 2017/6/3
22 2017/6/4
23 2017/6/5
24 2017/6/6
25 2017/6/7
26 2017/6/8
27 2017/6/9
28 2017/6/10
29 2017/6/11
30 2017/6/12
31 2017/6/13
32 2017/6/14
33 2017/6/15

下記の「表①」のエクセルデータを、「表②」に反映させたいです。
「表②」のB3セルに、数式を入れて、「表①」のログイン・ログオフ時刻を「表②」へ
自動反映させたいのですが、どのような式を入れたらいいかがわかりません。

現状は、目視とコピー&ペーストで表①→表②へ貼りつけていますが、
スタッフの数が多いのとシフト勤務で出勤日数も時間もバラバラで、作業が大変です。

また、早くて正確なら他の方法でもいいです。
よろしくお願いします。


表①
A B ...続きを読む

Aベストアンサー

表①のB列ですが、シリアル値「2017/5/16 8:21:35」を表示形式で「2017/5/16」と表示していませんか?もしそうであればNGです。B2セルは時刻の部分をゼロにしてください。

2人ログオンする日がある件ですが、残念ながら、この方式では実現できません。
No.1 chonamiさんの案が一番簡単そうです。たぶん、こんな感じを想定していると思われます。

【B3セル】=SUMIFS(表①!$C:$C,表①!$A:$A,B$1,表①!$B:$B,$A3)
※C3セルは、上記を参考にご自分で考えてみて下さい。

Qエクセルの関数で

以下の算式を満たすエクセルの関数を教えていただけないでしょうか。

セルA1(①) セルA2(②) セルA3(③) セルA4(④) セルA5(⑤)


③=①-②
④=③÷② 小数点3位未満切り捨て
⑤ ④が0.05超の場合  0.09+((④-0.05)×0.3  (上限0.1) 小数点3位未満切り捨て
④が0.05以下の場合 0.09-((0.05-④)×0.1  (下限0.06) 小数点3位未満切り捨て


ここの⑤を満たす式を教えてください。

例えば①531,116,991②646,729,949のとき⑤は0.067となります。

よろしくお願いいたします。

Aベストアンサー

0.05超の場合の式…⑥
0.05以下の場合の式…⑦
IF(④>0.05,IF(⑥>0.1,ROUNDDOWN(⑥,×),0.1),IF(⑦<0.06,0.06,ROUNDDOWN(⑦,×)))

×部分はうろ覚えです、小数点第三位なら「3」…ですかね…?

以上でどうでしょう

QEXCELで複数の表からの集計

ある製品αは複数のUNIT(A~C)で構成され、各UNITは複数の部品(あ~お)で構成されるとします。
添付画像のような製品、UNIT構成の場合に製品αを構成する部品数はどのように集計すればよいのでしょうか。

Aベストアンサー

No.8です。

>表に空欄があっても問題ないのでしょうか?

もちろん空白があっても問題ないはずです。
前回の画像の配置で、行方向・列方向にはいくらデータがあっても対応できます。
ただ投稿後思ったのですが、
D列「PART」のデータが各「UNIT」にすべて存在すれば問題ないのですが、
D列データが「UNIT」の中に存在しない!というコトはないですよね?
そうであれば前回のコードで大丈夫なのですが、万一「UNIT」にない場合のエラー処理のために
↓のコードに変更してみてください。

Sub Sample2() '//この行から//
Dim i As Long, k As Long, lastRow As Long
Dim c As Range, r As Range
lastRow = Cells(Rows.Count, "D").End(xlUp).Row
If lastRow > 2 Then
Range(Cells(3, "E"), Cells(lastRow, "E")).ClearContents
End If
For i = 3 To Cells(Rows.Count, "A").End(xlUp).Row
Set c = Rows(2).Find(what:=Cells(i, "A"), LookIn:=xlValues, lookat:=xlWhole)
For k = 3 To Cells(Rows.Count, "D").End(xlUp).Row
Set r = Columns(c.Column).Find(what:=Cells(k, "D"), LookIn:=xlValues, lookat:=xlWhole)
If Not r Is Nothing Then '//←追加★//
With Cells(k, "E")
.Value = .Value + r.Offset(, 1) * Cells(i, "B")
End With
End If '//←追加★//
Next k
Next i
End Sub '//この行まで//

※ 「★」の行を追加しただけです。
「UNIT」にD列データがない場合の処理を追加しました。m(_ _)m

No.8です。

>表に空欄があっても問題ないのでしょうか?

もちろん空白があっても問題ないはずです。
前回の画像の配置で、行方向・列方向にはいくらデータがあっても対応できます。
ただ投稿後思ったのですが、
D列「PART」のデータが各「UNIT」にすべて存在すれば問題ないのですが、
D列データが「UNIT」の中に存在しない!というコトはないですよね?
そうであれば前回のコードで大丈夫なのですが、万一「UNIT」にない場合のエラー処理のために
↓のコードに変更してみてください。

Sub Sample2() '//この行...続きを読む

Qエクセルで、数量通りに列を繰り返したい

エクセルで、部品表を作り、記載されている数量通りに列を繰り返したいのですが、
どのようにすればいいのでしょうか?

イメージは、以下のようにしたいです。

Aベストアンサー

こんばんは!

手っ取り早くVBAでの一例です。
元データはSheet1のA1セル以降(1行目は項目行)にあり、Sheet2に表示するとします。
標準モジュールにしてください。

Sub Sample1()
Dim i As Long, cnt As Long, wS As Worksheet
Set wS = Worksheets("Sheet1")
Application.ScreenUpdating = False
With Worksheets("Sheet2")
.Range("A:B").ClearContents
wS.Range("A1").Resize(, 2).Copy .Range("A1")
For i = 2 To wS.Cells(Rows.Count, "A").End(xlUp).Row
If wS.Cells(i, "C") > 0 Then '//←念のため//
cnt = 0
Do Until cnt = wS.Cells(i, "C")
cnt = cnt + 1
With .Cells(Rows.Count, "A").End(xlUp).Offset(1)
.Value = wS.Cells(i, "A")
.Offset(, 1) = wS.Cells(i, "B")
End With
Loop
End If
Next i
End With
Application.ScreenUpdating = True
MsgBox "完了"
End Sub

※ データ変更があるたびにマクロを実行する必要があります。m(_ _)m

こんばんは!

手っ取り早くVBAでの一例です。
元データはSheet1のA1セル以降(1行目は項目行)にあり、Sheet2に表示するとします。
標準モジュールにしてください。

Sub Sample1()
Dim i As Long, cnt As Long, wS As Worksheet
Set wS = Worksheets("Sheet1")
Application.ScreenUpdating = False
With Worksheets("Sheet2")
.Range("A:B").ClearContents
wS.Range("A1").Resize(, 2).Copy .Range("A1")
For i = 2 To wS.Cells(Rows.Coun...続きを読む

QExcelの関数について、教えてください!

すみません。こんなことができるか分からないのですが、Excelでやりたいことがあります。
本当は全自動で計算できればいいのですが、多少、人間の手が介入しても構いません。プログラミングなどは分からないので、なるべくExcelでやりたいです。関数もそこまで詳しくないので、できたら分かりやすく教えていただけると嬉しいです。どうぞよろしくお願いします。

やりたいこと。
例えば、Aの行に、日時があり、Bの欄にデータがあります。下記参照ください。

A B
1月1日 100
1月2日 99
1月3日 101
1月4日 104
1月5日 94
1月6日 110
1月7日 112
1月8日 115
1月9日 109
1月10日 115
1月11日 120
1月12日 125

やりたいことが2段階になっています。

1、ある値を決めてその値が出た以降のデータを使いたいです(それ以前のデータは使わない)。例えば110という値を指定した場合、1月6日に110という値が出るので、1月6日以降だけのデータを使いたい。

2、その後、6日以降のデータで、データのバラツキを見たいので、例えば110の±10の範囲でその範囲を超えたときに、この表では、1月11日に120を超えるので、超えたポイントの日付を出して欲しいです。


例えばC1に110(110からチェックを開始)をD1にバラツキ範囲(±10)を入力したら、下記のような結果を出すことは難しいでしょうか??

A B C D
1月1日 100 110 10
1月2日 99
1月3日 101
1月4日 104
1月5日 94
1月6日 110
1月7日 112
1月8日 115
1月9日 109
1月10日 115
1月11日 120
1月12日 125

結果
チェックスタートした日付 1月6日
範囲超えた日付と方向 1月11日 (+)

かなり難しく、私では手作業での確認となっております。どうぞいい案がありましたら、教えてください。

すみません。こんなことができるか分からないのですが、Excelでやりたいことがあります。
本当は全自動で計算できればいいのですが、多少、人間の手が介入しても構いません。プログラミングなどは分からないので、なるべくExcelでやりたいです。関数もそこまで詳しくないので、できたら分かりやすく教えていただけると嬉しいです。どうぞよろしくお願いします。

やりたいこと。
例えば、Aの行に、日時があり、Bの欄にデータがあります。下記参照ください。

A B
1月1日 100
1...続きを読む

Aベストアンサー

こんにちは!

一例です。
↓の画像でG1セルに
=MIN(IF(B1:B1000>=C1,A1:A1000))
配列数式なのでCtrl+Shift+Enterで確定!

G2セルに
=MIN(IF((ABS(VLOOKUP(G1,A1:B1000,2,0)-B1:B1000)>=D1)*(A1:A1000>G1),A1:A1000))
これも配列数式なので、Ctrl+Shift+Enterで確定!

G3セルに
=IF(SIGN(VLOOKUP(G1,A:B,2,0)-VLOOKUP(G2,A:B,2,0))>0,"(-)","(+)")

G3セルだけは配列数式ではありません。
G1・G2セルの表示形式を「日付」にして完了です。

※ エラー処理をしていませんので、
データが存在しない場合は「1月0日」と表示されたり
エラーになるかもしれません。m(_ _)m

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ランキング