人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセルシート1のA列とB列に、それぞれ、日付けと金額のデータが入っています。
また、エクセルシート2のA列とB列に、それぞれ、日付けと金額のデータが入っています。
エクセルシート1のC列に、次の場合分けで結果を返したいです。
?シート2に、日付けと金額の組み合わせが完全に一致するデータがある場合:一致する数
?シート2に、日付けは違うが、その違いは5日以内であり、それと金額の組み合わせが完全に一致するデータがある場合:一致する数と、"日付け違い"という文字列
?上記??以外の場合:0
どうすればいいでしょうか?

●質問者: sacrifice225
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● lang_and_engine
●200ポイント

できましたよ?。


Sub main()
  ' シート1の金額をキーに検索をかける
 
 Dim sheet1 As Worksheet
 Set sheet1 = Worksheets("Sheet1")
 
 y = 1
 continue_flag = True
 Do While continue_flag = True
 
 kingaku = sheet1.Cells(y, 2).Value
 
 If Len(kingaku) > 0 Then
 hiduke = sheet1.Cells(y, 1).Value
 
  ' この値でシート2に問い合わせる
 result = scan_sheet(hiduke, kingaku)
 
  ' 結果を書き込み
 sheet1.Cells(y, 3).Value = result
 
  ' 次の行へ
 y = y + 1
 Else
  ' 金額の行の終わり
 continue_flag = False
 End If
 
 Loop
 
End Sub


' シート2に問い合わせる
Function scan_sheet(hiduke, kingaku)

 Dim sheet2 As Worksheet
 Set sheet2 = Worksheets("Sheet2")
 
  ' 完全一致の個数
 cnt_icchi = 0
 
  ' 日付がずれたデータは一個しかないと仮定する。
  ' 日付がずれたデータが存在するかどうか
 zure_flag = False
 
 y = 1
 continue_flag = True
 Do While continue_flag = True
 
 cmp_kingaku = sheet2.Cells(y, 2).Value
 
 If Len(cmp_kingaku) > 0 Then
 cmp_hiduke = sheet2.Cells(y, 1).Value
 
  ' 完全一致か?
 If (cmp_kingaku = kingaku) And (cmp_hiduke = hiduke) Then
 cnt_icchi = cnt_icchi + 1
 End If
 
  ' 金額だけ同じで,日付がずれたデータか?
 d1 = CDate(hiduke)
 d2 = CDate(cmp_hiduke)
  ' http://www.ken3.org/vba/backno/vba072.html
 d_diff = DateDiff("d", d1, d2)
  ' http://www.geocities.jp/cbc_vbnet/function/date.html
 If (cmp_kingaku = kingaku) And (Abs(d_diff) < 6) And (Abs(d_diff) > 0) Then  ' 5日以内
  ' ずれたデータが存在するとみなす
 zure_flag = True
 End If
 
  ' 次の行へ
 y = y + 1
 Else
  ' 金額の行の終わり
 continue_flag = False
 End If
 Loop

  ' 結果を返す・・・★
 scan_sheet = "完全一致の個数:" & cnt_icchi
 If zure_flag = True Then
 scan_sheet = scan_sheet & " 日付け違いあり"
 End If
 
End Function


C列に表示する文字列は,★の部分をお好みでカスタマイズして下さい。


sacrifice225さんのコメント
ありがとうございます!これ、どうやっていれたらよいのでしょう?ど素人ですみません。

lang_and_engineさんのコメント
Alt + F11キーで,VBEditorを立ち上げます。 Sheet1をダブルクリックして,右側のエディタ部分にマクロを貼り付けます。 エディタ内でSub mainの部分にカーソルを合わせてから,F5キーを押すと,該当するマクロが実行されます。 Excel VBA 入門講座 コードの入力と実行 http://excelvba.pc-users.net/fol1/1_2.html

sacrifice225さんのコメント
ありがとうございます!ちょっとカスタマイズをためしてみます!

sacrifice225さんのコメント
本当に有り難うございました。助かりました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