Excel VBA質問箱 IV

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

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


3923 / 13646 ツリー ←次へ | 前へ→

【59462】特殊な重複チェック ほり 08/12/12(金) 10:38 質問[未読]
【59465】Re:特殊な重複チェック かみちゃん 08/12/12(金) 12:20 発言[未読]
【59466】Re:特殊な重複チェック ほり 08/12/12(金) 13:08 回答[未読]
【59467】Re:特殊な重複チェック にぃ 08/12/12(金) 14:23 発言[未読]
【59468】Re:特殊な重複チェック ほり 08/12/12(金) 14:45 発言[未読]
【59470】Re:特殊な重複チェック Abebobo 08/12/12(金) 15:14 発言[未読]
【59471】Re:特殊な重複チェック にぃ 08/12/12(金) 15:18 発言[未読]
【59472】Re:特殊な重複チェック neptune 08/12/12(金) 15:26 発言[未読]
【59476】Re:特殊な重複チェック ほり 08/12/12(金) 17:04 お礼[未読]
【59477】Re:特殊な重複チェック にぃ 08/12/12(金) 17:37 発言[未読]
【59478】Re:特殊な重複チェック にぃ 08/12/12(金) 17:39 発言[未読]
【59479】Re:特殊な重複チェック にぃ 08/12/12(金) 17:48 発言[未読]
【59480】Re:特殊な重複チェック ほり 08/12/12(金) 17:54 お礼[未読]

【59462】特殊な重複チェック
質問  ほり  - 08/12/12(金) 10:38 -

引用なし
パスワード
   A列**|B列**|C列***|D列*********|E列*******|F列***|G列*|
判定1|判定2|判定3*|ファルダパス|ファイル名|サイズ|時間|
○***|*****|******|C:\a********|あ********|1*****|9:01|
○***|*****|******|C:\a********|あ********|1*****|9:01|
×***|1****|サイズ|C:\b********|い********|2*****|9:02|
○***|1****|******|************|い********|3*****|9:02|
○***|1****|******|C:\c********|い********|3*****|9:02|
○***|2****|******|C:\c********|う********|4*****|9:03|
○***|2****|******|************|う********|4*****|9:03|
×***|2****|時間**|C:\c********|う********|4*****|9:09|
○***|3****|******|C:\d********|え********|5*****|9:04|
○***|3****|******|************|え********|5*****|9:04|
○***|3****|******|C:\d********|え********|5*****|9:04|
○***|3****|******|************|え********|5*****|9:04|
×***|3****|サと時|C:\d********|え********|6*****|9:05|

*は空白を埋める為ですので無視してください。
揃えるのが難しいです。すみません^^;

社内で利用する重複チェックのようなマクロなのですが、
上記のような並びでA列〜G列までそれぞれ項目があります。
※「フォルダパス」は入力されていないセルもあります。
※「判定1」の○と×の説明は省略させてください。
※「判定2」は判定の結果、空白のセルになる場合もあります。

今回お聞きしたいのは、「判定2」と「判定3」です。
「判定2」ではE列「ファイル名」が同じ塊の中でD列「フォルダパス」が入力されていて、有り無しの比率が1:1でないなら同じファイル名の塊に連番をつける。
比率が1:1であれば何も処理をしない(空白のまま)。
連番をつける理由はファイル名の塊を同じ数字の羅列でパッと見たいそうです。
「判定3」では「判定1」が「×」で「判定2」が「数字が入力されている箇所」のものだけを、
「サイズ」又は「時間」のどの部分が違うのかを判定して[時間]や[サイズ][ササと時]という文字を出力する。
判定3は「基本的には1つ下の行を見る。最終行なら1つ上の行を見て判断したいい。」
と言われたのですがさっぱり分からないものでして・・・。
上記の図が完成の形にしたいものです。


VBA初心者の為、ループの処理等もまだまだ知識が乏しく混乱しています・・・。
分かりにくい説明で申し訳ありませんが、ご教授頂けませんでしょうか。
  

【59465】Re:特殊な重複チェック
発言  かみちゃん E-MAIL  - 08/12/12(金) 12:20 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>*は空白を埋める為ですので無視してください。
>揃えるのが難しいです。

投稿欄の右下に「□等幅」と書かれたところがあると思います。
そこにチェックを入れると、空白でも綺麗に見えますよ。

