[[20040603015747]] 『同じ値を遡って探したい。』(正) ページの最後に飛ぶ

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

 

『同じ値を遡って探したい。』(正)

毎度お世話になります。
済みませんが、どなたか教えてくださいませんか。

A列に数値データが時系列に入っています。

B列の数値と同じ数値をA列の同じ行から遡って探し、

 最初に見つかった行のC列にのみAと表示したい。

現状はB列の値を見て、A列を目で探してC列に入力しています。

C列にはどの様な計算式をいれればよいでしょうか。

Me,2002  宜しくお願いします。(正)

	A	B	C
1	データー	キー	答え
2	7030		
3	7030		
4	7140	7140	A
5	6400		
6	6120		
7	5120		A
8	5210	5120	
9	5800		A
10	5660		
11	5700		
12	5510		
13	5650		
14	5790		
15	5610	5800	
16	5140		
17	5390		

 C2へ
=IF(SUMPRODUCT(($B$2:$B$17=A2)*1)*(COUNTIF($A$2:A2,A2)=1),"A","")
として、必要範囲へコピー、貼り付けです。
(KAMIYA)

 C2に下の数式を入力し、C17までフィルドラッグされたらどうでしょう? (LOOKUP)

 =IF(COUNTIF(B$2:B$17,A2),
 IF(COUNTIF(A2:INDEX(A$2:A$17,MATCH(A2,B$2:B$17,)),A2)=1,"A",""),"")

	A	B	C
1	データー	キー	答え
2	7140		
3	7030		
4	7140	7140	A
5	7140		
6	6120		
7	5120		A
8	5210	5120	
9	5800		A
10	5660		
11	5700		
12	5510		
13	5650		
14	5790		
15	5610	5800	
16	5140		
17	5390


 「初出」ではなくて「さかのぼって」ですね。
私の数式は無視してください。
(KAMIYA)


(KAMIYA)さん、(LOOKUP)さん 
早速のご教授有難うございました。 
(LOOKUP)さんの式を利用させていただきました。

(LOOKUP)さん。
希望通りの答えが得られ喜んでいます。

実は実際はA,B,C列の間に別の列が入っています。
B列のデータは計算式でもって来ています。
それを考慮して列名を変えて検証しますと、
時々B列にデータが無いのにC列にAが表示されます。

同じ数値で質問どおりの列の並びにすると正しく出来ます。
いろいろ調べているのですが解りません。

教えていただいた計算式をただ入力しているだけで、
式が理解できていない為、解決出来ないのだと思います。

厚かましいお願いですが計算式の説明をして頂けませんでしょうか。
よろしくお願いします。      (正)


 この数式の判りにくいところは、
 COUNTIF(A2:INDEX(A$2:A$17,MATCH(A2,B$2:B$17,)),A2)の
 INDEX(A$2:A$17,MATCH(A2,B$2:B$17,))でしょう?
 これは、
 MATCH(A2,B$2:B$17,)でA列の自分の値がB列に出現する最上段の位置を求め、
 INDEX(A$2:A$17,その位置)でそのセル参照を戻しているのです。

 私が掲載した表で、C2の数式のこの部分は、 =INDEX(A$2:A$17,MATCH(A2,B$2:B$17,))ですが、
 =INDEX(A$2:A$17,3)でA4を指しています。
 自分のところからB列に同じ数値がある最上行のセル位置です。

 COUNTIF(A2:A4,A2)は、2ですから、直ぐ外側のIF()の""を戻しています。

 C4では、
 =INDEX(A$2:A$17,MATCH(A4,B$2:B$17,))になりますが、
 =INDEX(A$2:A$17,3)は、同様にA4を指しています。
 しかし、
 COUNTIF(A4:A4,A4)は、1になり、Aを戻しています。

 このような意図で試作しています。                          (LOOKUP)

 未解決のごようすですが、状況は、よく理解できませんので、とりあえず、
 下のようにして、A列が数値以外の場合は、""とするようにしたらどうでしょう?
 =IF(COUNT(A2),IF(COUNTIF(B$2:B$17,A2),
 IF(COUNTIF(A2:INDEX(A$2:A$17,MATCH(A2,B$2:B$17,)),A2)=1,"A",""),""),"")

(LOOKUP)さん。 有難うございます。
早速試してみましたが、やはり同じ結果になります。
実際のデータでキーのところのデータも計算式の結果でなく数値そのものを入力して、
教えていただいた計算式@Aの二通りを検証しましたが、500データで9ケ不都合
が出ます。(検証*のところ)
少しデータが多いですが送らせていただきます。
お手すきの折見ていただけたらありがたいです。
よろしくお願いします。    (正)

	A	B	C	D	E
