|
▼free さん:
>このコードの場合、最初にIf L > myStLen Thenを通過する時に最大文字数mystlenが無いと思うのでですがエラーになりません。
>最初の比較はどうなるのか概念がわかりません。
>比較対照がないのになぜ?
変数myStLen はLong型(数値型)の変数として宣言しています。
よって、宣言した時点で 数値0 に「初期化」されています。
最初の比較は
If L > 0 Then
となって、ただしく比較されています。
>もうひとつ L = Len(.Cells(i, 1).Value)だったら.valueいらないのでは?
>.textにするならわかるけど。
>基本的には.textの方がいいのかな?
Cells(i,1) ではセル自身(Rangeオブジェクト)です。比較したいのは
セルの値ですから .Value プロパティを省略しないのが原則です。
また(おっしゃるように)せっかくプロパティを使うんなら(文字列の
比較だから) .Textプロパティを使ったほうがいい、ということはいえる
でしょうね。
(とくに調べる範囲の中に、数値や空白セルが存在するとき)
あと、実際にどのくらいの行数があるのか分かりませんが、
調べたいA列のデータを以下のように配列に入れておいて、
Loopの中で最大文字数の行を調べてから、そのセルに移動する
というより効率的な(画面がチカチカしない)方法もあることを
覚えておくのも無駄ではないと思います。
Sub Try1()
Dim v, i As Long
Dim MaxLen As Long '最大文字数
Dim MaxPos As Long '最大文字数のある行
v = Application.Text(ActiveSheet.UsedRange.Columns(1), "@")
For i = 1 To UBound(v)
If Len(v(i, 1)) > MaxLen Then
MaxLen = Len(v(i, 1))
MaxPos = i
End If
Next
'Application.Goto Cells(MaxPos, 1), True
'または
Cells Cells(MaxPos, 1).Select
End Sub
|
|