以下のような感じです。

  A   B   C     D      E   F   G
1 判定1 判定2 判定3 フォルダパス ファイル名 サイズ 時間
2 ○         C:\a     あ     1   9:01
3          C:\a     あ     1   9:01

>「判定2」ではE列「ファイル名」が同じ塊の中でD列「フォルダパス」が入力され
> ていて、有り無しの比率が1:1でないなら同じファイル名の塊に連番をつける。

比率が1:1という算定方法がよくわかりません。
ファイル名の塊ということは、あらかじめ、ファイル名順に並べ替えされているのでしょうか?

>「サイズ」又は「時間」のどの部分が違うのかを判定して[時間]や[サイズ]
> [ササと時]という文字を出力する。

[ササと時]ですか?[サと時]ですか?

> 上記の図が完成の形にしたいものです。

マクロ実行前はどのような形になっているのですか?

>VBA初心者の為、ループの処理等もまだまだ知識が乏しく混乱しています・・・。

どのように混乱されているのでしょうか?
ループ処理など難しいことを考える前に、ご自身でできているものは何かないのでしょうか?

今のままでは、コードを提示されてもメンテナンスなど難しくないですか?
だからといって、あきらめたら?というわけではないのですが・・・
ここの掲示板は、Q&Aであって、作成依頼を請負う場所ではないことをご一考
いただければと思います。

【59466】Re:特殊な重複チェック
回答  ほり  - 08/12/12(金) 13:08 -

引用なし
パスワード
   A列 |B列 |C列  |D列     |E列    |F列  |G列 |
判定1|判定2|判定3 |ファルダパス|ファイル名|サイズ|時間|
○  |   |   |      |あ    |1   |9:01|
○  |   |   |C:\a    |あ    |1   |9:01|
×  |1  |サイズ|C:\b    |い    |2   |9:02|
○  |1  |   |      |い    |3   |9:02|
○  |1  |   |C:\c    |い    |3   |9:02|
○  |2  |   |C:\c    |う    |4   |9:03|
○  |2  |   |      |う    |4   |9:03|
×  |2  |時間 |C:\c    |う    |4   |9:09|
○  |3  |   |C:\d    |え    |5   |9:04|
○  |3  |   |      |え    |5   |9:04|
○  |3  |   |C:\d    |え    |5   |9:04|
○  |3  |   |      |え    |5   |9:04|
×  |3  |サと時|C:\d    |え    |6   |9:05|

図に少し間違いがありました。

>投稿欄の右下に「□等幅」と書かれたところがあると思います。
>そこにチェックを入れると、空白でも綺麗に見えますよ。
空白でも綺麗に見えるのですね。
ありがとうございます。

>「判定2」ではE列「ファイル名」が同じ塊の中でD列「フォルダパス」が入力され
> ていて、有り無しの比率が1:1でないなら同じファイル名の塊に連番をつける。
>比率が1:1という算定方法がよくわかりません。
>ファイル名の塊ということは、あらかじめ、ファイル名順に並べ替えされているの>でしょうか?
例えばファイル名「あ」はD列フォルダパスが空白のものが1つと入力されているものが1つで1:1だと思います。
ファイル名「い」はフォルダパスが空白のものが1つと入力されているものが2つで1:2だと思います。
比率が1:1でないなら、ファイル名「い」に対して判定2の箇所に数字の1を入力したいのです。
ファイル名順に並び替え後の段階です。

>[ササと時]ですか?[サと時]ですか?
[サと時]です。

>マクロ実行前はどのような形になっているのですか?
判定2と判定3が空白の段階です。
その2列分をマクロで作成したいと思っています。

>今のままでは、コードを提示されてもメンテナンスなど難しくないですか?
>だからといって、あきらめたら?というわけではないのですが・・・
>ここの掲示板は、Q&Aであって、作成依頼を請負う場所ではないことをご一考
>いただければと思います。
判定2と判定3を作成をする為に図のような表を作成してこういうのを作りたいです。というアピールなのですが、それでもダメでしょうか?
作成を依頼しているように思えましたら場違いですので消しますが・・・。

【59467】Re:特殊な重複チェック
発言  にぃ  - 08/12/12(金) 14:23 -

引用なし
パスワード
   ▼ほり さん:
こんにちは!