1	データー	キー	答え@	答えA	検証
2	7820	7820	A	A	
3	8820	0			
4	9750	0			
5	10750	0			
6	10900	0			
7	11000	0			
8	11410	0			
9	11340	0			
10	10800	0			
11	10350	0			
12	10500	0			
13	10880	0			
14	10780	0			
15	11000	0			
16	12000	0			
17	13990	0			
18	14200	0	A	A	
19	13950	0			
20	12810	0			
21	14090	0			
22	13950	0			
23	13750	0			
24	13400	0			
25	13990	0			
26	13540	0			
27	13700	0			
28	12950	14200			
29	12090	0			
30	11800	0			
31	11480	0			
32	10370	0	A	A	
33	10700	0			
34	11160	10370			
35	11880	0	A	A	
36	10830	0			
37	11280	0			
38	11080	11880			
39	10200	0			
40	9850	0			
41	10100	0			
42	10150	0			
43	9990	0			
44	10020	0			
45	9710	0			
46	9350	0			
47	8670	0			
48	8580	0			
49	8200	0			
50	8650	0			
51	8750	0			
52	7950	0			
53	7500	0	A	A	
54	8010	7500			
55	8560	0	A	A	
56	7880	0			
57	8050	8560			
58	7680	0			
59	7490	0			
60	7380	0			
61	6840	0			
62	6550	0	A	A	
63	7110	0			
64	7050	6550			
65	8050	0			
66	8260	0			
67	8500	0	A	A	
68	8080	8500			
69	7500	0	A	A	*
70	6870	0			
71	7000	0			
72	7250	0			
73	6890	0			
74	7060	0			
75	6750	0			
76	6650	0			
77	6160	0			
78	5970	0			
79	6380	0			
80	6240	0			
81	5900	0			
82	5790	0			
83	6130	0			
84	5960	0			
85	5800	0			
86	6000	0			
87	5650	0			
88	5360	0			
89	5340	0			
90	5080	5080	A	A	
91	5640	0	A	A	
92	5160	5640			
93	4950	0			
94	4970	0			
95	4600	0			
96	4100	0			
97	3780	0	A	A	
98	3830	0			
99	3840	0			
100	3940	3780			
101	4230	0	A	A	
102	4070	0			
103	3970	0			
104	3960	0			
105	3920	4230			
106	3520	0			
107	3410	0			
108	2995	0	A	A	
109	3170	2995			
110	3670	0			
111	3970	0			
112	4470	0			
113	4890	0			
114	5390	0			
115	5430	0			
116	5210	0			
117	6050	0			
118	7050	0	A	A	
119	6910	7050			
120	6300	0	A	A	
121	6900	6300			
122	6950	0	A	A	
123	6650	0			
124	6360	6950			
125	5680	0			
126	6150	0			
127	5950	0			
128	5950	0			
129	6170	0			
130	6040	0			
131	5880	0			
132	5810	0			
133	5700	0			
134	5480	0			
135	5580	0			
136	5330	0			
137	5180	0			
138	5530	0			
139	5450	0			
140	5390	0			
141	5240	0			
142	5240	0			
143	5150	0			
144	4850	4850	A	A	
145	5350	0	A	A	
146	5220	0			
147	5070	0			
148	4920	5350			
149	4460	0			
150	4180	0			
151	4000	0	A	A	
152	4260	0			
153	4210	0			
154	4190	0			
155	4300	0			
156	4200	0			
157	4320	4000			
158	4820	0			
159	4930	0			
160	5100	0	A	A	
161	4850	0			
162	4700	0			
163	4700	0			
164	4720	5100			
165	4520	0			
166	4540	0			
167	4790	0			
168	4550	0			
169	4410	0			
170	4530	0			
171	4600	0			
172	4610	0			
173	4510	0			
174	4360	4360	A	A	
175	4800	0			
176	4880	0			
177	4790	0			
178	4660	0			
179	4510	0			
180	4560	0			
181	4580	0			
182	4700	0			
183	4990	0			
184	5390	0			
185	5650	0	A	A	
186	5390	0			
187	5200	0			
188	5160	0			
189	5180	5650			
190	5060	0			
191	5290	0			
192	5020	0			
193	5100	0	A	A	*
194	4980	0			
195	5100	0			
196	5150	0			
197	5100	0			
198	4990	0			
199	4970	0			
200	4790	0			
201	4790	0			
202	4620	0			
203	4520	0			
204	4420	0			
205	4400	0			
206	4430	0			
207	4400	0			
208	4500	0			
209	4580	0			
210	4410	0			
211	4230	0	A	A	*
212	4250	0			
213	4270	0			
214	4120	0			
215	3940	0			
216	3900	0	A	A	
217	3920	3900			
218	4340	0	A	A	
219	4310	0			
220	4160	0			
221	4170	0			
222	4180	0			
223	4040	0			
224	4090	0			
225	4040	0			
226	4040	4340			
227	3880	0			
228	3860	0			
229	3720	0			
230	3560	0			
231	3600	0			
232	3450	0			
233	3650	0			
234	3570	0			
235	3500	0			
236	3380	0			
237	3200	0			
238	3310	0			
239	3080	0			
240	3250	0			
241	3180	0			
242	3280	0			
243	3300	0			
244	3010	0	A	A	
245	3140	0			
246	3200	0			
247	3300	3010			
248	3410	0	A	A	
249	3200	0			
250	3350	0			
251	3240	0			
252	3130	0			
253	3070	3410			
254	3020	0			
255	3140	0			
256	3070	0			
257	2990	0			
258	2950	0			
259	2860	0			
260	2885	0			
261	2830	0			
262	2595	0			
263	2570	0			
264	2660	0			
265	2625	0			
266	2525	0			
267	2455	0			
268	2310	0			
269	2175	0	A	A	
270	2360	0			
271	2230	2175			
272	2500	0			
273	2450	0			
274	2400	0			
275	2545	0	A	A	
276	2345	2545			
277	2245	0			
278	2290	0			
279	2100	0	A	A	
280	2295	2100			
281	2380	0	A	A	
282	2290	0			
283	2280	0			
284	2240	0			
285	2215	2380			
286	2110	0			
287	2110	0			
288	2110	0			
289	2180	0			
290	2105	0	A	A	
291	2175	0	A	A	*
292	2215	0			
293	2130	0			
294	2135	2105			
295	2350	0			
296	2425	0			
297	2380	0	A	A	*
298	2580	0			
299	2980	0			
300	2785	0			
301	3020	0			
302	3040	0			
303	3040	0			
304	3070	0			
305	3090	0	A	A	
306	2990	3090			
307	2700	0			
308	2600	0			
309	2620	0			
310	2585	0			
311	2595	0			
312	2535	0			
313	2660	0			
314	2500	0			
315	2525	0			
316	2430	0			
317	2325	0	A	A	
318	2470	0			
319	2420	2325			
320	2650	0			
321	2660	0			
322	2695	0			
323	2635	0			
324	2540	0			
325	2560	0			
326	2695	0			
327	2830	0	A	A	
328	2800	0			
329	2700	0			
330	2680	2830			
331	2470	0			
332	2505	0			
333	2620	0			
334	2660	0			
335	2700	0			
336	2560	0			
337	2500	0			
338	2650	0			
339	2520	0			
340	2475	0			
341	2340	0			
342	1958	0	A	A	
343	2145	0			
344	2100	0	A	A	*
345	2030	0			
346	2070	0			
347	2030	0			
348	2085	0			
349	2120	1958			
350	2230	0			
351	2285	0	A	A	
352	2255	0			
353	2250	0			
354	2135	0			
355	2150	0			
356	2120	0			
357	2110	0			
358	2110	0			
359	2225	0			
360	2235	0			
361	2125	0			
362	2110	0			
363	2075	0			
364	2060	0			
365	2080	2285			
366	2010	0			
367	1980	0			
368	1981	0			
369	1942	0			
370	1861	0			
371	1770	0			
372	1745	0			
373	1869	0			
374	1800	0			
375	1792	0			
376	1781	0			
377	1800	0			
378	1700	0			
379	1604	0			
380	1649	0			
381	1582	0	A	A	
382	1625	1582			
383	1780	0			
384	1760	0			
385	1710	0			
386	1782	0			
387	1803	0			
388	1856	0			
389	1959	0			
390	2045	0			
391	1994	0			
392	2135	0			
393	2400	0			
394	2800	0	A	A	
395	2690	0			
396	2540	0			
397	2590	0			
398	2580	2800			
399	2480	0			
400	2430	0			
401	2380	0			
402	2270	0			
403	2240	0	A	A	
404	2355	0			
405	2450	2240			
406	2495	0	A	A	
407	2375	0			
408	2325	0	A	A	*
409	2380	0			
410	2355	0			
411	2440	0			
412	2395	0			
413	2465	0			
414	2395	0			
415	2400	0			
416	2340	0			
417	2265	0			
418	2295	0			
419	2285	2495	A	A	*
420	2075	0			
421	2110	0			
422	2015	0			
423	2040	0			
424	2015	0			
425	2125	0			
426	2070	0			
427	2025	0			
428	1950	0			
429	1941	0			
430	1921	0			
431	1875	0			
432	1898	0			
433	1975	0			
434	1911	0			
435	1874	0	A	A	
436	1875	0			
437	1931	0			
438	2020	0			
439	1971	0			
440	1979	0			
441	1985	1874			
442	2095	0			
443	2105	0	A	A	*
444	2115	0	A	A	
445	2085	0			
446	2060	0			
447	2045	0			
448	2035	0			
449	1950	0			
450	2025	0			
451	1991	0			
452	2005	0			
453	2010	0			
454	1984	0			
455	1976	0			
456	1955	0			
457	1917	2115			
458	1895	0			
459	1883	0			
460	1811	0			
461	1650	0			
462	1603	0			
463	1700	0			
464	1655	0			
465	1624	0			
466	1665	0			
467	1625	0			
468	1625	0			
469	1664	0			
470	1670	0			
471	1662	0			
472	1691	0			
473	1710	0			
474	1734	0			
475	1702	0			
476	1714	0			
477	1670	0			
478	1650	0			
479	1646	0			
480	1605	0			
481	1601	0			
482	1475	0			
483	1475	0			
484	1420	0			
485	1365	0			
486	1485	0			
487	1425	0			
488	1431	0			
489	1390	0			
490	1380	0			
491	1380	0			
492	1350	0			
493	1296	0			
494	1266	0			
495	1280	0			
496	1190	0			
497	1232	0			
498	1117	0	A	A	
499	1221	1117			
500	1245	0			
501	1235	0			
502	終わり	終わり	終わり	終わり	終わり


  横からおじゃまします。
