dポイントプレゼントキャンペーン実施中!

VBA初心者です。Xp,Excel2000を使用しています。
シフト者のカレンダー作成しており、動作していたVBAのコピーを利用しています。
何回かループを回った後表記エラーとなります。アドバイスをお願いいたします。

  A B C D E
--------------------------
1 2 3 4 ...... <-- 日付
2 2 0 1 ...... <-- シフト(ln_1の範囲名)
7 8 9 10 ...... <-- 日付
1 0 3 3 ..... <-- シフト(ln_2の範囲名)
....................

For i = 1 To 6   <-- 最大6週にわたる
Set r = Range("ln_" & LTrim$(Str$(i)))
cpos = r.Column
rpos = r.Row
For n = 1 To r.Columns.Count
With Cells(rpos - 1, cpos + n - 1)
m = .Characters.Count <-- 数回ループ後ここでエラーとなる!
s = Cells(rpos, cpos + n - 1) <-- シフト情報
Select Case s
Case ""    '- Blank -
........ 日付セルの装飾

Case "0" '- Holiday -
......... 日付セルの装飾

Case "1" '- shift1 -
........... 日付セルの装飾

A 回答 (6件)

よく調べてみたら、Characters.Countは、"ABC"などの文字列では3を返しますが、"123"ではエラーになり、数字ではだめなようです。

セルの書式を文字列にしてもだめでした。

m = .Characters.Count は文字の数をお知りになりたいだけのようなので、以下のコードに換えて試してみてください。

m=Len(.value)

なお、MsgBox .Address などは、エラーのでるコードの前に挿入、という意味で書きました。
泥臭い方法ですが、コードがどのセルを参照しているのかわかるので、エラーがでる時などにはおすすめです。
    • good
    • 1
この回答へのお礼

再びありがとうございます!
あなたの言われる通りです。これで疑問が氷解いたしました。Helpファイルの説明だけでは、読みきれませんでした。(ん...修行が足りぬ。)長くお付き合いさせてしまって、ごめんなさい。sakenomoさん、お礼に本当に一緒に「酒飲み(sakenomo)」たい気分です。
今後も、宜しくお願いします!!

お礼日時:2003/04/20 00:16

再びこんにちは。



> *Cells()はObjectとですので、Cellの頭の点はお間違いですね?)
> ループの外で With Worksheets("XXXX")でシート明示しました

えっと、当方Excel97なんですが、Excel97ではCellsはプロパティです。
この場合、特定のWorksheetオブジェクトのセルに対しての操作なので、

.Cells

にしないとWithの意味が無いと思います。
Excel2000以降では違うのかな?

原因は別の所だったようですが、、、
    • good
    • 0
この回答へのお礼

ありがとうございました!No.3の回答で解決できました。
今後も宜しくお願いいたしますpapayukaさん!

お礼日時:2003/04/20 00:19

エラーがでるコードの前に、


MsgBox .Value とか、
MsgBox .Address 
などを置いて様子をみてはいかがでしょう。

In_*の名前が付けられたセル範囲の列と、
日付セルの列が合っていない部分がある
ような気がしますが…。

この回答への補足

ご教授の件を試行錯誤している時、日付セルを修正入力(F2+Enter)あるいは新規に入力(TAB or ENTER)すると、
エラーを起こす場所(セル)が入力した次のセルに移動します。
コードでセルデータを、自身のデータで上書きしてもNGです。

全ての日付データを入力しなおしたら、最後までループが回りました!!
一体どう言う事なんでしょう?

*後学のため、どなたか考えられる要因と対処方法をお教え願えないでしょうか?

補足日時:2003/04/19 18:56
    • good
    • 0
この回答へのお礼

ありがとうございます。
ご教授の件は Debug.Print .Address, .Value でしょうか?
Debugの中にも色々知らない便利な機能があるんですね!…

ご指摘の定義名の列と日付セルの列は、合っていました。

お礼日時:2003/04/19 18:56

こんにちは。



問題の Select Case部分が解らないのですが、、、

With Worksheets("Sheet1")
m = .Cells(rpos - 1, cpos + n - 1).Characters.Count
s = .Cells(rpos, cpos + n - 1)

のように、シートを明示した場合はどうでしょう?
    • good
    • 3
この回答へのお礼

ありがとうございます。Withってネストできますよね?

(1)ループの外で With Worksheets("XXXX")でシート明示しました....NGでした。(WIthのネスト)
(2)ご指摘の場所でシート明示し、日付セル( Cells(rpos - 1, cpos + n - 1))のコントロール、プロパティ部分はWithを用いず全てコーディングしました。....NGでした。

(*Cells()はObjectとですので、Cellの頭の点はお間違いですね?)

*何が原因なのでしょうか?この2,3日悩んでおります!

お礼日時:2003/04/19 17:05

たぶん外していると思いますが…


End With が無いためとか?
    • good
    • 0
この回答へのお礼

ありがとうございます!
No.1でも補足しましたように、基本部分は変更しておりませんので....

お礼日時:2003/04/18 15:03

たぶん、セルのどこかに、Null(空白)があると思います。

0とか空白を埋めて試してください。

この回答への補足

早速の回答有難うございます!元のVBAの基本部分は変更せず、セルの装飾部分だけの変更です。このデータで元のVBAで動作し、正常に動作している事を確認しております。そこから変更部分をコーディングしておりますので、データ(セル)に御指摘の不具合があるとはおもわれません。

>たぶん、セルのどこかに、Null(空白)があると思います。0とか空白を埋めて試してください。

補足日時:2003/04/18 14:53
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!