お先に質問なのですが、
>A列 |B列 |C列  |D列     |E列    |F列  |G列 |
>判定1|判定2|判定3 |ファルダパス|ファイル名|サイズ|時間|
>○  |   |   |      |あ    |1   |9:01|
>○  |   |   |C:\a    |あ    |1   |9:01|
この部分ですが、これだと判定2に数字入っちゃいませんか?


本題に入る前に、
>>今のままでは、コードを提示されてもメンテナンスなど難しくないですか?
>>だからといって、あきらめたら?というわけではないのですが・・・
>>ここの掲示板は、Q&Aであって、作成依頼を請負う場所ではないことをご一考
>>いただければと思います。
>判定2と判定3を作成をする為に図のような表を作成してこういうのを作りたいです。というアピールなのですが、それでもダメでしょうか?
>作成を依頼しているように思えましたら場違いですので消しますが・・・
解釈の違いかもしれませんが、始めに少しでも出来るところから
マクロを作成してみてはどうですか?ということを言いたかったのだと思います^^;
マクロ記録という便利な機能もありますしね。


本題に入りますと、まず「どの部分に目を向けていけばいいのか」わからない
状況なのではないかと思います。
またこれだけの処理ですと人それぞれ色々な考え、回答があると思います。

そこで、「判定2」と「判定3」を別々に考えていくとして。

お先に「判定2」だけですと、
1、 まず何行目まで文字(表?)があるのか取得する
例、RowE = Range("E" & Rows.Count).End(xlUp).Row

2、 D列を参照し「空白」の時を探す
If文を使って

3、 2で「空白」の時さらにB列も「空白」かどうか判定する
同じくIf文を使う

4、 2と3の条件の時と同じ行の「ファイル名」を取得する
例、FileNm = Range("E2").Value

5、 4で取得したファイル名と同じ「ファイル名」をすべて探す
「Find」や「Like」などを使用

6、 5で探した「ファイル名」と同じ行数のB列に「1」をすべてに記入
例、変数を使って
  j = j + 1
  Range("B2").Value = j

7、 6の操作が終わったら「1」に+1して2〜6の作業を1で取得した
   行数目まで繰り返す。
2〜6の作業をFor Nextなどでループ

と、私はこのように考えましたがどうでしょう?

今記載した関数などを調べてみると色々わかると思います^^

【59468】Re:特殊な重複チェック
発言  ほり  - 08/12/12(金) 14:45 -

引用なし
パスワード
   >お先に質問なのですが、
>>A列 |B列 |C列  |D列     |E列    |F列  |G列 |
>>判定1|判定2|判定3 |ファルダパス|ファイル名|サイズ|時間|
>>○  |   |   |      |あ    |1   |9:01|
>>○  |   |   |C:\a    |あ    |1   |9:01|
>この部分ですが、これだと判定2に数字入っちゃいませんか?
はい。判定2は数字を入れたいのです。
「判定」という言葉の使い方がよくなかったのかもしれませんが、同じ数字を入れてファイル名の塊がここからここまでだよ。と分かりやすくしたいのです。

>本題に入りますと、まず「どの部分に目を向けていけばいいのか」わからない
>状況なのではないかと思います。
>またこれだけの処理ですと人それぞれ色々な考え、回答があると思います。
はい。おっしゃるとおりです。
そもそもPGの組み方そのものが分かりません。
社内で使うみたいですが、(事務系の仕事をしています)作れる人がいないから作ってくれと言われまして・・・。
作成にあたっての考え方等は、ほんとに助かります。
PG作成の経験がないので発想力がないのです。
関数等は本を見ればある程度は分かるかな?と思ってコツコツやっています。

【59470】Re:特殊な重複チェック
発言  Abebobo  - 08/12/12(金) 15:14 -

引用なし
パスワード
   横から失礼します。

>そもそもPGの組み方そのものが分かりません。
>作れる人がいないから作ってくれと言われまして・・・。
このような会社は辞めちまえ!! って思ったりして(笑)

Sub Test()
Dim Last_r As Long
Dim i    As Long
i = 3