数式を拝見致しましたが、複雑で私には書けそうにありませんでした。
 (考えてみたのですが、解決できませんでした(汗) )
こんな時はすぐマクロに逃げてしまうのですが・・・
お急ぎで、マクロで良ければ、以下のコードで一応動きました。 (マーヤ)
Sub test()
Dim I As Long, II As Long
For I = 2 To 1000
If Cells(I, 2).Value > 0 Then
    For II = I To 2 Step -1
        If Cells(II, 1).Value = Cells(I, 2).Value Then
        Cells(II, 6).Value = "A": Exit For
        End If
    Next II
End If
Next I
End Sub


(マーヤー)さん。
有難うございます。
ご教授の通りコードを入力してマクロを実行しましたら、
不都合なところも無く、F列に希望通りの答えが得られました。
有難うございました。

実は私、マクロは勉強したく思っていますが超初心者のため例題では
動かせたのですが、実際の場合はどのように編集し直せばよいのか解りません。

実際は例題のA2のデータがF6から1000行ほど、

   キーのB2のデータがAY6から1000行ほどに入っています。

      C2の答えを BA6から1000行ほどに出したいのです。

この場合コードをどのように編集すればよろしいのか、ご教授願えませんでしょうか。

よろしくお願いします。
         
                        (正)


 For〜Nextのループだけですので、わかりやすいと思います。
