- ベストアンサー
Array配列についての教えてください
- Array配列について教えてください。重複を防止するためにどのようなコードを使用すればいいですか?
- 指定した範囲のセルを処理対照セルと比較対照セルとして使用する方法を教えてください。
- 指定した範囲のセルを処理対照セルと比較対照セルとして使用する際の注意点を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
当方ではエラーは再現できませんでしたが不具合がありました。 Set c_in = Range("A1:A500,C1:C500") '//処理対照セル名を列記(入力セル) '★ Set c_cmp = Range("A1:A500,C1:C500") '//比較対照セル名を列記(参照セル) '★ と、指定しても 下記のところでは、A1:A500からC1:C500とならずに、A1:A1000となるようです。 i = 1 '★ '//処理対照セルかどうかを判定 While flag And (i <= c_in.Count) '★ If rng.Address = c_in(i).Address Then flag = False i = i + 1 Wend 折角のRange型参照を活用して、下記のようにしてください。 希望が叶うと思います。 '//処理対照セルかどうかを判定 For Each s In c_cmp If rng.Address = s.Address Then flag = False: Exit For Next
その他の回答 (2)
- xls88
- ベストアンサー率56% (669/1189)
>回答番号:No.1 この回答への補足 Excelには「マクロの記録」という素晴らしい道具があります。 A1セルを選択、Shiftキー+A10セルをクリック Ctrlキー+C1セルをクリック Shiftキー+C10セルをクリック といった操作を「マクロの記録」すれば答えが解ると思います。
補足
すみません・・・(>_<) お恥ずかしい限りです。ありがとうございました。 ところが実行すると下記コードでデバックエラーが出るのですが 原因が何とも判りません。 → If st.Range(s.Address).Value = rng.Value Then '★ 宜しくお願い致します。
- xls88
- ベストアンサー率56% (669/1189)
Range型に直します。 Sub Code_Check(s_ad As String) Dim st As Worksheet, rng As Range, flag As Boolean Dim i As Long, s Dim c_in As Range, c_cmp As Range '★ Set rng = ActiveSheet.Range(s_ad) On Error Resume Next If rng.Value = "" Then Exit Sub On Error GoTo 0 Set c_in = Range("A1:A500") '//処理対照セル名を列記(入力セル) '★ Set c_cmp = Range("A1:A500") '//比較対照セル名を列記(参照セル) '★ flag = True i = 1 '★ '//処理対照セルかどうかを判定 While flag And (i <= c_in.Count) '★ If rng.Address = c_in(i).Address Then flag = False i = i + 1 Wend If flag Then Exit Sub '//ブック内の全シートについて比較 For Each st In Worksheets For Each s In c_cmp If st.Range(s.Address).Value = rng.Value Then '★ If (st.Name <> ActiveSheet.Name) Or (st.Range(s.Address).Address <> rng.Address) Then '★ MsgBox ("重複エラー!!" & Chr(13) & "" & Chr(13) & _ "入力した受注番号は当BOOK内に既に存在します!確認して下さい!") Exit Sub End If End If Next s Next st End Sub
補足
xls88さん 返信ありがとうございます。 バッチリです!助かりました。ありがとうございます。 もうひとつだけ聞きたいのですが・・・ Range("A1:A500") ← 連続した対象範囲が複数の時は Range("A1:A500","C1:C500") ← ここの所をどのようにすれば いいのでしょうか? すみませんが、どうか宜しくお願い致します。
お礼
色々とありがとうございました。 本当に助かりました。 デバックエラーの件は下記のようにVALUE→TEXTに置き換えることで 回避出来ました。 → If st.Range(s).Text = rng.Text Then ありがとうございました。