With ActiveSheet '今表示してあるシートで
 Last_r = .Range("E" & Rows.Count).End(xlUp).Row 'E列の最終行を取得
 For i = 3 To Last_r  '3行目からE列最終行まで処理します。
  'もし E列のi行の値とその上の(i-1)値が違えば
  If .Range("E" & i).Value <> .Range("E" & i - 1).Value Then
   'B列の一番大きい数字に1を足す
   .Range("B" & i).Value = Application.WorksheetFunction. _
              Max(.Range("B3:B" & i).Value) + 1
  Else 'E列のi行の値とその上の(i-1)値が違えば じゃなかったら
   'その上の数字をそのままで記入
   .Range("B" & i).Value = .Range("B" & i - 1).Value
  End If
 Next i
End With

End Sub

上記マクロは、判定2に関してだけです。
ファイル名で並べ替えが終わっている表でしか通用しません。

にぃさんのおっしゃるとおり(通じていなかったかも)
ファイル名 あ の所に 1 が入ります。

>関数等は本を見ればある程度は分かるかな?と思ってコツコツやっています。
を信じて
これを足がかりにしてください。

【59471】Re:特殊な重複チェック
発言  にぃ  - 08/12/12(金) 15:18 -

引用なし
パスワード
   ▼ほり さん:
こんにちは!

>そもそもPGの組み方そのものが分かりません。
>社内で使うみたいですが、(事務系の仕事をしています)作れる人がいないから作ってくれと言われまして・・・。
いきなりハードですね。
PGの組み方から入るのでしたら、やはりマクロ記録と簡単なコード作成
から入っていくのがいいと思います。
そこから自分なりにマクロを作成しわからないところは質問していったほうが
一番いいかと思います。


>関数等は本を見ればある程度は分かるかな?と思ってコツコツやっています。
よく私がお世話になっているサイトです。
参考にしてみてください。
ht tp://www.eurus.dti.ne.jp/~yoneyama/Excel/Exl-_zen.htm#vba
ht tp://officetanaka.net/excel/vba/tips/

【59472】Re:特殊な重複チェック
発言  neptune  - 08/12/12(金) 15:26 -

引用なし
パスワード
   ▼ほり さん:
横から失礼

なんか心配になってきましたので。
>作成にあたっての考え方等は、ほんとに助かります。
という事で、

>そもそもPGの組み方そのものが分かりません。
>社内で使うみたいですが、(事務系の仕事をしています)作れる人がいないから作ってくれと言われまして・・・。
が、経験が無いのでは、すぐには出来ないのは当たり前です。
 
で、何が心配かというと「社内で使う」なら、何かの不具合、改造などがあった
とき誰がその後始末をするのかという話です。直接的な対応はほりさん、
全体的な責任はそのいくつか上の上司でしょう。
従って、そのプログラムを隅々まで理解していなければ対応できません。
隅々まで理解するには使用する言語の基礎が無ければ出来ません。

VBAは開発言語VB(Visual Basic)のサブセットで仕様を一部(が大きいけど)
制限しているだけで同じものです。そこの所を理解しておいて下さい。

他人様に業務上で使用してもらうプログラムを書く事に
「PG作成の経験がない」
ってな事はそれを使って仕事をする人には何の関係も無いことです。

なので、準備として
1.Excelの機能の応用編辺りまでは一般機能を読破する。(これは大丈夫かな)
2.VBAの入門書を1冊最初から最後まで読破する。※必須
は必要です。

後は2、と平行しても良いですが、自分のしたい事を
3.人に伝えられるくらいキッチリ纏める
4.一般機能でどうやって実現するか?
5.3で出来ない所はどこか把握する
6.4.で出来る所はマクロの記録を参考にする
7.全体を組み立てる
8.動作の検証

人に使ってもらうプログラムを書くには自分で使うプログラムを書く手間の
10倍の手間がかかります。・・・と、ある人が書いていたんですが、
決して大げさではありません。

ある程度の時間の猶予を上司に相談して頂きましょう。

#例え、掲示板で動作するプログラムを頂いたとしても、それがそのまま
使えると思ってはいけません。だって、提供した人には何の責任もないのですから。

【59476】Re:特殊な重複チェック
お礼  ほり  - 08/12/12(金) 17:04 -

引用なし
パスワード
   皆様ありがとうございます。
ごもっとものお言葉ばかりです。
元からB列は空白なので、空白かどうか判定するというのがさっぱり分かりませんが・・・。

なんとか作成してみます。
ダメだったらマクロで自動化はもう諦めます。
エクセルの通常の操作でやってもらいます。

【59477】Re:特殊な重複チェック
発言  にぃ  - 08/12/12(金) 17:37 -

