[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『数値の照合について。』(ヤイリ)
いつも大変お世話になります。
sheet1 Aセルに本データがあったとします。
sheet1 Aセル
123
213
111
125
555
sheet2 Aセルに引抜データがあったとします。
sheet2 Aセル
555
777
123
上記のようなデータが存在した場合に
sheet2 Bセルに
=VLOOKUP(A1,Sheet1!$A$1:$A$1000000,1,FALSE)
を記述すると
sheet1 Aセルの数値が
sheet2 Bセルにヒットさせることが出来るのですが
本データの何件目に同じデータが存在するか
現状分かりません。
sheet1 Aセル 本データの何レコード目にあるか分かる方法は
ございますか?
例ですと
sheet1 Aセル(本データ)
123→1件目にマッチ(記号でもなんでもヒットしたことが分かればと思います)
213
111
125
555
sheet2 Aセル(引抜データ)
555
777
123
上記のような本データ1件目にマッチした
結果が情報が欲しいのですが
アドバイスの程よろしくお願いいたします。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
match関数ではだめですか? =MATCH(A1,Sheet1!$A$1:$A$1000000,FALSE)
Sheet1に表示させるなら =MATCH(A1,Sheet2!$A$1:$A$1000000,FALSE) に変わるだけですし、これが求めてることであってますかねぇ (稲葉) 2017/07/28(金) 05:50
因みにエクセル2010を使用していて
最大行を調べまして
最大行数が1048576行となっているのですが これ以上の行数の照合は難しいのでしょうか。
=MATCH(A1,Sheet1!$A:$A,FALSE)
(ヤイリ) 2017/07/28(金) 07:21
何をしようとしているのです? エクセルで扱えない行数以上の行数を照合するって意味が分かりません。
それにMatch関数は一番最初に出現した配列の中の番号を返しているので、重複の場合は2番目等できませんよ? (稲葉) 2017/07/28(金) 08:19
sql使えるならセレクトクエリで良いような? 解決して良かったですが、未だに何がしたかったのかわからないです (稲葉) 2017/07/28(金) 22:27
なるほど 90万て何ページか想像もできませんが大変ですね わざわざご報告ありがとうございます (稲葉) 2017/07/28(金) 23:20
DatFileName = "C:\本データ.txt" に本データ
InFileName = "C:\引抜依頼.txt" に引抜依頼 OutFileName = "C:\引抜結果.txt" に引抜結果を 出力しております。
Sub Main()
Dim DatFileName As String
Dim InFileName As String
Dim OutFileName As String
Dim DatFN As Long
Dim InFn As Long
Dim OutFn As Long
Dim dat() As String
Dim iFind As Long
Dim tmpStr As String
DatFileName = "C:\本データ.txt" InFileName = "C:\引抜依頼.txt" OutFileName = "C:\引抜結果.txt"
'データ配列の読込 DatFN = FreeFile Open DatFileName For Input As #DatFN i = 0 Do Until (EOF(DatFN)) i = i + 1 ReDim Preserve dat(i) As String Input #DatFN, dat(i) Loop Close #DatFN
'入力ファイルの読込 InFn = FreeFile Open InFileName For Input As #InFn OutFn = FreeFile Open OutFileName For Output As #OutFn
Do Until (EOF(InFn)) iFind = 0 Input #InFn, tmpStr
For i = 1 To UBound(dat) If (tmpStr = dat(i)) Then tmpStr = tmpStr & "引抜照合しました" Next i Print #OutFn, tmpStr Loop
Close #InFn Close #OutFn
End Sub
引抜結果ファイルのマッチしたデータの横に
"引抜照合しました"と表示させているのですが
マッチ関数のように
本データの数値が表示させるように出来るのでしょうか。
DatFileName→引抜依頼
InFileName→本データにすれば
本データの横に"引抜照合しました"と表示出来るのですが
件数が多いと分かりにくいので
できたら、引抜件数の少ない引抜データに
本データの何件目に引抜対象者があるか
知るための情報(何件目か分かる数値)があればと思っております。
お手数をお掛けします。
宜しくお願い致します。
(ヤイリ) 2017/07/30(日) 06:02
こういうことでよろしいですか? 【元データ】 532 100 558 50 400 454 【引抜依頼】 100 50 400 【引抜結果】 100: 2行目 50: 4行目 400:5行目
Option Explicit Type FileConfig Path As String 'ファイルパス Num As Long 'ファイルNo tmp As String '値 cnt As Long '行番号 End Type Sub Main() '//元データ配列の読込 Dim dic As Object Set dic = CreateObject("Scripting.Dictionary") Dim Data As FileConfig With Data .Path = "C:\本データ.txt" .Num = FreeFile .cnt = 1 Open .Path For Input As #.Num Do Until (EOF(.Num)) Input #.Num, .tmp dic(.tmp) = dic(.tmp) & " " & .cnt '//連想配列 値に対して、行番号を入れる .cnt = .cnt + 1 Loop Close #.Num End With
'//引抜依頼と照合 Dim rows() As String ReDim rows(1 To dic.Count)
Dim PicUp As FileConfig With PicUp .Path = "C:\引抜依頼.txt" .Num = FreeFile .cnt = 1 Open .Path For Input As #.Num Do Until (EOF(.Num)) Input #.Num, .tmp rows(.cnt) = .tmp & ":" & Trim(dic(.tmp)) & "行目 引抜照合しました" '//値を渡して、元データの行番号を得る .cnt = .cnt + 1 Loop Close #.Num End With
'//書き込み Dim OutPut As FileConfig With OutPut .Path = "C:\引抜結果.txt" .Num = FreeFile .cnt = 1 Open .Path For Output As #.Num For .cnt = 1 To UBound(rows) Print #.Num, rows(.cnt) '//照合で取得したデータを書き込む Next .cnt Close #.Num End With Set dic = Nothing MsgBox "出力完了しました" End Sub
(稲葉) 2017/07/30(日) 07:21
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.