Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


14 / 12989 ツリー ←次へ | 前へ→

【79081】CSVで重複しないデータを抜き出したい のんびり 17/5/3(水) 19:31 質問[未読]

【79085】Re:CSVで重複しないデータを抜き出したい のんびり 17/5/3(水) 20:01 質問[未読]
【79089】Re:CSVで重複しないデータを抜き出したい マナ 17/5/3(水) 21:50 発言[未読]
【79091】Re:CSVで重複しないデータを抜き出したい マナ 17/5/4(木) 9:51 発言[未読]
【79092】Re:CSVで重複しないデータを抜き出したい マナ 17/5/4(木) 17:03 発言[未読]

【79085】Re:CSVで重複しないデータを抜き出し...
質問  のんびり  - 17/5/3(水) 20:01 -

引用なし
パスワード
   ▼マナ さん:
>▼のんびり さん:
>偶然、金額が同じデータというものが存在するのでは?

おっしゃる通りです。
とりあえずできるところからと考えて作っていたので
(自分で作る計画の中で)
そこまではカバーしきれないかと思って条件に入れていませんでした。
カバーできるとうれしいですが…

>
>参考までに、できてる3を提示してもらえますか。

不要な部分も入っているかと思います。お見苦しいと思いますが、以下です。


Sub データ照合()
  Const JCB_SYA As Integer = 1   
  Const JCB_BI As Integer = 3     
  Const JCB_SAKI As Integer = 4    
  Const JCB_KINGAKU As Integer = 5  

  Const MM_KINGAKU As Integer = 5  
  
  Const S_KINGAKU As Integer = 2   

  Dim j As Integer   
  Dim m As Integer    
  Dim Cnt As Integer  
  
  Dim JCBKiten As Range 
  Dim MMKiten As Range 
  Dim SeiKiten As Range 

  Cnt = 1        

  Set JCBKiten = Worksheets("JCBデータ").Range("A5")
  Set MMKiten = Worksheets("マスターマネーデータ").Range("A5")
  Set SeiKiten = Worksheets("整合データ").Range("A5")

For m = 1 To MMKiten.CurrentRegion.Rows.Count

 For j = 1 To JCBKiten.CurrentRegion.Rows.Count
    
    If JCBKiten.Cells(j, JCB_KINGAKU).Value = MMKiten.Cells(m, MM_KINGAKU).Value Then

       SeiKiten.Cells(Cnt, 1).Value = _
         JCBKiten.Cells(j, JCB_BI).Value
         
       SeiKiten.Cells(Cnt, 2).Value = _
         JCBKiten.Cells(j, JCB_KINGAKU).Value
         
       SeiKiten.Cells(Cnt, 3).Value = _
         JCBKiten.Cells(j, JCB_SAKI).Value

       SeiKiten.Cells(Cnt, 4).Value = _
         JCBKiten.Cells(j, JCB_SYA).Value


      Cnt = Cnt + 1 
    End If
  Next j
  
Next m
  
    
End Sub

【79089】Re:CSVで重複しないデータを抜き出し...
発言  マナ  - 17/5/3(水) 21:50 -

引用なし
パスワード
   ▼のんびり さん:

>不要な部分も入っているかと思います

現在のコードで気になることが、もう1点。

もし、一致していたら、内側のループからExit forしないと、
無駄に確認を続行することになります。

【79091】Re:CSVで重複しないデータを抜き出し...
発言  マナ  - 17/5/4(木) 9:51 -

引用なし
パスワード
   ▼のんびり さん:

現在のコードをベースに考えてみました。
判定用の変数を1個使います。

--------
あずは、現在のコード

for m=1 to …MMシートをループ
  for j=1 to …JCBシートをループ
    If 同じデータなら then
      転記
    end if
  next j
next m


--------
これを、こんな感じで
内側のループが終わってから転記するようにします。

Dim 整合 as boolean

for m=1 to …MMシートをループ
  整合=False
  for j=1 to …JCBシートをループ
    If 同じデータなら then
      整合=True
      Exit For
    end if
    If 整合=True then
      転記
    end if
  next j
next m

--------

で、整合=Falseなら転記するようにすれば
不整合のデータのみ転記になるかも。

【79092】Re:CSVで重複しないデータを抜き出し...
発言  マナ  - 17/5/4(木) 17:03 -

引用なし
パスワード
   ▼のんびり さん:

とんでもないミスがありました。

>内側のループが終わってから転記するようにします

といっておきながら、そうなっていませんでした。
あと、JCBシートのループが外側でしたね。

このような感じにすると、
整合・不整合を振り分けることもできます。

Dim 整合 as boolean

for j=1 to …JCBシートをループ
  整合=False
  for m=1 to …MMシートをループ
    If MMシートと同じデータなら then
      整合=True
      Exit For
    end if
  next m
  If 整合=True then
    整合シートに転記
  else
    不整合シートに転記
  end if
next j

14 / 12989 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free