引用なし
パスワード
   ▼ほり さん:
こんにちは!

>元からB列は空白なので、空白かどうか判定するというのがさっぱり分かりませんが・・・。
そうですね。元からB列は空白なのでわかりずらかと思いましたが、
せっかくなので段階別に見てほしいと思います。

図1
>A列 |B列 |C列  |D列     |E列    |F列  |G列 |
>判定1|判定2|判定3 |ファルダパス|ファイル名|サイズ|時間|
>○  |   |   |C:\a    |あ    |1   |9:01|
>○  |   |   |C:\a    |あ    |1   |9:01|
>×  |1  |   |C:\b    |い    |2   |9:02|
>○  |1  |   |<空白発見> |い    |3   |9:02|
>○  |1  |   |C:\c    |い    |3   |9:02|
>○  |   |   |C:\c    |う    |4   |9:03|
>○  |   |   |      |う    |4   |9:03|
>×  |   |   |C:\c    |う    |4   |9:09|
>○  |   |   |C:\d    |え    |5   |9:04|
>○  |   |   |      |え    |5   |9:04|
>○  |   |   |C:\d    |え    |5   |9:04|
>○  |   |   |      |え    |5   |9:04|
>×  |   |   |C:\d    |え    |6   |9:05|

図2
>A列 |B列 |C列  |D列     |E列    |F列  |G列 |
>判定1|判定2|判定3 |ファルダパス|ファイル名|サイズ|時間|
>○  |   |   |C:\a    |あ    |1   |9:01|
>○  |   |   |C:\a    |あ    |1   |9:01|
>×  |1  |   |C:\b    |い    |2   |9:02|
>○  |1  |   |      |い    |3   |9:02|
>○  |1  |   |C:\c    |い    |3   |9:02|
>○  |2  |   |C:\c    |う    |4   |9:03|
>○  |2  |   |<空白発見> |う    |4   |9:03|
>×  |2  |   |C:\c    |う    |4   |9:09|
>○  |   |   |C:\d    |え    |5   |9:04|
>○  |   |   |      |え    |5   |9:04|
>○  |   |   |C:\d    |え    |5   |9:04|
>○  |   |   |      |え    |5   |9:04|
>×  |   |   |C:\d    |え    |6   |9:05|

図3
>A列 |B列 |C列  |D列     |E列    |F列  |G列 |
>判定1|判定2|判定3 |ファルダパス|ファイル名|サイズ|時間|
>○  |   |   |C:\a    |あ    |1   |9:01|
>○  |   |   |C:\a    |あ    |1   |9:01|
>×  |1  |   |C:\b    |い    |2   |9:02|
>○  |1  |   |      |い    |3   |9:02|
>○  |1  |   |C:\c    |い    |3   |9:02|
>○  |2  |   |C:\c    |う    |4   |9:03|
>○  |2  |   |      |う    |4   |9:03|
>×  |2  |   |C:\c    |う    |4   |9:09|
>○  |3  |   |C:\d    |え    |5   |9:04|
>○  |3  |   |<空白発見> |え    |5   |9:04|
>○  |3  |   |C:\d    |え    |5   |9:04|
>○  |3  |   |      |え    |5   |9:04|
>×  |3  |   |C:\d    |え    |6   |9:05|

図4
>A列 |B列 |C列  |D列     |E列    |F列  |G列 |
>判定1|判定2|判定3 |ファルダパス|ファイル名|サイズ|時間|
>○  |   |   |C:\a    |あ    |1   |9:01|
>○  |   |   |C:\a    |あ    |1   |9:01|
>×  |1  |   |C:\b    |い    |2   |9:02|
>○  |1  |   |      |い    |3   |9:02|
>○  |1  |   |C:\c    |い    |3   |9:02|
>○  |2  |   |C:\c    |う    |4   |9:03|
>○  |2  |   |      |う    |4   |9:03|
>×  |2  |   |C:\c    |う    |4   |9:09|
>○  |4  |   |C:\d    |え    |5   |9:04|
>○  |4  |   |      |え    |5   |9:04|
>○  |4  |   |C:\d    |え    |5   |9:04|
>○  |4  |   |<空白発見> |え    |5   |9:04|
>×  |4  |   |C:\d    |え    |6   |9:05|

