[[20170728033732]] 『数値の照合について。』(ヤイリ) ページの最後に飛ぶ

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

 

『数値の照合について。』(ヤイリ)

いつも大変お世話になります。
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

助かりました。
結果が求められました。
MATCH関数は
=MATCH(検査値, 検索範囲, [照合の型])の
検査値しか求められないのかと
思い、よく調べずに質問してしまい
申し訳ございません。

因みにエクセル2010を使用していて
最大行を調べまして

 最大行数が1048576行となっているのですが
これ以上の行数の照合は難しいのでしょうか。

=MATCH(A1,Sheet1!$A:$A,FALSE)

(ヤイリ) 2017/07/28(金) 07:21


 何をしようとしているのです?
 エクセルで扱えない行数以上の行数を照合するって意味が分かりません。

 それにMatch関数は一番最初に出現した配列の中の番号を返しているので、重複の場合は2番目等できませんよ?
(稲葉) 2017/07/28(金) 08:19

ありがとうございます。
エクセルで扱えないんですね。
今回は90万件程でしたので
本データから
SQLでソートされた
引き抜き対象のIDの配列を事前に抽出し
本データ+引き抜きデータを
エクセルに挿入して、対応出来ました。
(ヤイリ) 2017/07/28(金) 21:17

 sql使えるならセレクトクエリで良いような?
 解決して良かったですが、未だに何がしたかったのかわからないです
(稲葉) 2017/07/28(金) 22:27

sqlですと、使用できないオペレーターもおり
共有する事を考えると、エクセルを選択しました。
本データより
レコード順番が照合できると
本データをすべて印字した後から
リストより引き抜き対象者を手動で
引き抜くために
本データの何件目かを引抜対象者があるか
知るための情報が必要だったのです。
どうもありがとうございました。
(ヤイリ) 2017/07/28(金) 23:01

 なるほど
 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


返信遅くなりました。
わざわざコードを書き直して頂いて恐縮です。
検証する時間が今日になってしまったのですが
希望通りの結果が得られたと思います。
データによって不具合が発生した場合、ご相談
させて下さい。
どうもありがとうございました。
(ヤイリ) 2017/07/31(月) 11:25

コメント返信:

[ 一覧(最新更新順) ]


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