セル番地 F5=Cells(5,6) つまりCells(行番号,列番号)となります。
 ↓書き換えましたが、確認まではしておりません(汗)・・・。(マーヤ)
  
Sub test()
Dim I As Long, II As Long
For I = 6 To 1100  		'行数は6〜1100としています
If Cells(I, 51).Value > 0 Then  'AY列のセル
    For II = I To 6 Step -1
        If Cells(II, 6).Value = Cells(I, 51).Value Then
        Cells(II, 53).Value = "A": Exit For   'BA列に"A"を表示
        End If
    Next II
End If
Next I
End Sub


(マーヤ)さん。早速のご教授有難うございました。

早速確認させていただきました。
ピッタシ正解。有難うございました。
今後とも宜しくお願いします。

              (正)


 掲載の数式は、上の方にない場合には、下の直近行を対象にしているのですが、
 下方向は、無視するのでしたら、このようにされたらどうでしょう? (LOOKUP)

 =IF(COUNTIF(B2:B$17,A2),
 IF(COUNTIF(A2:INDEX(A$2:A$17,MATCH(A2,B$2:B$17,)),A2)=1,"A",""),"")


(LOOKUP)さん。

有難うございました。
不具合なところも無く、完全に思い通りの結果になりました。

私の最初の質問が不十分なため大変ご迷惑をおかけしました。
今後は気をつけます。

お陰でいろいろと勉強させていただきました。
今後とも宜しくお願いします。 (正)


コメント返信:

[ 一覧(最新更新順) ]


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