順番では 1.D列に空白発見2.B列空白発見 と前に記述したと思います。
ですがこの2.が処理しなかった場合図3から図4となってしまいます。
これはD列が空白と発見した際に同じファイル名の行数に数字を記載するからです。
このような感じでわかりますでしょうか?


>ダメだったらマクロで自動化はもう諦めます。
>エクセルの通常の操作でやってもらいます。
確かに初めて(?)のマクロでこのような処理はハードルが高すぎると思います。
マクロの足がかりとして、マクロが嫌になってしまうのもあれですので
私が作ったサンプルコードを載せておきます。

こちらは自己責任でご使用になり、参考程度にお使いください。
ご希望通り動作すると思いますが、これを使って事務をすることはおすすめ出来ません。
なぜ動くのだろう?どのように構成されているのだろう?
といった勉強材料に使っていただけると幸いです。

またneptuneさんから色々アドバイスがありますが、私もその通りだと思います。

書ききれないので次の投稿に記載しますね^^;

【59478】Re:特殊な重複チェック
発言  にぃ  - 08/12/12(金) 17:39 -

引用なし
パスワード
   サンプルコードです。

Sub test1() '判定2の処理

  Dim i As Long
  Dim j As Long: j = 0 'j初期化
  Dim RowE As Long
  Dim FileNm As String
  Dim Rn As Range
  Dim StartAd As String
  
  RowE = Range("E" & Rows.Count).End(xlUp).Row 'E列の最後の文字がある行数の値
  
  For i = 2 To RowE
  
    If Range("D" & i).Value = "" Then 'D列が空白の時
    
      If Range("B" & i).Value = "" Then 'B列がまだ空白のとき
      
        j = j + 1 'jに1を足す
        FileNm = Range("E" & i).Value 'E列のファイル名を取得
        Set Rn = Range("E2:E" & RowE).Find(What:=FileNm) 'E列を参照し同じファイル名のセルを探す
        StartAd = Rn.Address '最初に見つけたセルのアドレスを覚えておく(取得)
        Do
          Range("B" & Rn.Row).Value = j 'B列の該当行に数字を記入
          Set Rn = Range("E2:E" & RowE).FindNext(Rn) '他のセルに同じファイル名があるか探す
          If Rn.Address = StartAd Then Exit Do '最初に見つけたセルのアドレスと同じならLoopをやめる
        Loop '同じファイル名があるだけLoopする
      
        Set Rn = Nothing 'Rnの解放(詳しくはHPなどで調べてください^^;)
      
      End If
    
    End If
  
  Next 'E列に文字があるだけ繰り返します

End Sub

Sub test2() '判定3の処理

  Dim i As Long
  Dim RowA As Long
  
  RowA = Range("A" & Rows.Count).End(xlUp).Row
  
  For i = 2 To RowA
  
    If Range("A" & i).Value = "×" And Range("B" & i).Value <> "" Then
    
      If Range("B" & i).Value = Range("B" & i + 1).Value Then 'B列のセルの値と1つ下の値が同じ時、1つ下のセルと比較
      
        If Range("F" & i).Value <> Range("F" & i + 1).Value And _
          Range("G" & i).Value <> Range("G" & i + 1).Value Then '二つとも違う場合
          
          Range("C" & i).Value = "サと時"
          
        ElseIf Range("F" & i).Value <> Range("F" & i + 1).Value Then 'どちらかが一緒でサイズが違うとき
        
          Range("C" & i).Value = "サイズ"
        
        ElseIf Range("G" & i).Value <> Range("G" & i + 1).Value Then 'どちらかが一緒で時間が違うとき
        
          Range("C" & i).Value = "時間"
        
        End If
      
      Else '違うとき、1つ上のセルを比較する
      
        If Range("F" & i).Value <> Range("F" & i - 1).Value And _
          Range("G" & i).Value <> Range("G" & i - 1).Value Then '二つとも違う場合
          
          Range("C" & i).Value = "サと時"
          
        ElseIf Range("F" & i).Value <> Range("F" & i - 1).Value Then 'どちらかが一緒でサイズが違うとき
        
          Range("C" & i).Value = "サイズ"
        
        ElseIf Range("G" & i).Value <> Range("G" & i - 1).Value Then 'どちらかが一緒で時間が違うとき
        
          Range("C" & i).Value = "時間"
        
        End If
      
      End If
    
    End If
  
  Next 'A列に文字があるだけ繰り返す

End Sub

Sub test3() '判定2と判定3を一緒にしたもの

  Dim i As Long
  Dim j As Long: j = 0 'j初期化
  Dim RowE As Long
  Dim FileNm As String
  Dim Rn As Range
  Dim StartAd As String
  
  RowE = Range("E" & Rows.Count).End(xlUp).Row 'E列の最後の文字がある行数の値
  
  For i = 2 To RowE
  
    If Range("D" & i).Value = "" Then 'D列が空白の時
    
      If Range("B" & i).Value = "" Then 'B列がまだ空白のとき
      
        j = j + 1 'jに1を足す
        FileNm = Range("E" & i).Value 'E列のファイル名を取得
        Set Rn = Range("E2:E" & RowE).Find(What:=FileNm) 'E列を参照し同じファイル名のセルを探す
        StartAd = Rn.Address '最初に見つけたセルのアドレスを覚えておく(取得)
        Do
          Range("B" & Rn.Row).Value = j 'B列の該当行に数字を記入
          Set Rn = Range("E2:E" & RowE).FindNext(Rn) '他のセルに同じファイル名があるか探す
          If Rn.Address = StartAd Then Exit Do '最初に見つけたセルのアドレスと同じならLoopをやめる
        Loop '同じファイル名があるだけLoopする
      
        Set Rn = Nothing 'Rnの解放(詳しくはHPなどで調べてください^^;)
      
      End If
    
    End If
  
  Next 'E列に文字があるだけ繰り返します
  
  For i = 2 To RowE
  
    If Range("A" & i).Value = "×" And Range("B" & i).Value <> "" Then
    
      If Range("B" & i).Value = Range("B" & i + 1).Value Then 'B列のセルの値と1つ下の値が同じ時、1つ下のセルと比較
      
        If Range("F" & i).Value <> Range("F" & i + 1).Value And _
          Range("G" & i).Value <> Range("G" & i + 1).Value Then '二つとも違う場合
          
          Range("C" & i).Value = "サと時"
          
        ElseIf Range("F" & i).Value <> Range("F" & i + 1).Value Then 'どちらかが一緒でサイズが違うとき
        
          Range("C" & i).Value = "サイズ"
        
        ElseIf Range("G" & i).Value <> Range("G" & i + 1).Value Then 'どちらかが一緒で時間が違うとき
        
          Range("C" & i).Value = "時間"
        
        End If
      
      Else '違うとき、1つ上のセルを比較する
      
        If Range("F" & i).Value <> Range("F" & i - 1).Value And _
          Range("G" & i).Value <> Range("G" & i - 1).Value Then '二つとも違う場合
          
          Range("C" & i).Value = "サと時"
          
        ElseIf Range("F" & i).Value <> Range("F" & i - 1).Value Then 'どちらかが一緒でサイズが違うとき
        
          Range("C" & i).Value = "サイズ"
        
        ElseIf Range("G" & i).Value <> Range("G" & i - 1).Value Then 'どちらかが一緒で時間が違うとき
        
          Range("C" & i).Value = "時間"
        
        End If
      
      End If
    
    End If
  
  Next 'A列に文字があるだけ繰り返す

End Sub

【59479】Re:特殊な重複チェック
発言  にぃ  - 08/12/12(金) 17:48 -

引用なし
パスワード
   >こちらは自己責任でご使用になり、参考程度にお使いください。
>ご希望通り動作すると思いますが、これを使って事務をすることはおすすめ出来ません。
>なぜ動くのだろう?どのように構成されているのだろう?
>といった勉強材料に使っていただけると幸いです。
すみません、ちょっと無責任なこと言ってますね。

サンプルコードでご希望通りの動作をし、またコード内の意味が
だいたい把握できましたら、私のコードでよければお使いくださいm(__)m
でないと、後から大変になってくるのは ほり さん自身だと思いまして^^;

【59480】Re:特殊な重複チェック
お礼  ほり  - 08/12/12(金) 17:54 -

引用なし
パスワード
   にぃさん丁寧な解説までありがとうございます。
どうしてもマクロを作ってほしいと言われてますが、
少し上司と相談してみます。
コードを資料として参考にさせていただきます。
今のスキルの状態ではコードを見ても分からないことだらけですので・・・。

皆様ほんとうにありがとうございました。

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